SO、外部ブログ投稿、マニュアルに関するいくつかの質問をすでに読んだことがある
- SO:Pgのパーティションテーブルへの外部キー制約
- dba.SE:PgのパーティションテーブルへのFKのさまざまな処理方法
- マニュアル:継承
- マニュアル:パーティショニング
- 手動:制約トリガー
- ブログ:継承によるPostgresモデリング
それでも、自分のケースを考慮してパーティション分割を行うべきかどうか疑問に思っています。
ケース-簡略化
顧客データの保存。下記の表の名前はすべて、わかりやすくするために作成されています。
顧客によって識別可能で非物理的な存在であるオブジェクト、およびオンデマンドで顧客にオブジェクトを送り返す必要がある場合にオブジェクトが実際に格納される物理オブジェクト、または他の方法でオブジェクトを処理する。それらは多対多の関係でマッピングされます。
objects_nonphysical
、objects_physical
、objects_mapping_table
。2番目の多対多の関係は、これらの非物理オブジェクトとそのメトリックの間です。いくつかのメトリックにバインドされているオブジェクトがあります。
metrics
、metrics_objects_nonphysical
非物理オブジェクトと物理オブジェクトの両方に、子と親の関係である階層テーブルがあります。
objects_nonphysical_hierarchy
、objects_physical_hierarchy
各顧客のニーズと要件に応じて、物理オブジェクトに関するデータを提供することも、ゼロから作成する必要がある場合もあります。基本的に、私がする必要があるのは:
高速のための社内体制の維持
INSERT
およびSELECT
マッピングが場所を取るために起こっているのはここであるため、ステートメントを。外部顧客が非物理オブジェクトを表示および操作できるようにシステムを維持します -データの高速検索。ステートメントの効率に対する強いニーズ
SELECT
-このデータは、多くの顧客がいつでも検索できるようになっています。
私の配慮
データにアクセスし、データを表示して操作する顧客がいる可能性がありますが、それは、データを取得したり、データを処理している請負業者である必要はありません。
これにより、システムにテーブルパーティション分割を導入し、どのパーティションデータが該当するか(請負業者のパーティション分割)を常に把握していることを考慮し、次に、顧客のパーティション分割が必要な外部顧客向けのメインテナンスシステムに進みました。(これは、自動化ツールと一連のルールを使用して顧客の方法でデータを書き換えるのを遅らせるため、顧客ごとにテーブルごとに1つのパーティションのみをスキャンします。
データ量
特に新しい顧客のオブジェクトとメトリックをインポートする場合、私のデータは常に増加します。システムに到着する新しいデータのペースは、長期的に見て現時点では予測できません。誰が次の顧客になるかがわからない場合、実際に測定する方法はありません。現在、2つの顧客があり、各テーブルのすべての顧客に対して100万行が多かれ少なかれあります。しかし、将来的には、新規顧客の数が1,000万人になると予測しています行程度になるています。
ご質問
これらの質問はすべて互いに関連しています。
- ここでパーティショニングを本当に考慮すべきですか、それとも過剰ですか?私は常に正確に1つをスキャンしているので、それは役に立つと考えていますパーティションを。
- パーティショニングが
FK
最適な方法である場合、自分のニーズを考慮して最も効果的に制約を適用するにはどうすればよいですか?私は行くべきconstraint triggers
ですか、それとも内部システムのアプリケーション層に保つべきですか、それとも他の方法でしょうか? - パーティショニングがうまくいかない場合、何に飛び込むべきですか?
十分なデータが提供されていない場合は、下のコメントでお知らせください。