1

Postgres 本番データベースに大きなテーブルがあり、外部テーブルと継承を使用して「シャーディング」を開始したいと考えています。

望ましいアーキテクチャは、スキーマを定義する 1 つの (空の) テーブルと、空の「親」テーブルから継承するいくつかの外部テーブルを持つことです。(Postgres 9.5 で可能)

このよく書かれた記事https://www.depesz.com/2015/04/02/waiting-for-9-5-allow-foreign-tables-to-participate-in-inheritance/を見つけました。最初からやりなさい。私の質問は、必要なデータの移行を最小限に抑える方法です。

現在、この 100 GB 以上のテーブルがあり、これが最初の「シャード」になります。そして将来的には、新しい「シャード」を定期的に追加する予定です。ある時点で、古いシャードは別のテーブルスペースに移動されます (重要性が低くなるため、安価なハードウェア上で)。

私の質問: 既存のテーブルを "ALTER" して外部テーブルにする方法はありますか?

4

1 に答える 1

0

これを行うためにalter tableを使用する方法はありません。

基本的に手動で行う必要があります。これは、テーブルのパーティション化を行うことと (実際には) 違いはありません。パーティションを作成し、データをロードします。パーティションへの読み取りと書き込みを指示します。

あなたの場合、シャーディングを行うという点で、これをより簡単にするために私が検討するツールがいくつかあります。まず、テーブルが最初に好きなように分割されていることを確認した場合は、Bucardo などの論理レプリケーション ソリューションを使用して、すべてを移動している間に書き込みを複製できます。

データベースの負荷を犠牲にして時間を節約できる他のアプローチ (並列化されたリーダーとライター) がいくつかありますが、それらはニッチなツールです。

標準の PostgreSQL のシャード管理のためのネイティブ ソリューションはありません (この点に関して、シャード基準の変更をどれだけうまく管理できるかについて、私は Postgres-XL について十分に知りません)。しかし、少しの作業と知識があれば、ほとんど何でも可能です。

于 2016-07-14T17:28:53.447 に答える