これは私のインタビューの質問の1つでした。何百万もの従業員レコードを保持する巨大なデータベースがあります。名、姓、年齢、場所などのフィールドに基づいて効率的にクエリを実行でき、結果をすばやく取得できるはずです。データベースをどのように設計しますか。索引などをもとに回答しましたが、納得のいく面接ではありませんでした。この設計が実際にどのように行われるかについて何か提案はありますか?
3 に答える
質問の文脈についてはよくわかりませんが、私が理解している限りでは、既存のデータベース/クエリの「純粋な」最適化ではなく、データ モデリングについて尋ねられました。
私は次のアプローチで行きます。企業は、新しいデータを入力するために最適化された「運用データベース」または OLTP (高度に正規化されたインデックスの最小セット) と、正規化の観点から多くの冗長性を持つ「意思決定支援データベース」 (データ ウェアハウス、OLAP システム) を持つことができます。さまざまな基準で非常に高速に検索できます。OLTP システムからデータ ウェアハウスをモデル化することは非常に大きなトピックであり、ビジネス ニーズを深く理解する必要があります。
従業員の検索に関する質問に答えるために、単純なスター スキーマ (各検索条件がディメンション テーブルで表される) を構築することを提案します。次に、インデックス作成、パーティション分割、具体化されたビューなどの適切な手法をモデルの上に追加できます。
おそらく、インタビュアーは 1 つのキーワードを求めていました。normalisation
世界中のすべてのインデックスが正規化されていないデータベースに役立つわけではありません。おそらく、問題の「従業員レコード」には名前、住所が含まれていました...すべてのレコードに含まれており、レコードはプロジェクト、休暇、病欠、等
手がかりは、「何百万もの」「従業員」の記録にあると私は信じています。最大の政府部門でさえ「何百万人」もの従業員を抱えていないため、データベースは正規化されていません。
これらの要件は、従来の SQL データベースではなく、キーと値のストアを検討することを示唆しています。
キー値ストアを使用すると、比較的構造化されていないクエリを実行でき (つまり、事前にスキーマを定義する必要がありません)、非常に高速な読み取り用に設計されています。
例:
レディス
カサンドラ
ソファー
モンゴDB