私は、データ ウェアハウジングの分野で高度に非正規化されたデータベースを扱った経験が数年あり (非正規化が適用されるシナリオについて知りたい場合は、それを読んでください)、OLTP を実行する従来のアプリケーションを数年間扱ってきました。
会社が単一の非正規化テーブルに切り替えたのは、読み取りと書き込みが高速であるためだとおっしゃいました。ほとんどの場合、書き込みは絶対に高速ではありません. 地域/従業員テーブルを非正規化した場合を想像してください。リージョン レコードは、このテーブルで何千回も複製されます。名前など、単一のリージョンを変更する必要がある場合、正規化されたデータベースでは 1 つのレコードのみを更新する必要がある場合、その更新を何千ものレコードに適用することになります。これには多くの深刻なパフォーマンス上の問題があります。1 つは、どのタイプのトランザクションでも、リージョンを更新すると、何千もの従業員レコードが何らかの方法でロックされる可能性があります (トランザクションのタイプによって異なります)。スナップショット トランザクションは、はるかに大量のメモリを消費します。リージョン列のインデックスは、必要以上に大きくなります。テーブルごとにクラスター化されたインデックスが 1 つしかないため、インデックスの最適化戦略が制限されます。正規化されたデータベースでは、
理解しておくべき最も重要なことは、1 つのユース ケース (単一のレコードを選択するなど) を評価してから、設計 1、2、または 3 が最適であると結論付けることはできないということです。このようなテストは、一般的な使用シナリオを表すものではありません。単一のレコードを選択している場合、ほとんどの場合、単一のレコードを選択して編集する OLTP シナリオを扱っています。このようなシナリオで、最も一般的な CRUD 操作もテストに含めないと、テストが非常に非現実的になる場合:
- シングルインサート
- 単一の更新
- 単一の削除
- 数千の同時操作
また、何千ものこれらの操作が同時に発生するという事実を考慮する必要があります。したがって、デッドロックとロックの待機により、非正規化されたデータベースのパフォーマンスが非常に低下します。これは、一般的な使用シナリオを考慮すると、大きな違いになります。
また、「単一」とは、非正規化されたレコード全体を意味するのではなく、エンティティを表す部分のみを意味します。たとえば、地域を更新または削除するが、レコードの従業員部分をそのままにしておくと、コードがより複雑になり、パフォーマンスが低下します。
OLTP の代わりに評価できるもう 1 つのシナリオは、データ ウェアハウスのサブジェクト領域である OLAP です。キューブを使用する OLAP データベース エンジンがありますが、OLTP エンジンを使用してデータ ウェアハウスを実装できますが、非正規化された設計を使用します。ただし、通常、すべてを単一のテーブルに非正規化することはありません。通常、非正規化されたファクト テーブルがあり、それに結合された他のテーブルも非正規化されており、ファクト テーブルから他のデータに取得するために複数の結合が発生するシナリオが発生することはありません。 このタイプの非正規化設計の使用シナリオは、単一のレコードになることはほとんどありません。 通常、非常に多数のレコード (数百万のオーダー) を集約しており、結合を最小限に抑え、レコード サイズを最小限に抑える (ページあたりのレコードを最大化する) という 2 つの方法で構造を非正規化しています。したがって、「ファクト」テーブルから最大のスループットが得られます。それ以上のことがたくさんあります。データ ウェアハウジングの分野は広大であり、データを非正規化する方法を決定する際に評価すべきことがたくさんあります。良いことは、それが科学に要約されていることです. Kimball の「Date Warehousing Toolkit」は素晴らしい本ですが、概念的な側面からは少し離れすぎており、実装の詳細については説明しません。
重要なのは、1 つの設計が最適であると宣言することはなく、多くのハイブリッド設計があり、各設計が調整された使用シナリオがあることを認識する必要があります。
私があなたなら、1 つの使用シナリオの調査のみをカバーするように私の提案を明確にし、他のデータベース設計がより優れたパフォーマンスを発揮する可能性のある他の使用シナリオがあることを認めます。しかし、私の意見では、単一のレコード選択を行うことは、OLTP についてリストした他の一般的な操作を含む必要がある完全な使用シナリオをカバーしていません。
または、データ ウェアハウジングの使用シナリオを実行することもできますが、ここでの問題は、公正な比較を行うために、優れたデータ ウェアハウジングの設計スキルが本当に必要になることです。集計レポートの最も適切な使用シナリオでさえ、悪い結果をもたらす方法でデータベースを非正規化することは非常に簡単です。