セグメンテーションとは
複数ノード構成の場合、Verticaでは分散処理のために、サイズの大きなプロジェクションのデータを各ノードに分散して保持します。これをセグメンテーションといいます。これによりクエリ実行時のシェアードナッシングによる分散処理が実現され、パフォーマンスが向上します。例)3ノード構成の場合のデータ分散イメージ

レプリケーションとは
複数ノード構成で、セグメンテーション化して分散するほどではない小さなプロジェクション(例 ディメンジョン表)の場合は、セグメンテーション化せずプロジェクションの完全コピーを各ノードに配置します。Verticaではこれをレプリケーションといいます。

一般的には、ファクト表のようなサイズの大きなプロジェクションはセグメンテーション化し、ディメンジョン表のような小さなプロジェクションはレプリケーション化します。
これにより、ファクト表とディメンジョン表の結合処理時に各ノードのローカル内で結合処理が完結するようになります。ディメンジョン表もセグメンテーション化した場合と比べると、結合時のネットワークオペレーションが最小化されるため、より高速な処理が可能になります。
なお、プロジェクションをレプリケーション化するか、セグメンテーション化するかは、Database Designerでプロジェクションを作成する際にVerticaが自動で判断するため、通常はユーザ自身で手動で設定する必要はありません。
セグメンテーション化されているか確認する方法
プロジェクションがセグメンテーション化されているか確認する場合は、projectionsテーブルを参照します。例)LINEORDER_seg_b0プロジェクションを確認する場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
dbadmin=> SELECT * FROM projections WHERE projection_name='LINEORDER_seg_b0'; -[ RECORD 1 ]------------+-------------------------------------------------- projection_schema_id | 45035996273736160 projection_schema | ssbm projection_id | 49539595901104158 projection_name | LINEORDER_seg_b0 projection_basename | LINEORDER_seg owner_id | 45035996273704962 owner_name | dbadmin anchor_table_id | 45035996273736164 anchor_table_name | LINEORDER node_id | 0 node_name | is_prejoin | f created_epoch | 187 create_type | DESIGNER verified_fault_tolerance | 1 is_up_to_date | t has_statistics | t is_segmented | t segment_expression | hash(LINEORDER.LO_ORDERKEY) segment_range | implicit range: v_test_node0003[33.3%] v_test_node0001[33.3%] v_test_node0002[33.3%] is_super_projection | t has_expressions | f is_aggregate_projection | f aggregate_type | |
セグメンテーションの情報は以下の列で確認できます。
[projections]
列名 | 内容 |
---|---|
is_segmented | セグメンテーション化されている場合は「t」、レプリケーション化されている場合は「f」 |
segment_expression | セグメント方式※例の場合はLO_ORDERKEYをキーにハッシュ分散 |
segment_range | セグメント対象のノード及び、ノードごとのデータの分散状況(%) |