Xuanwu 分析ストレージエンジンは、高い信頼性、高可用性 (HA)、高性能、低コストを兼ね備えたエンタープライズグレードのデータストレージを提供します。これは、AnalyticDB for MySQL が高スループットのリアルタイム書き込みと高性能なリアルタイムクエリを実現するための基盤です。
Xuanwu 分析ストレージエンジン (XUANWU)
高スループットのリアルタイム書き込み
AnalyticDB for MySQL は、3 層の並列アーキテクチャによって非常に高いスループット容量を達成します。アクセスレイヤー、ストレージノードレイヤー、永続分散ストレージレイヤーはすべて並列でスケールアウトします。このアーキテクチャは、ハイブリッド行列表ストレージエンジンと、増分データと完全データ間の非同期変換を組み合わせることで、高スループット、高同時実行のリアルタイム書き込みを実現します。
リアルタイムの可視性を確保するため、AnalyticDB for MySQL は Raft コンセンサスプロトコルと同期書き込み適用を組み合わせています。データは書き込み直後にクエリできるようになり、書き込みの一貫性が保証されます。このストレージエンジンは、mark-for-delete を使用して高スループットのリアルタイム更新と削除をサポートし、多版型同時実行制御 (MVCC) を使用してデータの原子性と整合性を保証します。
ハイブリッド行列表ストレージ
XUANWU ストレージエンジンは、ハイブリッド行列表ストレージフォーマットをサポートしています。このフォーマットは、Hadoop の ORC や Parquet フォーマットと同様に、列ストレージをベースにしながら行ストレージにも対応しています。違いは、XUANWU のハイブリッド行列表ストレージが分析的な列プルーニングと高スループットのスキャンに対応し、行アライメントによって強力なランダムルックアップ性能も提供する点です。これにより、任意の多次元インデックスでフィルタリングする際に、パフォーマンスにおいて卓越した利点が得られます。
次の図は、ハイブリッド行列表ストレージフォーマットを示しています。
適応型インデックス
OLAP シナリオでは、任意のディメンションでのクエリが必要ですが、従来の OLTP システムの単一列インデックスや複合インデックスではこの要件を満たせません。XUANWU は適応型列レベル自動インデックス技術を使用しています。これにより、文字列、数値、テキスト、JSON、ベクトルなどの列タイプに対してインデックスデータ構造が自動的に設定されます。列レベルのインデックスは、任意のディメンションの組み合わせでの検索とプログレッシブストリーミングマルチウェイマージをサポートしており、データフィルタリングのパフォーマンスを大幅に向上させます。
現在のインデックスタイプは、転置インデックス、BKD-Tree インデックス、Bitmap インデックスです。インデックスのパフォーマンスは、主にカーディナリティや、範囲クエリによって返されるレコード数とテーブル内の総レコード数との比率などのデータ分布特性に影響されます。age > 0 AND age < 100 のような条件の場合、インデックスがスキャンよりもコストがかかることがあります。そのため、XUANWU は CBO に基づき、インデックスとスキャンのいずれかを選択します。
次の図は、インデックスタイプ間でのマルチウェイマージルックアッププロセスを示しています。
構造化・非構造化インデックスの統合管理
XUANWU ストレージレイヤーのインデックスマネージャーは、構造化インデックスと非構造化インデックスを統合的に管理します。管理対象のタイプには、数値用の BKD インデックス、文字列用の転置インデックス、非構造化データ用の JSON インデックスとベクトルインデックス、テキストデータ用の全文インデックスが含まれます。インデックスマネージャーはコンピューティングレイヤーに統一された表現を提供するため、コンピューティングレイヤーの SQL ロジックは異種データ型と互換性があり、インデックスによって高速化されます。その結果、AnalyticDB for MySQL は全文データと構造化テーブル間の相関分析をサポートし、複雑なロジックを SQL で表現できます。次の例は、そのようなクエリを示しています。
SELECT A.customer_id,
B.score
FROM (
SELECT customer_id
FROM dw_databank_crowds_all_100
WHERE MATCH (item_title, item_desc) AGAINST ('red dress') > 0.5
AND buy_cnt between 1 and 3
AND style_prefer_tags in ('slim fit','soft fabric','medium thickness')
AND ds = 201704
) A
JOIN (
SELECT buyer_id,
MAX(MATCH (comments) AGAINST ('excellent workmanship,very good quality,elegant,looks great when worn,looks classy -low price')) AS score
FROM dw_databank_profile_info_0
WHERE MATCH (mail_addr) AGAINST ('Hangzhou,Zhejiang')
AND MATCH (comments) AGAINST ('good workmanship,very good quality,elegant,looks great when worn,looks classy -low price')
AND create_time < '2018-04-30 12:00:00'
AND create_time > '2017-04-30 12:00:00'
GROUP BY buyer_id
ORDER BY score DESC
LIMIT 100000
) B
ON A.customer_id = B.buyer_id
ORDER BY B.score DESC
LIMIT 10000
このクエリは、サブクエリによって返された全文インデックスの結果セットに対して相関分析を実行し、分析された結果をスコアの降順で並べ替え、上位 10,000 行を返します。
Xuanwu 分析ストレージエンジン V2 (XUANWU_V2)
AnalyticDB for MySQL は、元の Xuanwu 分析ストレージエンジンをベースに改良を重ね、新世代のストレージエンジンである XUANWU_V2 を開発しました。
効率的なデータ編成
XUANWU_V2 は、データの編成方法を最適化します。データはリアルタイムエンジンに追記モードで書き込まれます。次に、Flush タスクがデータを読み取りに適した完全データエンジンに書き込みます。その後、コンパクションタスクが完全データエンジン内のレベル内またはレベル間でデータをマージします。これにより、L0 レベルより下のパーティションが順序付けられ、データが物理的に固定サイズで編成されます。
次の図は、データの編成方法を示しています。
このデータ編成により、リアルタイムエンジンが読み取りに適した完全データエンジンに適時に組み込まれ、クエリパフォーマンスが向上します。また、コンパクション中の読み取り増幅が大幅に削減され、コンパクション中の CPU と I/O 消費量がさらに低減されます。さらに、XUANWU_V2 は、大きすぎる、または小さすぎるパーティションファイルを適応的に分割およびマージするため、パーティションキーの選択について心配する必要がなくなります。
効率的なストレージフォーマット
XUANWU_V2 は、固定の行数で編成された元の列レベルの I/O ブロックをベースにしており、I/O ブロックを固定サイズで編成するファイルフォーマットを導入しています。この固定サイズの編成は、I/O とメモリ管理を最適化し、行アライメントと I/O サイズの不整合によって引き起こされる問題を解決します。また、メモリの再利用効率を向上させ、メモリの割り当てと解放のオーバーヘッドを削減します。メモリを I/O 操作と連携させることで、XUANWU_V2 は読み取り増幅をさらに削減し、I/O コストを低減します。
水平スケーリングの弾力性の向上
XUANWU_V2 はすべてのデータを OSS に保存するため、ストレージコストが大幅に削減され、水平スケーリングとノード移行の効率が大幅に向上します。XUANWU_V2 は ESSD (Enterprise SSD) をクエリキャッシュとして使用し、DDL ステートメントで指定されたパーティションプリフェッチと、クエリの自動キャッシュという 2 つの形式をサポートしています。これにより、クエリのパフォーマンスが効果的に向上します。