3

私は、それぞれが0から10,000の範囲で、浮動小数点数として格納されている数値のペア(A、B)を保持する巨大なデータベースを持っています。

例えば、

(1, 9984.4), (2143.44, 124.243), (0.55, 0), ...

これらのペアを格納するPostgreSQLテーブルが非常に大きくなったため、継承するサブテーブルに分割することにしました。それぞれが1000x1000の範囲を格納する100個のそのようなテーブルを作成するつもりです。

問題は、これらの番号が近くの番号の大きな塊になる傾向があることです。これは、将来、一部のテーブルがほぼ空になり、一部のテーブルがデータベースの非常に大きな部分を保持することを意味します。残念ながら、将来のペアの分布はまだ不明です。

テーブルを自動的に再パーティション化する方法を探しています。つまり、特定のサブテーブルが特定の数を超えるペアを保持している場合、それは自動的に4つのサブサブテーブルに分割されます。

私の質問は次のとおりです。

  • PostgreSQL 8.3で再帰的なパーティショニングと継承は可能ですか?インデックスとクエリプランはそれを理解しますか?
  • サブテーブルが大きくなりすぎたら、サブテーブルを分割するための最良の方法は何ですか?これはライブデータベースではないため、毎週数時間のダウンタイムは完全に許容できることを指摘しておく必要があります。
  • 更新:継承するテーブルを4つのテーブルに分割して、元のテーブルを置き換える可能性があります(つまり、マスターテーブルから直接継承します)。複数のレベルの継承は避けますが、テーブルが1つのテーブルから直接継承する場合は数千になります。このアプローチの長所と短所は何ですか?

前もって感謝します、

アダム

4

1 に答える 1

2

まず第一に、テーブルがすでに大きい場合、分布は将来の見積もりに対して信頼できないと確信していますか?今日行われたヒストグラムは役に立たないでしょうか?

再帰的な継承が可能であっても、メンテナンスとプランナーの両方でモデルに不必要な複雑さが加わると思います。

100個のテーブルにパーティションを作成すると、パーティションが生成され、ルール/トリガーが自動的に挿入/更新されると思います。

最も簡単な方法は、1つのパーティションから一時テーブルにデータをコピーしてドロップし、その場所に4つのパーティションを作成して、データをコピーして戻すことです。この操作は、再帰的なパーティショニングよりも難しいとは思いません。

また、PostgreSQLメーリングリストで人々に質問することもできます。彼らは、元の開発者を含め、あなたが得ることができる最高の専門家です。

于 2010-03-14T15:11:30.723 に答える