はじめに

以下はVerticaのデータ格納に関するアーキテクチャをまとめた図です。この図を踏まえて、Verticaではどのようにしてデータをディスクに格納しているのかご紹介いたします。


001_hybrid-data-store
図1:ハイブリッドデータ格納



2つのデータ格納領域

Verticaにはデータを格納する領域として、WOSとROSと呼ばれる2つの領域があります。


WOS

Verticaは、データロードを効率化するためにロードしたデータを一旦メモリ上に保持します。このデータを保持するメモリ上の領域のことをWOS(Write Optimized Row-Store)と言います。WOSにデータを格納する際には、未ソート、非圧縮、行指向の状態です。


ROS

WOSに保持されたデータは定期的(デフォルトでは5分置き)にディスク上に転送されます。このディスク上の領域のことをROS(Read Optimized Column-Store)と言います。ROSにデータを格納する際には、ソート済み、圧縮済み、列指向の状態です。

 WOS=メモリ上
  ・・・未ソート、非圧縮、行指向

 ROS=ディスク上
  ・・・ソート済み、圧縮済み、列指向

データ転送と変換の仕組み

WOSからROSに非同期でデータを転送する処理のことをMoveoutと呼びます。

メモリ上のWOSに格納されたデータは、未ソート、非圧縮、行指向の形式で保持されているため、ディスク上のROSに格納する際に、列指向の形式に変換処理を行う必要があります。Moveoutが行われるタイミングで、TUPLE MOVERという機能によって変換処理が行われます。プロジェクションで指定されているソートや圧縮ルールに基づいて処理されます。



ROSの断片化解消

Moveoutされたデータは、既存データとは別のROSコンテナとして断片化した状態でディスクに格納されます。このため、定期的にROSコンテナを統合するための内部処理が実行されます。この内部処理のことをMergeoutと言い、デフォルトでは10分置きに実行されます。



WOS、ROSへのロードの使い分け

WOS、ROSへのロードは状況によって使い分けることができます。
使い分け方については以下の記事をご確認ください。

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