はじめに

Verticaはデータの集計・分析処理に特化したアーキテクチャを持つデータベースです。
そのため、汎用的な行指向のリレーショナルデータベースとはデータの格納方式が異なります。
そこで本記事では、Verticaのデータ格納方式の特徴について解説します。

※Verticaは、利用者が詳細なアーキテクチャを理解しなくても高い性能を発揮します。
しかし、アーキテクチャを詳しく理解することで、さらなる性能を引き出したり、トラブルを事前に回避することにもつながります。
製品をより使いこなしていただくために、本記事の内容をお役立てください。

Verticaのデータ格納領域

Verticaにデータを挿入すると、ROS(Read Optimized Store)という名称のディスク領域にデータを格納します。
ROSは読み取りに特化したストレージ構造を持ち、大量データの集計処理等に対し非常に優れた性能を発揮します。

オブジェクトの階層としては、プロジェクションがこのROSの上位階層にあたります。

ROSの特徴

ROSは、読み取り性能を向上させるため、以下の特徴を持ちます。

・ソート/圧縮済み
列指向データ格納

列指向データ格納のイメージ

Verticaの特徴的な要素である列指向のデータ格納について、行指向のデータ格納方式と比較しながら説明します。

ROSでは、列指向でデータを格納することにより、集計処理の際に不要な列を読み込みません。
以下にイメージ図を用いて、行指向のデータ格納との違いを簡単にご案内します。

 
行指向DBのデータ格納イメージ
一般的な行指向DBのデータファイルは、行単位でデータを格納します。


 
Vertica(ROS)のデータ格納イメージ
VerticaのROSは、列単位でデータを格納します。
以下の青枠で囲まれているブロックの集合体を、「ROSコンテナ」と呼びます。


 

削除データを管理するROS

Verticaでは、データをDELETEしCOMMITしても、すぐにデータの物理削除は行われません。
DELETEのCOMMIT時点では、デリートベクター(※1)と呼ばれる特殊なデータ(DVROS)を作成することにより、データを論理削除状態とします。
論理削除データは後からまとめて物理削除を行います。

通常、Verticaが内部的にこれらの処理を行うため、基本的にユーザー側で普段から存在を意識する必要はありません。
ただし、同タイミングに大量にデリートベクターが作成されると、データ参照時のオーバーヘッドが増加し、性能劣化につながる場合があります。
詳しくはDELETEの注意点(1)をご参照ください。

(※1)データがDELETE済みであることを表す内部的なマーカーです。

WOSの廃止について

Verticaのバージョン9.2以前では、データロード時はWOSというメモリ領域が利用される仕様でした。
9.3以降ではWOS領域は廃止され、その結果、性能はそのままにアーキテクチャがより簡素になりました。

検証バージョンについて

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

更新履歴

2021/10/20 「オブジェクトの階層」についてリンク先を変更
2020/04/27 本記事を公開