ビジネスデータ量が急増する中、多くの企業が、大規模なデータストレージコストの管理と分析効率の維持という中核的な課題に直面しています。この課題に対応するため、PolarDB for MySQL は X-Engine カラムナテーブル機能を提供します。この機能は、列指向ストレージ、効率的な圧縮、および並列計算を基盤に、データストレージコストを元のデータサイズの 10% に削減し、分析クエリパフォーマンスを 1 桁向上させます。MySQL エコシステムとの完全な互換性を維持しながら、低コストでの大規模なデータアーカイブと高性能なリアルタイム分析を実現します。
概要
X-Engine の列指向テーブルは、コンピューティングとストレージの分離に基づくアーキテクチャを採用しています。これにより、コンピューティングリソースとストレージリソースを独立して弾力的にスケールでき、ペタバイト規模のデータ処理能力を実現します。ストレージレイヤーは分散ファイルシステムと OSS を基盤に構築されています。コンピューティングレイヤーは、クエリオプティマイザ、実行オペレーター、ストレージエンジンを徹底的に最適化することで、高性能な分析処理を提供します。
技術アーキテクチャ
PolarDB の全体アーキテクチャ
PolarDB は、分散ストレージレイヤー上に構築されたコンピューティングとストレージの分離アーキテクチャを採用しています。システムは ParallelRaft プロトコルを使用してレプリカ間の一貫性を確保し、OSS を透過的にサポートします。コンピューティングノードは 1 つの読み書きノード (RW) と 1 つ以上の読み取り専用ノード (RO) で構成され、InnoDB と X-Engine の両エンジンをサポートします。データベースプロキシはアプリケーションとコンピューティングノード間のブリッジとして機能し、読み書き分離と負荷分散を提供します。
列指向テーブルのアーキテクチャ
コアとなる技術要素は次のとおりです:
-
クエリオプティマイザ:行・列の混在ストレージ向けに組み込まれたコストベースオプティマイザ (CBO) です。クエリコストを見積もり、行ストレージと列ストレージのいずれかを選択して、最適な実行計画を自動的に選択します。
-
実行オペレーター:列指向のベクトル化および並列実行技術を使用します。バッチ処理により、単一テーブルと複数テーブルの結合の両方で分析クエリを大幅に高速化します。
-
ストレージエンジン:リアルタイムのトランザクション更新をサポートします。メインテーブルは列指向ストレージを使用し、非クラスター化インデックス (NCI) コンポーネントを活用して高速な更新機能を提供します。削除マスクの仕組みにより、削除対象のデータにフラグを立てることで、リアルタイム書き込みに影響を与えることなく効率的な並列クエリを実行できます。さらに、行ストアのセカンダリインデックスにより不要なデータを迅速に除外でき、クエリ効率が向上します。
テーブルタイプの比較
次の表では、行指向テーブル (X-Engine) と PolarDB の列指向テーブルの主な違いを比較し、適切なタイプを選択できるようにしています:
|
観点 |
行指向テーブル (X-Engine) |
列指向テーブル |
|
データの編成 |
データは行単位で連続して格納されます。1 行分のすべての列がまとめて保存されます。 |
データは列単位で連続して格納されます。1 列分のすべての値がまとめて保存されます。 |
|
データ圧縮率 |
中程度です。InnoDB と比較して、データを元のサイズの 3/10 まで圧縮できます。 |
高いです。列指向ストレージと専用のエンコーディング (辞書エンコーディングなど) により、InnoDB と比較してデータを元のサイズの 1/10 まで圧縮できます。 |
|
クエリパフォーマンス |
ポイントルックアップに優れています。主キーまたはインデックスに基づいて 1 行または数行を迅速に読み取る OLTP (Online Transaction Processing) シナリオに適しています。 |
分析処理に優れています。クエリは関連する列のみを読み取るため、I/O を大幅に削減できます。ベクトル化並列コンピューティングと組み合わせることで、分析パフォーマンスは行指向テーブルと比べて 1 桁高くなります。 |
|
更新および削除パフォーマンス |
高いです。行を直接特定して変更します。 |
比較的低いものの、リアルタイム更新をサポートします。NCI コンポーネントにより、変更対象のレコードを迅速に特定できます。 |
|
ユースケース |
OLTP (Online Transaction Processing):高い同時実行性を伴う挿入、削除、更新、クエリなど。 |
OLAP (Online Analytical Processing):データアーカイブ、レポート生成、アドホッククエリ、大規模な集計データ分析など。 |
メリット
-
コスト効率:カラムナストレージ、効率的なエンコーディング、高圧縮アルゴリズム、および OSS などの低コストストレージメディアを組み合わせることで、大規模データセットのストレージおよび処理コストを最大 90% 削減します。
-
高性能リアルタイム分析:データは書き込み直後から分析クエリに使用できます。マルチコア並列処理、ベクトル化、および超並列処理 (MPP) 技術を活用することで、専用の分析データベースに匹敵するクエリパフォーマンスを実現し、厳格なリアルタイム分析要件を満たします。
-
100% MySQL 互換:MySQL と一貫性のあるデータ型システムおよびプロトコルを提供し、柔軟な型変換をサポートします。既存のアプリケーションやツールを変更することなく接続できます。
-
独立した弾力的スケーリング:コンピューティングとストレージの分離により、コンピュートノードとストレージスペースをオンデマンドで独立してスケーリングし、ビジネスのピークやデータ増加に対応できます。
-
強力なワイドテーブルサポート:1 つのテーブルで最大 10,000 列をサポートし、ワイドテーブルストレージと高同時実行書き込みのビジネス要件を満たします。
-
優れたユーザビリティ:単一のデータベースエンジン内で高圧縮ストレージと高性能分析の両方をサポートし、DDL および DML 操作に完全に対応することで、技術スタックと運用管理を簡素化します。
ユースケース
低コストのデータアーカイブ
-
課題:ビジネスの拡大に伴い、過去の注文、ログ、トランザクションレコードなどの履歴データがコアデータベースに急速に蓄積され、高価なストレージ容量を消費します。従来のデータ移行ソリューションでコストを削減できる一方、多くの場合データがオフラインとなり、オンラインアクセスが複雑になります。
-
解決策: オンラインデータアーカイブには列指向テーブルを使用します。同じ PolarDB クラスター内で、行指向テーブル (InnoDB) のコールドデータ、または履歴データテーブル全体を列指向テーブルに移行できます。
-
コアバリュー:
-
大幅なコスト削減:最大 10:1 の圧縮率と OSS などの低コストなストレージメディアの利用により、ストレージコストを最大 90% 削減できます。
-
データの可用性:アーカイブしたデータはオンラインのまま利用できます。複雑なデータ移行プロセスを必要とせず、標準 SQL を使用していつでもクエリおよび分析できます。
-
アプリケーションとのシームレスな統合:アプリケーションから見ると、カラムナテーブルは通常の MySQL テーブルと同様に動作するため、コード変更は不要です。
-
専用データウェアハウス
-
課題:専用データウェアハウスを構築する際、企業は高額なハードウェアコスト、複雑なデータ同期パイプライン (ETL)、運用面での学習コストの高さといった課題に直面することが少なくありません。特に ClickHouse のような新しい技術を導入する場合、その傾向が顕著です。
-
解決策:PolarStore の大容量ストレージを活用し、複数の上流システムからデータを集約して X-Engine のカラムナテーブルに統一的に格納できます。これにより、大容量かつ低コストなストレージと、リアルタイム集計分析のパフォーマンスという利点が得られます。
-
コアバリュー:
-
コストと複雑さの低減:高価な専用ハードウェアを購入したり、異種分析システムを導入したりすることなく、使い慣れた MySQL エコシステム内でデータウェアハウスを構築できます。このアプローチにより、技術スタックを簡素化し、運用オーバーヘッドを削減できます。
-
リアルタイムデータ分析:上流データをリアルタイムにカラムナテーブルへ取り込み、分析に利用できます。従来の ETL ソリューションで一般的な T+1 のデータ遅延を回避できます。
-
大規模データ処理能力:X-Engine のストレージアーキテクチャと効率的な圧縮により、ペタバイトスケールのデータを低コストで格納し、処理できます。
-
フェデレーテッドクエリ分析
-
課題:ビジネスデータは、多くの場合、異なるシステムに分散しています。一部のデータは PolarDB のようなオンラインデータベースにありますが、一方、他のデータは OSS 上で Parquet や ORC といったオープンフォーマットで保存されています。これらの異種のデータセットをまとめて分析するには、通常、OSS のデータをデータベースにインポートするための複雑な ETL プロセスが必要です。
-
解決策: PolarDB 外部テーブル機能を使用して、OSS 上のデータを直接クエリします。
-
コアバリュー:
-
インプレース分析: データが存在する場所でクエリを実行します。PolarDB に OSS 上のファイルを参照する外部テーブルを作成することで、データを移動またはインポートすることなく、標準 SQL を使用して直接クエリを実行できます。
-
フェデレーテッドクエリ: PolarDB のローカルテーブル (行指向または列指向) と OSS 外部テーブル間で
JOIN演算を簡単に実行し、オンラインデータとオフラインデータにまたがる統合分析を実行できます。
-
パフォーマンス
次のパフォーマンスデータは特定のテスト環境で取得したものであり、カラムナテーブルのメリットを評価するための参考情報です。
このトピックの TPC-H 実装は、TPC-H ベンチマークに基づいています。これらのテスト結果は、テストが TPC-H のすべての要件を完全には満たしていないため、公開されている TPC-H ベンチマーク結果と比較できません。
データロードパフォーマンス
次のデータは、32 コア、256 GB のメモリを備えたテスト環境に基づきます。TPC-H データセットおよび Airline データセットを使用して、カラムナテーブルのデータロードとストレージパフォーマンスを ClickHouse および Doris と比較しています。
ロード速度
-
TPC-H データセット:カラムナテーブルのロード速度は 571 万行/秒に達し、書き込みスループットは 50 GB/分でした。これは ClickHouse の約 2.7 倍です。
-
Airline データセット:カラムナテーブルのロード速度は 430 万行/秒に達し、書き込みスループットは 27 GB/分でした。これは ClickHouse の約 3 倍です。
|
データセット |
ClickHouse (百万行/秒) |
Doris (百万行/秒) |
カラムナテーブル (百万行/秒) |
|
TPC-H |
2.10 |
4.54 |
5.71 |
|
Airline |
1.40 |
2.15 |
4.30 |
ストレージフットプリント
-
TPC-H データセット:生データ 100 GB に対して、カラムナテーブルは 4 倍の圧縮率を達成しました。
-
Airline データセット:生データ 75 GB に対して、カラムナテーブルは 18 倍の圧縮率を達成しました。
次の表は、75 GB の Airline データセットにおけるストレージフットプリントを比較したものです:
|
タイプ/製品 |
ClickHouse |
Doris |
カラムナテーブル |
|
ストレージフットプリント (GB) |
9.29 |
4.49 |
3.97 |
|
圧縮率 |
約 8 倍 |
約 16 倍 |
約 18 倍 |
TPC-H クエリパフォーマンス
-
TPC-H 100 GB データセットを使用したパフォーマンステストでは、カラムナテーブルが 22 件のクエリをすべて実行するまでの合計時間は 17.994 秒でした。ClickHouse の 76.9 秒と比較すると、カラムナテーブルの総合パフォーマンスは ClickHouse の約 4.3 倍です。
クエリ
カラムナテーブル (秒)
ClickHouse (秒)
Q1
1.175
2.2
Q2
0.178
0.9
Q3
0.577
1.6
Q4
0.433
1.3
Q5
0.522
3.3
Q6
0.366
0.32
Q7
0.633
1.7
Q8
0.528
1.8
Q9
2.817
12
Q10
0.935
2.3
Q11
0.218
0.66
Q12
0.535
1.4
Q13
1.255
4.4
Q14
0.442
0.3
Q15
0.889
0.42
Q16
0.553
0.6
Q17
0.738
4.2
Q18
2.381
4.3
Q19
0.759
2
Q20
0.453
0.6
Q21
1.308
29.6
Q22
0.299
1
合計
17.994
76.9
-
マルチノード並列分析:TPC-H 1 TB データセットを使用したパフォーマンステストでは、カラムナテーブルがマルチノード並列アクセラレーションを利用し、合計クエリ時間をシングルノードの 1,420.551 秒から 6 ノードの 167.948 秒に短縮しました。
クエリ
1 ノード (秒)
2 ノード (秒)
4 ノード (秒)
6 ノード (秒)
Q1
76.849
36.831
23.031
20.022
Q2
5.841
2.805
1.527
1.09
Q3
133.69
26.131
15.833
4.75
Q4
51.466
19.02
3.353
2.362
Q5
52.965
26.844
13.715
4.269
Q6
34.577
21.831
15.17
11.274
Q7
75.996
29.659
17.279
5.717
Q8
54.989
28.922
15.651
3.375
Q9
155.33
78.216
40.38
25.983
Q10
72.222
31.659
17.177
4.594
Q11
4.149
2.049
1.351
1.069
Q12
50.997
27.79
16.207
2.977
Q13
73.009
31.742
17.605
16.255
Q14
36.887
22.093
4.475
3.778
Q15
66.217
38.628
7.583
6.451
Q16
11.493
4.49
2.528
1.758
Q17
59.225
37.101
11.434
8.767
Q18
132.604
53.578
17.164
10.797
Q19
72.794
38.416
23.759
16.651
Q20
42.621
22.432
5.62
4.768
Q21
149.245
54.803
12.758
8.793
Q22
7.385
5.684
2.972
2.448
合計
1420.551
640.724
306.572
167.948