はじめに
以下はVerticaのデータ格納に関するアーキテクチャをまとめた図です。この図を踏まえて、Verticaではどのようにしてデータをディスクに格納しているのかご紹介いたします。図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=ディスク上
・・・ソート済み、圧縮済み、列指向
・・・未ソート、非圧縮、行指向
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/