すべてのプロダクト
Search
ドキュメントセンター

PolarDB:PolarDB-X の技術的仕組み

最終更新日:Nov 27, 2025

このトピックでは、PolarDB-X の主要な技術的仕組みについて説明します。

分散型リニアスケーラビリティ

PolarDB-X は、パーティショニング関数を使用して、テーブルデータを複数のデータノード (DN) に水平分割します。PolarDB-X は、ハッシュパーティショニングやレンジパーティショニングなどの一般的なパーティショニング関数をサポートしています。

次の例では、orders データベースの shop テーブルが、各行の ID 属性のハッシュ値に基づいて、orders_00 から `orders_11` までの 12 のパーティションに分散されています。これらのパーティションは 4 つのデータノードに均等に分散されます。このデータ分布はユーザーに対して透過的です。PolarDB-X の分散 SQL レイヤーは、クエリを自動的に正しいノードにルーティングし、異なるパーティションやノードからの結果を集約します。

Distributed linear scalability

スケールアウトと移行

ビジネスとデータ量の増大に伴い、データノードの追加が必要になる場合があります。インスタンスに新しいデータノードを追加すると、PolarDB-X は自動的にスケールアウトタスクを開始し、データをリバランスします。

次の例では、orders テーブルのデータは最初に 4 つのデータノードに分散されています。データノードの数が 4 から 6 に増えると、PolarDB-X は自動的にスケールアウトタスクを開始し、既存のノードから新しいノードに一部のパーティションを移行します。この移行プロセスはバックグラウンドで実行され、アイドルリソースを使用するため、オンラインビジネスに影響を与えません。

Scale-out and migration

高可用性とディザスタリカバリ

本番環境では、データベースインスタンスは通常、高可用性とデータの耐久性を確保するために複数のレプリカでデプロイされます。現代のデータベースでは、レプリカ間の強力な整合性を保証するために、Paxos などの多数決合意形成レプリケーションプロトコルがよく使用されます。このプロトコルは少なくとも 3 つのノードを必要とし、各書き込み操作はノードの過半数によって承認される必要があります。これにより、1 つのノードに障害が発生した場合でも、インスタンスは動作を継続できます。PolarDB-X は、Alibaba が開発した X-Paxos レプリケーションプロトコルを使用しています。X-Paxos は Paxos の拡張版であり、機能とパフォーマンスに関して広範な最適化が施されています。このプロトコルは、10 年以上にわたって独身の日 (ダブルイレブン) ショッピングフェスティバルを支えており、その安定性と信頼性が実証されています。

Paxos レプリケーションプロトコルを使用すると、PolarDB-X インスタンスを複数のデータセンターにまたがってデプロイし、データセンターレベルのディザスタリカバリを実現できます。一般的なデプロイ方法には、同一都市内の 3 つのデータセンターや、2 つのリージョンにまたがる 3 つのデータセンターなどがあります。後者は、ハイブリッドクラウドのデプロイでよく使用されます。Paxos プロトコルの性質上、3 つのデータセンターのうち 1 つが通常、プライマリデータセンターとして機能し、外部サービスの処理を担当します。

分散トランザクション

PolarDB-X は、分散トランザクションをネイティブにサポートし、原子性、一貫性、独立性、永続性 (ACID) を保証します。

PolarDB-X は、タイムスタンプオラクル (TSO) とマルチバージョン同時実行制御 (MVCC) を使用して、一貫性のあるスナップショット読み取りを保証します。これにより、送金などの分散トランザクションの中間状態を読み取ることを防ぎます。次の図に示すように、計算ノード (CN) がトランザクションをコミットすると、TSO からタイムスタンプを取得します。その後、CN はタイムスタンプとデータをデータノード (DN) 上のマルチバージョンストレージエンジンにコミットします。読み取り操作中に、クエリが複数のパーティションのデータを含む場合、PolarDB-X はグローバルタイムスタンプを取得して読み取りバージョンとして使用します。その後、各行のバージョンの可視性を評価し、このグローバルタイムスタンプより前にコミットされたトランザクションのデータのみが読み取られるようにします。

