メインコンテンツまでスキップ
バージョン: 2.1

ハイブリッド行列ストレージ

Hybrid Row-Columnar Storage

Dorisはデフォルトでカラムナストレージを使用し、各カラムが連続して格納されます。カラムナストレージは分析シナリオ(集約、フィルタリング、ソートなど)において優れたパフォーマンスを提供します。これは必要なカラムのみを読み取ることで、不要なIOを削減するためです。しかし、ポイントクエリシナリオ(SELECT *など)では、すべてのカラムを読み取る必要があり、各カラムに対してIO操作が必要となるため、IOPSがボトルネックになる可能性があります。特に多くのカラムを持つ幅広いTable(例:数百のカラム)において顕著です。

ポイントクエリシナリオにおけるIOPSボトルネックに対処するため、バージョン2.0.0以降、DorisはHybrid Row-Columnar Storageをサポートしています。ユーザーがTableを作成する際に、行ストレージを有効にするかどうかを指定できます。行ストレージが有効になると、ポイントクエリ(SELECT *など)において各行は1回のIO操作のみを必要とし、パフォーマンスが大幅に向上します。

行ストレージの原理は、ストレージ時に追加のカラムが追加されることです。このカラムは対応する行のすべてのカラムを連結し、特別なバイナリ形式を使用して格納します。

Syntax

Table作成時に、行ストレージを有効にするかどうか、およびTableのPROPERTIESでストレージ圧縮単位サイズpage_sizeを指定します。

  1. 行ストレージを有効にするかどうか:デフォルトはfalse(無効)です。
"store_row_column" = "true"
  1. 行ストレージのpage_size:デフォルトは16KBです。
"row_store_page_size" = "16384"

ページはストレージの読み書き操作における最小単位であり、page_sizeは行ストアページのサイズを指します。これは、単一の行を読み取るためにページIOを生成する必要があることを意味します。この値が大きいほど、圧縮効果が向上し、ストレージ領域の使用量が少なくなります。しかし、ポイントクエリ時のIOオーバーヘッドが増加し、パフォーマンスが低下します(各IO操作は最低でも1ページを読み取るため)。逆に、値が小さいほど、ストレージ領域の使用量が多くなり、ポイントクエリのパフォーマンスが向上します。デフォルト値の16KBは、ほとんどの場合においてバランスの取れた選択です。クエリパフォーマンスを優先する場合は、4KBまたはそれ以下のより小さい値を設定できます。ストレージ領域を優先する場合は、64KBまたはそれ以上のより大きい値を設定できます。

以下の例では、行ストレージを有効にした8列のTableを作成します。高同時実行ポイントクエリのパフォーマンスを最適化するため、page_sizeは4KBに設定されています。

CREATE TABLE `tbl_point_query` (
`key` int(11) NULL,
`v1` decimal(27, 9) NULL,
`v2` varchar(30) NULL,
`v3` varchar(30) NULL,
`v4` date NULL,
`v5` datetime NULL,
`v6` float NULL,
`v7` datev2 NULL
) ENGINE=OLAP
UNIQUE KEY(`key`)
COMMENT 'OLAP'
DISTRIBUTED BY HASH(`key`) BUCKETS 1
PROPERTIES (
"enable_unique_key_merge_on_write" = "true",
"light_schema_change" = "true",
"store_row_column" = "true",
"row_store_page_size" = "4096"
);

クエリ

SELECT * FROM tbl_point_query WHERE key = 100;

ポイントクエリの使用方法の詳細については、High-Concurrent Point Queryを参照してください。

注意事項

  1. 行ストレージを有効にすると、使用するストレージ容量が増加します。ストレージ容量の増加はデータの特性に関連し、一般的に元のTableのサイズの2倍から10倍になります。正確な容量使用量は実際のデータでテストする必要があります。
  2. 行ストレージのpage_sizeもストレージ容量に影響します。前のTable属性パラメータrow_store_page_sizeに基づいて調整できます。
  3. store_row_columnの変更は2.1ではサポートされていません