はじめに
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 本記事を公開