Verticaは、WOS(メモリ)またはROS(ディスク)のどちらかを選択してデータを投入できる、ハイブリッド型データ格納方式となっています。本記事では、WOSとROSそれぞれに格納されたデータが、内部的にどのように移動しているか詳しくご紹介します。
※WOS/ROSの内容と、WOS/ROSへのデータロードについては、以下の記事をご参照ください。
Tuple Moverとは
Touple Moverは、後述のMoveoutおよびMergeoutを実行する機能です。MoveoutおよびMergeout共に、一定間隔で内部的に実行されているため、通常は意識する必要はありません。
Moveoutとは
WOSに格納されたデータは、未ソート、非圧縮、行指向の形式で保持されているため、ディスク上のROSに格納する際に、列指向の形式に変換処理を行う必要があります。ソートと圧縮は、プロジェクションで指定されているルールに基づいて処理されます。このように、WOSからROSへ非同期でデータを転送する処理のことをMoveoutと呼び、デフォルトでは5分置きに実行されます。
Moveoutの動作フロー
1. WOSへ新しくデータが投入された場合、下記図の状態になります。
2. Touple Moverが5分間隔で、WOS上の行形式データを列形式データへ変換し、ソートおよび圧縮を行います。

3. 変換したデータをROSへ移動します。

Mergeoutとは
MoveoutされたデータやROSへ直接投入したデータは、既存データとは別のROSコンテナとして断片化した状態でディスクに格納されます。このROSコンテナの断片化を解消する処理のことをMergeoutと呼びます。デフォルトでは10分置きにチェックされ、断片化解消が必要と判断されるとMergeoutが自動で実行されます。
また、9.2からは新しくDML Commitのタイミングでもチェックが実行されるようになっています。
※Mergeoutの動作タイミング詳細については、以下の記事をご参照ください。
Mergeoutの動作フロー
1. Moveout後やROSへ直接データを投入した後は、下記図の状態になります。
2. Mergeoutが実行されると、Touple MoverがROS上の断片化したデータを統合します。

3. 統合したデータをROSへ移動し、古いROSコンテナ(ファイル)を削除します。

検証バージョンについて
この記事の内容はVertica 9.2で確認しています。更新履歴
2019/06/21 9.2から追加されたMergeout動作タイミングを追記、検証バージョンを修正2019/02/28 Mergeoutの実行タイミングを修正
2015/09/11 本記事を公開
- 投稿タグ
- ROS, WOS, Tuple Mover, Moveout, Mergeout