0

非常によく似たプロパティを持つエンティティを格納する最善の方法を決定しようとしています。主な違いは、各エンティティが他のエンティティを参照することです。データベースを次のようにセットアップするつもりでした:

entity_a (1-1,000 Records) [Data rarely changes]
id|created|updated|entity_b_id|category_id|name|entity_b_id|entity_c_id|entity_d_id

entity_b (10,000-1,000,000 Records) [Data changes constantly]
id|created|updated|entity_b_id|category_id|name|entity_c_id|entity_e_id|entity_f_id

entity_c (10,000-10,000,000 Records) [Data changes constantly]
id|created|updated|entity_b_id|category_id|name|entity_a_id|entity_f_id

entity_d (0-1,000 Records) [Data rarely changes]
id|created|updated|entity_b_id|category_id|name

entity_e (1-100 Records) [Data rarely changes]
id|created|updated|entity_b_id|category_id|name|entity_a_id|entity_b_id

entity_f (0-50,000 Records) [Data frequently changes]
id|created|updated|entity_b_id|category_id|name|entity_c

entity_g (10-100 Records) [Data rarely changes]
id|created|updated|entity_b_id|category_id|name

entity_h (10-1,000 Records) [Data rarely changes]
id|created|updated|entity_b_id|category_id|name|entity_e_id

entity_i (1-10 Records) [Data rarely changes]
id|created|updated|entity_b_id|category_id|name

ただし、1 つの大きなテーブルを次のように管理する方が簡単であることが示唆されています。

ent (20,000-11,000,000 Records)
id|created|updated|ent_id(b)|category_id|name|ent_id(a)|ent_id(b)|ent_id(c)|ent_id(d)|ent_id(e)|ent_id(f)

この 2 番目の方法の懸念事項は、ID が int(11) になり、主に 0 として設定されるこれらの ID の 6 つの列があるため、テーブル サイズです。

しかし、私の主な関心事は、レコードが一度に多くのユーザーによって非常に頻繁にアクセスされるため、アクセス速度です。私は CodeIgniter を使用しており、そのキャッシング機能を使用してデータベースの負荷をできるだけ多くしたいと考えていますが、データの一部が秒単位で変化するため、これは制限されます。

どんな助けでも大歓迎です。

4

1 に答える 1

1

非常に多くのことに依存しているため、一方と他方の実際のパフォーマンスを予測するのは難しいと思います.

いくつかの考慮事項:

エンティティ間の違いはどの程度重要ですか? クエリごとに 1 つのタイプのエンティティのみを選択することが多い場合は、正規化されたソリューションの方が高速である可能性があります。

共有列以外のものを選択するクエリがある場合はentity_a with entity_c IN(something)、entity_c 列にインデックスが必要です。

entity_c は非常に大きいです。頻繁に更新され、クエリがほとんど行われない場合、非正規化バージョンを使用する場合、懸念の原因になります。

多くの JOIN を実行している場合は、正規化された形式の方が高速であると確信しています。

私のアドバイスは次のとおりです。正規化された形式を使用してください。パフォーマンスの問題が発生している場合は、このソリューションを参照してください。

ハイブリッド ソリューションを選択することもできます。b と c は頻繁に変更され、他のものは変更されないため、そのようなテーブルを 2 つ作成します。または、b と c に独自のテーブルを与えますが、他のテーブルは 1 つに保ちます。

于 2013-08-23T09:01:57.523 に答える