分散トランザクションは、分散システムの基本的な機能です。たとえば、読み書き分離ソリューションでは、トランザクションデータのバージョンがラーナーレプリカに同期され、読み取り専用インスタンスが同期遅延によって古いデータを読み取らないようにします。グローバルなデータ変更ログでは、分散トランザクションはタイムスタンプによってソートされます。ポイントインタイムリカバリ (PITR) を実行する際、PolarDB-X はこれらのタイムスタンプを使用して、特定の時点におけるグローバルに一貫性のあるデータバージョンを特定します。

集中・分散統合アーキテクチャ

PolarDB-X は、集中・分散統合アーキテクチャをサポートしています。

このアーキテクチャにより、PolarDB-X は分散データベースのスケーラビリティと回復力、そして集中型データベースの管理性とパフォーマンスを両立させることができます。集中モードと分散モードをシームレスに切り替えることが可能です。データノードは集中モードで独立して動作でき、シングルノードのデータベースモデルと完全に互換性があります。ビジネスが成長し、分散システムが必要になった場合、アーキテクチャをその場で分散モデルにシームレスに移行できます。このアップグレード中、分散コンポーネントは既存のデータノードと統合され、データ移行やアプリケーションの変更は必要ありません。

このアーキテクチャをサポートするために、PolarDB-X インスタンスには Standard Edition (集中型) と Enterprise Edition (分散型) の 2 つのエディションが用意されています。Standard Edition インスタンスをその場で Enterprise Edition インスタンスにアップグレードできます。

HTAP

PolarDB-X は、ハイブリッドトランザクション/分析処理 (HTAP) をサポートしています。これにより、高同時実行のトランザクションリクエストと複雑な分析クエリを同時に処理できます。分析クエリは大規模なデータセットに対して操作を行い、特定の期間にわたるデータの集計など、複雑な計算を伴います。単純なクエリと比較して、分析クエリは実行に時間がかかり、より多くの計算リソースを消費するため、完了までに数秒から数分かかる場合があります。

複雑な分析クエリのパフォーマンスを向上させるために、PolarDB-X はインメモリ列指向インデックス (IMCI) 技術を使用しています。この技術は、ベクトル化演算子と組み合わせることで、分析処理のパフォーマンスを大幅に向上させます。

MySQL エコシステムとの互換性

PolarDB-X の中心的な設計目標の 1 つは、MySQL とそのエコシステムとの互換性です。この互換性は、SQL 構文、トランザクションの動作、データのインポートとエクスポートをカバーしています。詳細については、「MySQL との互換性」をご参照ください。

PolarDB-X は MySQL プロトコルと互換性があります。Java Database Connectivity (JDBC)、ODBC、Golang ドライバーなど、一般的な MySQL クライアントやドライバーを使用して PolarDB-X インスタンスに接続できます。PolarDB-X は、SSL、Prepare、Load などの MySQL プロトコルとも互換性があります。

PolarDB-X は、以下を含むさまざまな MySQL の DML、DAL、DDL 構文と互換性があります。

  • JSON、暗号化、復号関数を含む、ほとんどの MySQL 関数。

  • MySQL 8.0 のビュー、共通テーブル式 (CTE)、ウィンドウ関数、分析関数。

  • TIMESTAMP や DECIMAL などの型の精度を含む、さまざまな MySQL データ型。

  • 一般的な MySQL の文字列文字セットと照合順序。

  • ほとんどの information_schema ビュー。

さらに、PolarDB-X は MySQL のバイナリログレプリケーションプロトコルと互換性があります。PolarDB-X クラスターを標準の MySQL ノードとして扱い、別の MySQL ノードを PolarDB-X クラスターの同期元または同期先として使用できます。PolarDB-X のバイナリログ形式は MySQL と同じであるため、変更データキャプチャ (CDC) シナリオでも使用できます。たとえば、Canal などのツールを使用して、PolarDB-X から他のストレージソリューションにデータを同期できます。