Database Developer Flashcards
https://interviewbaba.com/database-developer-interview-questions/
データベースの設計と正規化に関する経験について説明してもらえますか? (3)
(データベース設計と正規化)
1) データの理解:
データとその関係を徹底的に理解することから始めます。これには、関係者と話し合い、データの使用パターンを分析することが含まれます。
2) Applying Normal Forms
/正規形の適用:
データが適切に構造化されていることを確認するために、通常は第 3 正規形 (3NF) までの正規形を適用します。
- 1NF : テーブルの各セルには単一の値, 各レコードは一意
- 2NF : 候補キー関係のサブセットに機能的に依存しない単一列の主キー
- 3NF : 推移的な関数の依存関係がない
3) Considering Denormalization/
非正規化の検討:
場合によっては、正規化原則の厳密な遵守よりもパフォーマンスの方が重要な場合、クエリのパフォーマンスを最適化するために戦略的にテーブルを非正規化しました。
[DBMS 正規化: 1NF、2NF、3NF データベースの例]
https://www.guru99.com/ja/database-normalization.html
データベースの種類ごとに適した用法と理由を説明しなさい(3)
(データベーステクノロジーと設定)
1) MySQL : 使いやすさと多数のホスティング プロバイダーとの互換性により、Web アプリケーションに最適な選択肢です。そのオープンソースの性質と活発なコミュニティのサポートに感謝しています。
2) PostgreSQL : JSON データ型のサポートや高度な同時実行制御など、PostgreSQL の高度な機能を高く評価しています。複雑なクエリに対するパフォーマンスと信頼性により、エンタープライズ アプリケーションにとって強力な選択肢となります。
3) Microsoft SQL Server : 企業の観点から見ると、SQL Server は非常に堅牢で、他の Microsoft サービスとよく統合されていることがわかります。 SQL Server Management Studio (SSMS) などの強力なツールは、データベースの効率的な管理と開発に役立ちます。
データベースで ACIDを確保する方法を説明しないさい(4)
(トランザクション管理)
1) アトミック性(Atomicity): BEGIN TRANSACTION: 、COMMIT、などのトランザクション制御ステートメントを使用して、トランザクションがアトミック単位として処理されることを保証しますROLLBACK。これにより、トランザクション内のすべての操作が正常に完了するか、いずれも適用されないことが保証されます。
2) 一貫性(Consistency): データベース内に適切な制約とビジネス ロジックを実装することで、データベースの一貫性を維持します。これには、データベースへの無効なデータの入力を防ぐための外部キー、チェック制約、トリガーの利用が含まれます。
3) 分離(Isolation): 同時実行性を管理し、分離を維持するために、DBMS によって提供されるトランザクション分離レベル (READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE) を使用します。各トランザクションのニーズに基づいて適切なレベルを選択し、パフォーマンスと必要な分離度のバランスをとります。
4) 耐久性(Durability): 私は、先行書き込みログ (WAL) やバックアップの適切な構成など、データベースに組み込まれた耐久性機能を利用して、一度コミットされたトランザクションがシステム クラッシュの場合でも確実に保持されるようにしています。
効率的な SQL クエリを作成するための方法説明しなさい (8)*
(SQL の熟練度)
R-JABOTIS(Rジャボティス: ガウンの襟元につける装飾)
Requirement
Join
Aggregate
Batch
Optimizer
Type
Indexing
Select
1) Requirement:
要件を理解する: クエリを作成する前に、どのデータを取得または操作する必要があるかを明確に理解します。
2) Data Types:
適切なデータ型を選択する: 列に適切なデータ型を使用して、ストレージを削減し、クエリのパフォーマンスを向上させます。
3) Join:
結合を適切に使用する: サブクエリの方が合理的である場合を除き、パフォーマンスと読みやすさを向上させるために、サブクエリよりも JOIN を優先します。
4) Indexing
/インデックス作成:
WHERE 句や JOIN 条件で頻繁に使用される列では、インデックスを賢く使用してください。
5) SELECT *を避ける:
必要な列のみを選択します。
6) Aggregate: 賢明な集計とフィルタリング:処理されるデータを最小限に抑えるために、WHERE集計関数 ( ) の前にフィルタリング条件 (句) を適用します。GROUP BY
7) クエリ オプティマイザーを使用する: Explain プランとクエリ オプティマイザーを利用して、クエリのパフォーマンスを理解し、改善します。
8) バッチ操作: 大規模なデータセットを扱う場合、ロックを最小限に抑えて負荷を軽減するバッチ操作。
運用環境でデータベースの移行を手順を説明しなさい(6)*
(データベース管理)
VABaMiT-M (ババ・ミットM)
1) Version Control
/バージョン管理:
変更を追跡し、必要に応じてロールバックを容易にするために、すべてのデータベース スキーマの変更をアプリケーション コードとともにバージョン管理システムで管理します。
2) Automated Migration Scripts
/自動化された移行スクリプト:
運用環境に展開する前に、開発およびステージング環境で自動化およびテストできる移行スクリプトまたはツール (Liquibase や Flyway など) を利用します。
3) Backup Before Migration
/移行前のバックアップ:
何か問題が発生した場合に復元できるように、移行を実行する前に必ずデータベースの完全なバックアップを作成してください。
4) Minimize Downtime
/ダウンタイムを最小限に抑える:
ユーザーへの影響を最小限に抑えるためにオフピーク時に移行を計画し、ダウンタイムを削減する戦略を選択します (大規模な既存のテーブルを変更する代わりに新しいテーブルを作成するなど)。
5) Test Thoroughly
/徹底的にテストする:
運用環境をミラーリングする環境で移行を徹底的にテストし、期待どおりに動作することを確認します。
6) 移行後の監視
/Monitor After Migration:
移行後にデータベースとアプリケーションのパフォーマンスを注意深く監視し、発生する可能性のある問題を迅速に特定して解決します。
以前のデータベース プロジェクトで解決した困難な問題について説明してください。 (問題解決と経験)
状況: データベースは時間の経過とともに大幅に増大し、既存のクエリはデータ量の増加に合わせて最適化されていませんでした。
(アクション(5)*, 結果)
A-JIMA: あ島
アクション:
1) Analyzing Query:
ボトルネックを特定するために、最も遅いクエリの実行計画を分析しました。
2) JOIN&WHERE:
より効率的な結合と where 句の述語を使用して、次善のクエリを書き直しました。
3) Index:
データの取得を高速化するために、適切なインデックス作成戦略を導入しました。
4) Materialized views:
レポート間で頻繁に使用される集計用にマテリアライズド ビューを実装しました。
5) application level:
開発チームと協力して、アプリケーション レベルでレポート データの一部をキャッシュし、データベースの負荷を軽減しました。
結果: これらの変更を実装した後、レポートの生成時間は数分から 30 秒未満に短縮されました。これは大幅な改善であり、エンドユーザーから好評です。
NoSQLが適した用途は? (5)*
F-CHUL (Fちゅーる):
Frequent
Consistency High Unstructured Large
1) Unstructured or Semi-Structured data: 非構造化/半構造化データを扱う場合
2) Frequent data models changes: スキーマの柔軟性が求められるプロジェクト(データ モデルがよく変更される)
3) Large volumes of data: 大量のデータ処理でパフォーマンスが必要な場合
4) High Write Throughput: 高い書き込みスループットと水平スケーラビリティが必要な場合
5) アプリケーションの整合性(consistency)を重視しない場合
データベース内の機密データをどのように保護しますか? (6)*
(データセキュリティ)
USE MAC:
Updates Security Encryption
Masking Auditing Control
1) Access Control
/アクセス制御:
厳密なユーザー アクセス制御ポリシーを実装し、ロールと権限を使用してユーザーが必要な最小限の権限を確実に持つようにします。
2) Encryption
/暗号化:
強力な暗号化アルゴリズムを使用して保存中の機密データを暗号化し、暗号キーを安全に管理します。
3) Data Masking
/データ マスキング:
非運用環境にデータ マスキング手法を適用して、機密データが確実に難読化されるようにします。
4) Auditing
/監査:
監査を有効にして機密データへのアクセスと変更を追跡し、不正アクセスの検出と防止に役立ちます。
5) Network Security
/ネットワーク セキュリティ:
ファイアウォールとネットワーク セグメンテーションを使用して、不正なネットワーク アクセスからデータベースを保護します。
6) Regular Updates and Patches
/定期的なアップデートとパッチ:
既知の脆弱性から保護するために、最新のセキュリティ パッチを適用してデータベース ソフトウェアを最新の状態に保ちます。
データベースのパフォーマンスを最適化するためにどのような戦略を使用していますか? (6)*
(性能調整)
P-COMIC
Partitioning -
Caching Optimization Monitoring Indexing Configuration
1) Indexing
/インデックス作成:
適切なインデックスを作成してクエリのパフォーマンスを向上させると同時に、インデックスの維持に伴うオーバーヘッドにも注意します。
2) Query Optimization
/クエリの最適化:
SELECT ステートメント内の不要な列を回避し、結合とサブクエリを適切に使用することにより、効率的なクエリを作成します。
3) Caching
/キャッシュ:
データベースの負荷を軽減するために、さまざまなレベル (結果セットのキャッシュ、アプリケーション側のキャッシュ) でキャッシュを実装します。
4) Database Configuration
/データベース構成:
ワークロードに合わせてメモリ割り当て、接続プーリング、バッファ サイズなどのデータベース構成パラメータを調整します。
5) Partitioning and Sharding
/パーティショニングと水平分割 :
大きなテーブルをパーティションに分割するか、
Sharding/水平分割: 同じテーブルを複数のデータベースに用意し、1つのテーブルに保存していたレコードを分散する事で各データベース内に保持されるレコードの量をへらす負荷分散の方法です。
大規模なデータ セットを管理し、クエリのパフォーマンスを向上させます。
6) Monitoring and Profiling
/監視とプロファイリング:
データベースのパフォーマンスを継続的に監視し、遅いクエリをプロファイリングして、ボトルネックと改善の余地がある領域を特定します。
データベースのバックアップと災害復旧計画はどのように管理していますか? (6)
(データバックアップと災害復旧)
1) Regular Backups
/定期バックアップ:
データベースのサイズとトランザクション ボリュームに応じて、完全バックアップ、差分バックアップ、およびトランザクション ログ バックアップをキャプチャする自動バックアップ ルーチンを実装します。
2) Off-site Storage
/オフサイト ストレージ:
ローカルの災害から保護するために、バックアップをオフサイトの場所またはクラウド ストレージに保存します。
3) Test Restores
/テスト復元:
バックアップ復元を定期的にテストして、バックアップと復元プロセスの整合性を検証します。
4) High Availability Setup
/高可用性セットアップ:
データベース ミラーリング、レプリケーション、クラスタリングなどの高可用性ソリューションを構成して、ダウンタイムを最小限に抑えます。
5) Disaster Recovery Plan
/災害復旧計画:
定義された RTO (目標復旧時間) と RPO (目標復旧時点) を含む、災害時のサービス復旧手順の概要を説明する包括的な災害復旧計画を文書化します。
6) Monitoring & Alerts
/監視とアラート:
監視およびアラート システムをセットアップして、災害復旧プロセスに影響を与える可能性のあるバックアップの失敗や問題をチームに通知します。
OLTP と OLAPの違いとその使用例を説明しなさい。(7)
(データベースの種類と使用例)
1) データ
- OLTP: トランザクションの現在のデータ
- OLAP: 過去の統合データ
2) クエリの種類
- OLTP: シンプル、読み取り/書き込み
- OLAP: 複雑で読み取り
3) データベース設計
- OLTP: 正規化, 整合性の維持
- OLAP: 非正規化, さまざまなソースからデータを集約
4) 代表的な操作
- OLTP: INSERT, UPDATE, DELETE
- OLAP: SELECT, aggregate functions
5) 反応時間
- OLTP: ミリ秒
- OLAP: 数秒から数分
6) ユーザー数
- OLTP: 数千から数百万
- OLAP: 数百から数千
7) 用途
- OLTP: ビジネストランザクション: オンライン バンキング、在庫管理、EC、即時のフィードバックを必要とするシステム
- OLAP: データ ウェアハウジングと分析: データ マイニング、ビジネス インテリジェンス、複雑な分析計算
ETL について。
- プロセス(3)
- 留意点の例(3)
説明しなさい
(ETL プロセスとツール)
ETL (Extract, Transform, Load)
[プロセス]
1) 複数の異種ソースからデータを抽出
2) 運用ニーズに合わせてデータを変換することが含まれます。これには、データのクレンジング、集計、分析用の準備
3) 最後にデータ ウェアハウスにロードされます
[留意点の例]
1) スケジュールに従って実行してデータを処理
2) データの品質と一貫性を確保
3) パフォーマンスの最適化
データベースのパフォーマンスを監視し、ボトルネックを特定するにはどうすればよいでしょうか? (6)*
(パフォーマンス監視)
HAMMOB : ハンモッブ(ハンモックとモブの造語)
1:H) Regular Health Checks
/定期的なヘルス チェック:
断片化、データベース サイズ、および過去のパフォーマンス傾向を定期的にチェックすることは、プロアクティブなパフォーマンス チューニングに役立ちます。
2:A) Query Analysis
/クエリ分析:
データベース エンジンがクエリを処理する方法を理解し、非効率な操作を特定するために、クエリ実行プランを使用して実行速度の遅いクエリを分析します。(EXPLAIN PLAN)
3:M) Monitoring Tools
/監視ツールの使用:
私は、データベースの健全性とパフォーマンスに関する洞察を提供する、Oracle Enterprise Manager、SQL Server Management Studio、MySQL Workbench などのツールを使用しています。
4:M) Performance Metrics
/パフォーマンス メトリクス:
クエリの実行時間、CPU とメモリの使用量、I/O スループット、接続数などの主要なパフォーマンス メトリクスを定期的に監視しています。
5:O) Index Optimization
/インデックスの最適化:
インデックス戦略を見直し、既存のインデックスを調整します。これには、クエリのパフォーマンスを最適化するために、新しいインデックスを追加したり、冗長なインデックスを削除したりすることが含まれる場合があります。
6:B) Resource Bottlenecks
/リソースのボトルネック:
リソースの使用率を監視することで、メモリ不足やディスク I/O の問題など、パフォーマンスの問題を引き起こしているハードウェア制約があるかどうかを特定できることがよくあります。
データベース レプリケーションの;
- 目的(2)*
- 実装(3)*
について説明しなさい
(データベースのレプリケーション)
LB-MSP
[目的]
1) 負荷分散/Load balancing
2) バックアップ,災害復旧/Backup
[実装]
1) マスター-スレーブ レプリケーション
/Master-Slave:
この方法は、すべての書き込み操作がマスターに送信され、読み取りがスレーブ全体に分散されるレポート目的で使用しました。
2) ピアツーピア レプリケーション
/Peer-to-Peer:
これは分散システム セットアップで使用され、複数のノード間でデータをリアルタイムで更新できるようにします。
3) スナップショット レプリケーション
/Snapshot Replication:
データの変更が頻繁ではなく、特定の間隔で 1 回の操作でデータベース全体をレプリケートできる場合にこれを適用しました。
データベース・パーティショニングの次の点について説明しなさい;
- パーティショニングとは (2)*
- 利点 (3)*
- 戦略 (3)*
(データベースのパーティショニング)
ID, MAP, SAM
[パーティショニングとは] IL
- I: 論理的な整合性を維持しながら(Logical Integrity)
- D: 管理しやすい小さい部分に分割する (Dividing)
[利点] MAP
次の点が向上する;
1) Manageability / 管理性
2) Availability / 可用性
3) Performance / パフォーマンス
[戦略] SAM
1) Size: データベースのサイズ: 大規模なデータベースでは、クエリで小さなテーブルをスキャンできるようになり、I/O 負荷の軽減に役立つため、パーティショニングのメリットが得られます。
2) Access Patterns: データ アクセス パターン: データへのアクセス方法を分析することで、パーティション キーを決定することができました。たとえば、クエリが日付によって頻繁にフィルタされる場合は、日付ベースのパーティショニングが有益です。
3) Maintenance:メンテナンス操作: パーティショニングは、テーブル全体ではなく個々のパーティションに対して操作することで、バックアップ、アーカイブ、パージなどのメンテナンス タスクを簡素化できます。