Verticaは、WOS(メモリ)またはROS(ディスク)のどちらかを選択してデータを投入できる、ハイブリッド型データ格納方式となっています。本記事では、WOSとROSそれぞれに格納されたデータが、内部的にどのように移動しているか詳しくご紹介します。

※WOS/ROSの内容と、WOS/ROSへのデータロードについては、以下の記事をご参照ください。

  • データロードの基本
  •  http://vertica-tech.ashisuto.co.jp/dataload_overview/

  • Verticaのデータ格納方法(WOSとROS)
  •  http://vertica-tech.ashisuto.co.jp/vertica-hybrid-data-store/

    Tuple Moverとは

    Touple Moverは、後述のMoveoutおよびMergeoutを実行する機能です。
    MoveoutおよびMergeout共に、一定間隔で内部的に実行されているため、通常は意識する必要はありません。

    Moveoutとは

    WOSに格納されたデータは、未ソート、非圧縮、行指向の形式で保持されているため、ディスク上のROSに格納する際に、列指向の形式に変換処理を行う必要があります。ソートと圧縮は、プロジェクションで指定されているルールに基づいて処理されます。
    このように、WOSからROSへ非同期でデータを転送する処理のことをMoveoutと呼び、デフォルトでは5分置きに実行されます。

    Moveoutの動作フロー

    1. WOSへ新しくデータが投入された場合、下記図の状態になります。

    moveout1
    2. Touple Moverが5分間隔で、WOS上の行形式データを列形式データへ変換し、ソートおよび圧縮を行います。

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

    moveout3

    Mergeoutとは

    MoveoutされたデータやROSへ直接投入したデータは、既存データとは別のROSコンテナとして断片化した状態でディスクに格納されます。
    このROSコンテナの断片化を解消する処理のことをMergeoutと呼びます。デフォルトでは10分置きにチェックされ、断片化解消が必要と判断されるとMergeoutが自動で実行されます。
    また、9.2からは新しくDML Commitのタイミングでもチェックが実行されるようになっています。

    ※Mergeoutの動作タイミング詳細については、以下の記事をご参照ください。

     
  • バージョンごとのMergeout動作
  •  http://vertica-tech.ashisuto.co.jp/mergeout_by_version/

    Mergeoutの動作フロー

    1. Moveout後やROSへ直接データを投入した後は、下記図の状態になります。

    mergeout1
    2. Mergeoutが実行されると、Touple MoverがROS上の断片化したデータを統合します。

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

    mergeout3

    検証バージョンについて

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

    更新履歴

    2019/06/21 9.2から追加されたMergeout動作タイミングを追記、検証バージョンを修正
    2019/02/28 Mergeoutの実行タイミングを修正
    2015/09/11 本記事を公開