クラスターには 5 種類のテーブルがあります。 各型は、ノードに異なる方法でデータを格納し、異なる目的で機能します。
分散テーブル
最もよく使用される最初の型が分散テーブルです。 SQL ステートメントに対する通常のテーブルのように見えますが、ワーカー ノード間で水平方向にパーティション分割されます。 このパーティション分割は、テーブルの行がシャードと呼ばれるフラグメント テーブル内の異なるノードに格納されることを意味します。
エラスティック クラスターでは、SQL だけでなく、クラスター全体で DDL (データ定義言語) ステートメントも実行されます。 分散テーブルのスキーマを変更すると、変更が連鎖して、ワーカー間のすべてのテーブルのシャードが更新されます。 このような操作は、ポート 5432 経由の接続を介して実行する必要があります。
分散列
エラスティック クラスターでは、アルゴリズムシャーディングを使用して、シャードに行を割り当てます。 割り当ては、ディストリビューション列と呼ばれるテーブル列の値に基づいて決定論的に行われます。 クラスター管理者は、テーブルを配布するときに、この列を指定する必要があります。 パフォーマンスおよび機能には、適切な選択を行うことが重要です。
参照テーブル
参照テーブルは、コンテンツ全体が 1 つのシャードに存在する分散テーブルの一種です。 クラスターは、すべてのワーカーでシャードを複製します。 いずれかのワーカーに対するクエリは、参照情報にローカルでアクセスでき、別のノードから行を要求するネットワーク オーバーヘッドは生じません。 行ごとに個別のシャードを区別する必要がないため、参照テーブルにはディストリビューション列はありません。
通常、参照テーブルは小さく、任意のワーカー ノードで実行されているクエリに関連するデータを格納します。 たとえば、注文ステータスや製品カテゴリなどの列挙値があります。
ローカル テーブル
エラスティック クラスターを使用する場合、各ノードは通常の PostgreSQL データベースです。 通常のテーブルを作成し、それらをシャード化しない選択もできます。
ローカル テーブルの適切な候補は、結合クエリに参加しない小さな管理テーブルです。 これにはたとえば、アプリケーションのサインインと認証に使用される users テーブルがあります。 この種類のテーブルは、ポート 7432 または 8432 を使用してエラスティック クラスター間で接続の負荷分散を計画していない場合にのみ役立ちます。
ローカル管理テーブル
ローカル テーブルと参照テーブルの間に外部キー参照が存在する場合、エラスティック クラスターによってローカル テーブルがメタデータに自動的に追加される場合があります。 また、通常のローカル テーブルに対して citus_add_local_table_to_metadata 関数を実行することで、ローカルで管理されるテーブルを手動で作成できます。 メタデータに存在するテーブルは管理テーブルと見なされ、任意のノードからクエリを実行できます。 Citus は、ローカル管理テーブルからデータを取得するために、適切なノードへルーティングします。 このようなテーブルは、 citus_tables ビューにローカルとして表示されます。
スキーマ テーブル
スキーマ ベースのシャーディングを使用すると、分散スキーマが個々のコロケーション グループに自動的に関連付けられます。 これらのスキーマでテーブルを作成すると、シャード キーを使用せずに、自動的にテーブルが併置された分散テーブルに変換されます。 これらのテーブルはスキーマ テーブルであり、 citus_tables ビューにスキーマとして表示されます。