PolarDB-X は、AUTO モードと DRDS モードの 2 つのデータベースモードをサポートしています。AUTO モードは、新しいアプリケーション向けの最新のデフォルトモードであり、自動パーティショニング、エラスティックスケーリング、および豊富なパーティション管理機能を提供します。DRDS モードは、古いバージョンの PolarDB-X から移行されたアプリケーションとの互換性のために維持されているレガシーなシャーディングモデルです。
新しいアプリケーションには AUTO モードを使用してください。PolarDB-X 1.0 から移行する場合も、移行先として AUTO モードが推奨されます。
仕組み
PolarDB-X データベースを作成する際、MODE パラメーターによってテーブルのパーティショニング方法が決まります:
AUTO モード — テーブルはパーティションテーブルになります。PolarDB-X は自動的にパーティションキーを選択し、レンジベースの一貫性ハッシュアルゴリズムを使用して、パーティション間でデータを均等に分散します。標準の MySQL
CREATE TABLE構文がそのまま機能します。PolarDB-X V5.4.13 以降で利用可能です。DRDS モード — テーブルはシャードテーブルになります。PolarDB-X 固有のシャーディング構文を使用して、データベースシャードキーとテーブルシャードキーを指定します。シャードキーが指定されていない場合、非パーティションテーブルが作成されます。これは、
CREATE DATABASEでMODEを省略した場合のデフォルトです。
1 つの PolarDB-X インスタンスに、両方のモードのデータベースを含めることができます。
注意事項
CREATE DATABASEでMODE='AUTO'を指定して、AUTO モードのデータベースを作成します。MODEを省略すると、DRDS モードのデータベースが作成されます。データベースの作成後は、そのモードを変更することはできません。
Standard Edition の PolarDB-X クラスターでは、AUTO モードのデータベースを作成できません。
AUTO モードのデータベースでは、標準の MySQL パーティショニング構文のみを使用してください。DRDS シャーディング構文はサポートされていません。
DRDS モードのデータベースでは、DRDS シャーディング構文のみを使用してください。MySQL パーティショニング構文はサポートされていません。
データベースの作成
MODE パラメーターを使用して、作成時にデータベースモードを設定します。
MODE 値 | データベースモード | デフォルトか? | テーブル構文 |
|---|---|---|---|
'AUTO' | AUTO モード | いいえ | 標準の MySQL CREATE TABLE。パーティションテーブルを作成します |
'DRDS' | DRDS モード | はい | PolarDB-X シャーディング構文。シャードテーブルを作成します |
AUTO モード:
CREATE DATABASE auto_db MODE='AUTO';このデータベースで作成されたテーブルはパーティションテーブルです。詳細については、「CREATE TABLE (AUTO モード)」および「CREATE DATABASE」をご参照ください。
DRDS モード:
-- どちらの形式でも DRDS モードのデータベースが作成されます
CREATE DATABASE drds_db MODE='DRDS';
CREATE DATABASE drds_db;このデータベースで作成されたテーブルはシャードテーブルです。詳細については、「CREATE TABLE (DRDS モード)」および「CREATE DATABASE」をご参照ください。
AUTO モードでのテーブルのパーティショニング
AUTO モードは、自動パーティショニングと手動パーティショニングの両方をサポートしています。
自動パーティショニング
パーティショニング句を指定せずに、標準の CREATE TABLE 文を実行します。PolarDB-X はパーティションキーを選択し、テーブルとそのインデックスの両方を水平にパーティショニングします。
CREATE TABLE tb (a INT, b INT, PRIMARY KEY(a));AUTO モードでは、PolarDB-X はこのテーブルをプライマリキーで自動的にパーティショニングします:
SHOW FULL CREATE TABLE tb\G
*************************** 1. row ***************************
TABLE: tb
CREATE TABLE: CREATE PARTITION TABLE `tb` (
`a` int(11) NOT NULL,
`b` int(11) DEFAULT NULL,
PRIMARY KEY (`a`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY KEY(`a`)
PARTITIONS 16
1 row in set (0.01 sec)DRDS モードのデータベースで同じ文を実行すると、代わりに非パーティションテーブルが作成されます。
手動パーティショニング
パーティションキーとポリシーを明示的に指定します。AUTO モードは、標準の MySQL 構文を使用して、HASH、KEY、RANGE、RANGE COLUMNS、LIST、LIST COLUMNS パーティショニングをサポートしています。
-- 4 つのパーティションを持つ HASH パーティショニング
CREATE TABLE tb (a INT, b INT, PRIMARY KEY(a))
PARTITION BY HASH(a) PARTITIONS 4;DRDS モードでのテーブルのシャーディング
DRDS モードでは、DBPARTITION BY と TBPARTITION BY を使用した PolarDB-X 固有のシャーディング構文を使用します。HASH ベースのシャーディングのみがサポートされています。
CREATE TABLE tb (a INT, b INT, PRIMARY KEY(a))
DBPARTITION BY HASH(a)
TBPARTITION BY HASH(a)
TBPARTITIONS 4;ルーティングアルゴリズム
2 つのモードの主な違いは、データがパーティションにルーティングされる方法です。
AUTO モード:一貫性ハッシュ
AUTO モードは、レンジベースの一貫性ハッシュアルゴリズムを使用します。
利点:
すべてのハッシュ値を再計算することなく、パーティションの分割、マージ、移行をサポートします。
ホットデータの分割を可能にします:ホットパーティションを複数のパーティションに分割し、データノード間で再分散できます。
パーティションプルーニングは、プレフィックス条件、計算式 (
pk = POW(2, 4))、および照合順序を意識した比較で機能します。結合操作のプッシュダウンは、パーティションの分割、マージ、移行中も維持されます。
制限事項:
一貫性ハッシュアルゴリズムは剰余ハッシュよりも計算が複雑なため、ポイントセレクトのワークロードではスループットがわずかに低下する可能性があります。実際には、
oltp_point_selectクエリの秒間クエリ数 (QPS) は DRDS モードと同等です (詳細については、「パフォーマンスベンチマーク」をご参照ください)。
DRDS モード:剰余ハッシュ
DRDS モードは、ハッシュ値に対して物理テーブルシャード数で剰余演算を行い、データをルーティングします。
利点:
シンプルでオーバーヘッドの少ないルーティングアルゴリズムです。
制限事項:
シャード数を変更するには、すべてのデータのハッシュ値を再計算する必要があります。たとえば、4 シャードから 5 シャードにスケーリングすると、完全なデータ再ハッシュがトリガーされます。
ホットデータのパーティション分割はできません — ホットシャードを細分化することはできません。
RANGE および LIST パーティショニングはサポートされていません。
機能比較
AUTO モードは、DRDS モードに比べて大幅な機能追加がされています。以下の表は、全機能セットを網羅しています。
ヒント: どちらのモードを使用すべきかだけを知りたい場合は、「よくある質問」をご参照ください。
| 機能 | AUTO モード | DRDS モード |
|---|---|---|
| パーティショニング | ||
| 自動パーティショニング (パーティションキー不要) | サポート | 非サポート |
| HASH および KEY パーティショニング | サポート (一貫性ハッシュ) | 対応済み(ただし例外あり) |
| RANGE および RANGE COLUMNS パーティショニング | サポート | 非サポート |
| LIST および LIST COLUMNS パーティショニング | サポート | 非サポート |
| ベクトルパーティションキー (パーティションキーとして複数列) | サポート | 非サポート |
| パーティションキーの照合順序 | サポート | 非サポート |
| 非パーティションテーブルとブロードキャストテーブル | サポート | サポート |
| 分散 | ||
| 透過的な分散 (デフォルトのプライマリキーパーティショニング) | サポート | 非サポート |
| デフォルトのグローバルセカンダリインデックス (GSI) | サポート — インデックステーブルはインデックスキー列によって自動的にパーティショニングされます | 非サポート |
| 負荷分散 | サポート | 非サポート |
| ホットデータの分散 | サポート | 非サポート |
| パーティション管理 | ||
| パーティションの作成、削除、変更 | サポート | 非サポート |
| パーティションの分割とマージ | 対応 | 非サポート |
| パーティションの移行 | サポート | 非サポート |
| パーティションの切り捨て | サポート | 非サポート |
| ホットデータパーティション分析 | 近日公開予定 | 非サポート |
| テーブルの変更 | ||
| テーブルタイプの変更 (非パーティション、ブロードキャスト、またはパーティション) | サポート | サポート |
| パーティションの変更 (数、キータイプ、ポリシー) | サポート | サポート |
| 自動スケーリング | ||
| スケーリング中の書き込み中断 | 中断なし | 短い中断 |
| スケーリング中の他の DDL 操作 | 許可 | 不許可 |
| 自動スケーリングとの互換性 | はい | いいえ |
| ローカリティ | ||
| 静的ストレージ分離 (データベース、テーブル、パーティション) | サポート | サポート (データベースとテーブルのみ) |
| 動的ストレージ分離 | サポート | 非サポート |
| パーティションプルーニング | ||
プレフィックスベースのプルーニング (例:a=100 を使用した PARTITION BY KEY(a,b,c)) | サポート | 非サポート |
式における定数畳み込み (例:pk = POW(2, 4)) | サポート | 非サポート — パーティションキーは定数である必要があります |
| 照合順序を意識した大文字小文字の区別と末尾スペースの処理 | サポート | 非サポート |
| その他 | ||
| 結合操作のプッシュダウン | サポート (分割/マージ/移行中も維持) | サポート |
パーティション選択 (SELECT * FROM tb PARTITION (p1)) | サポート | 非サポート |
| Time to Live (TTL) | サポート | 非サポート |
AUTO_INCREMENT | グローバルに一意、単調増加、かつ連続 | グローバルに一意。単調増加または連続しない場合がある |
パフォーマンスベンチマーク
同じスケールで AUTO モード (パーティションテーブル) と DRDS モード (シャードテーブル) を比較した Sysbench ベンチマークテスト。
テスト環境:
インスタンスタイプ:
polarx.x4.2xlarge.2eコンピュートノード (CN): 16C64G × 2
データノード (DN): 16C64G × 2
バージョン: 5.4.13-16415631
テストデータ:
| 設定 | AUTO モード (パーティション) | DRDS モード (シャード) |
|---|---|---|
| パーティション/シャード数 | 32 パーティション | 32 物理テーブルシャード |
| パーティショニング句 | PARTITION BY HASH(id) PARTITIONS 32 | DBPARTITION BY HASH(id) TBPARTITION BY HASH(id) TBPARTITION 2 |
| データ量 | 1 億 6000 万行 | 1 億 6000 万行 |
テストシナリオ:
oltp_point_select— パーティションキーを使用した等価条件のポイント読み取りoltp_read_only— トランザクション内でパーティションキーを使用したポイント読み取りと小範囲読み取りoltp_read_write— パーティションキーを使用したポイントおよび小範囲の読み取りと書き込み
結果:
oltp_point_select:パーティションテーブルの QPS はシャードテーブルと同等です。一貫性ハッシュアルゴリズムは剰余ハッシュよりも複雑ですが、ポイントルックアップではその差はごくわずかです。oltp_read_onlyおよびoltp_read_write:小範囲クエリに対してパーティションプルーニングがトリガーされるため、パーティションテーブルの QPS はシャードテーブルよりも約 33% 高くなります。
よくある質問
AUTO モードと DRDS モードは、いつ使い分けるべきですか?
AUTO モードを使用してください。PolarDB-X V5.4.13 以降で利用可能で、最新の分散データベース機能をすべてサポートしています。アプリケーションを PolarDB-X 1.0 から移行する場合、AUTO モードが唯一サポートされているターゲットモードです。
AUTO モードでは、自動パーティショニングと手動パーティショニングのどちらを使用すべきですか?
自動パーティショニングから始めることを推奨します。標準の CREATE TABLE 構文で動作し、事前のパーティション計画は不要です。実際のクエリパターンが判明したら、必要に応じて ALTER PARTITION を実行してパーティションキーと数を調整します。テーブルの SQL アクセスパターンと結合関係がすでにわかっている場合にのみ、最初から手動パーティショニングに切り替えてください。
自動パーティショニングでは、いくつのパーティションが作成されますか?
デフォルトのパーティション数は、インスタンス作成時に指定されたノード数 × 8 として計算されます。2 ノードのインスタンスの場合、自動パーティショニングは 16 のパーティションを作成します。この数は、後でノードを追加しても変更されません。
新しいテーブルのデフォルトを変更するには、AUTO_PARTITION_PARTITIONS パラメーターを変更します。この変更は、インスタンス内のすべての新しいテーブルに影響します。既存のテーブルは変更されません。
新しいテーブルが既存のテーブルと異なるパーティション数で作成された場合、それらの間の結合操作をプッシュダウンできなくなり、クエリのパフォーマンスが低下します。関連するテーブル間でパーティション数を一貫して設定してください。
既存の自動パーティションテーブルのパーティション数を変更できますか?
はい。新しい自動パーティションテーブルのパーティション数を変更するには、インスタンスの AUTO_PARTITION_PARTITIONS パラメーターを変更します。この変更は、変更後に作成されるすべての新しいテーブルに適用されます。詳細については、「ALTER TABLE を使用してテーブルパーティションを変更する (AUTO モード)」をご参照ください。
DRDS モードのデータベースを AUTO モードに変換するにはどうすればよいですか?
ご利用の PolarDB-X のバージョンに基づいて選択します。まずバージョンを確認してください。詳細については、「インスタンスのバージョンを表示する」をご参照ください。
V5.4.16 以降 (推奨):
CREATE DATABASE LIKEまたはCREATE DATABASE ASを使用してデータベースを変換します。詳細については、「DRDS モードのデータベースを AUTO モードのデータベースに変換する」をご参照ください。すべてのバージョン — DTS 移行: ターゲットインスタンスに AUTO モードのデータベースとテーブルを作成し、Data Transmission Service (DTS) を使用して DRDS モードのソースからデータを移行します。
すべてのバージョン — ダンプと復元:
mysqldumpを使用して DRDS モードのデータベースからデータ (CREATE TABLE文を除く) をエクスポートします。ターゲットスキーマで AUTO モードのデータベースを作成し、sourceコマンドを使用してダンプをインポートします。