セグメンテーションとは

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

例)3ノード構成の場合のデータ分散イメージ

セグメンテーションの概要

レプリケーションとは

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

一般的には、ファクト表のようなサイズの大きなプロジェクションはセグメンテーション化し、ディメンジョン表のような小さなプロジェクションはレプリケーション化します。
これにより、ファクト表とディメンジョン表の結合処理時に各ノードのローカル内で結合処理が完結するようになります。ディメンジョン表もセグメンテーション化した場合と比べると、結合時のネットワークオペレーションが最小化されるため、より高速な処理が可能になります。

なお、プロジェクションをレプリケーション化するか、セグメンテーション化するかは、Database Designerでプロジェクションを作成する際にVerticaが自動で判断するため、通常はユーザ自身で手動で設定する必要はありません。

セグメンテーション化されているか確認する方法

プロジェクションがセグメンテーション化されているか確認する場合は、projectionsテーブルを参照します。

例)LINEORDER_seg_b0プロジェクションを確認する場合

セグメンテーションの情報は以下の列で確認できます。
[projections]

列名内容
is_segmentedセグメンテーション化されている場合は「t」、レプリケーション化されている場合は「f」
segment_expressionセグメント方式※例の場合はLO_ORDERKEYをキーにハッシュ分散
segment_rangeセグメント対象のノード及び、ノードごとのデータの分散状況(%)

検証バージョンについて

この記事の内容はVertica 7.1で確認しています。