このトピックでは、AUTOモードとDRDSモードのPolarDB-Xデータベースと、2つのモードの違いについて説明します。
PolarDB-Xデータベースモードの概要
AUTOモードのデータベースは、PolarDB-X V5.4.13以降のバージョンで使用でき、自動パーティショニングモードのデータベースとも呼ばれます。 自動モードのデータベースは、自動パーティショニング機能をサポートしています。 テーブルを作成するときに、パーティションキーを指定する必要はありません。 テーブル内のデータは、パーティション間で自動的かつ均等に分散されます。 標準のMySQLステートメントを使用してテーブルを分割することもできます。 AUTOモードのデータベースは、透過的な配布、自動スケーリング、パーティション管理など、分散データベースに提供される機能をサポートします。
バージョンがV5.4.13より前のPolarDB-Xデータベースは、DRDSモードのデータベースです。 DRDSモードのデータベースは自動パーティショニングをサポートしていません。 テーブルを作成するときに、PolarDB-X専用のシャーディング構文を使用して、データベースシャードキーとテーブルシャードキーを指定できます。 データベースシャードキーまたはテーブルシャードキーが指定されていない場合、パーティション分割されていないテーブルが作成されます。
PolarDB-X V5.4.13以降のバージョンは、AUTOモードとDRDSモードのデータベースをサポートしています。 PolarDB-Xインスタンスには、AUTOモードとDRDSモードのデータベースを含めることができます。
使用上の注意
AUTOモードでデータベースを作成するには、
create database
文でmode='AUTO'
を指定します。既定では、
CREATE DATABASE
ステートメントでMODEパラメーターの値を指定しないと、DRDSモードのデータベースが作成されます。データベースがAUTOモードの場合、テーブルの作成時にDRDSデータベースのシャーディング構文を使用してテーブルをシャードすることはできません。 パーティション分割テーブルは、AUTOモードのデータベースでのみ作成できます。
データベースがDRDSモードの場合、テーブルの作成時にテーブルの分割構文を使用してテーブルをシャードすることはできません。 DRDSモードのデータベースでは、シャードテーブルのみを作成できます。
スタンダードエディションのPolarDB-Xクラスターでは、AUTOモードでデータベースを作成できません。
MODEパラメーターを使用してデータベースモードを指定する
PolarDB-Xを使用すると、データベースの作成時にMODEパラメーターを指定できるため、AUTOモードまたはDRDSモードでデータベースを作成することができます。 MODEパラメーターの指定方法を次の表に示します。
データベースの作成後、データベースのモードは変更できません。
パラメーター | 値 | 説明 | データベース作成の構文 | テーブルを作成するための構文 |
モード | 「オート」 | データベースをAUTOモードで作成します。 | 例:
詳細については、「CREATE DATABASE」をご参照ください。 | AUTOモードでデータベースに作成されるテーブルは、パーティションテーブルです。 標準のCREATE TABLE MySQLステートメントを使用して、テーブルを作成できます。 パーティションテーブルの作成方法については、「create table (AUTOモード) 」をご参照ください。 |
'DRDS' (デフォルト) 説明 MODEパラメーターを指定しない場合、システムはDRDSモードでデータベースを作成します。 | データベースがDRDSモードで作成されることを指定します。 | 例:
詳細については、「CREATE DATABASE」をご参照ください。 | DRDSモードでデータベースに作成されるテーブルは、シャードテーブルです。 シャードテーブルの作成方法については、「create table (DRDSモード) 」をご参照ください。 |
自動パーティショニングと手動パーティショニング
自動パーティショニング
自動パーティショニングを構成する場合、テーブルを作成するときに、パーティショニングキーやパーティショニングポリシーなどのパーティショニング関連の構成項目を指定する必要はありません。 PolarDB-Xは自動的にパーティションキーを選択し、テーブルとテーブルのインデックスに対して水平パーティション分割を実行します。 自動モードのデータベースのテーブルのみが自動的にパーティション分割できます。 自動パーティショニング機能は、DRDSモードのデータベースでは使用できません。
例:
パーティション化関連の設定項目を指定せずに、標準のMySQL構文で次のステートメントを実行して、tbという名前のテーブルを作成できます。
CREATE TABLE tb(a INT, b INT, PRIMARY KEY(a));
上記のDDLステートメントをDRDSモードのデータベースで実行すると、パーティション分割されていないテーブルが作成されます。
SHOW
ステートメントを実行して、CREATE TABLEステートメントの詳細を表示できます。ショーフル作成テーブルtb \G *************************** 1。 行 *************************** テーブル: tb テーブルの作成: テーブル 'tb' を作成 ( 'a' int (11) NOT NULL, 'b' int(11) DEFAULT NULL、 主要なキー ('a') ) エンジン=InnoDBデフォルト料金=utf8mb4 1行セット (0.02秒)
データベースで前述のDDL文をAUTOモードで実行すると、パーティションテーブルが作成されます。 テーブルは主キーに基づいて自動的にパーティション分割されます。
You can execute theSHOW
statement to view the details of the CREATE TABLE statement.ショーフル作成テーブルtb \G *************************** 1。 行 *************************** テーブル: tb CREATE TABLE: CREATE PARTITION TABLE 'tb' () 'a' int (11) NOT NULL, 'b' int(11) DEFAULT NULL、 主要なキー ('a') ) エンジン=InnoDBデフォルト料金=utf8mb4 キーによるパーティー ('a') パーティー16 1行セット (0.01秒)
データベースがAUTOモードの場合、インデックスを作成するための構文など、標準のMySQL構文を使用してテーブルを作成できます。 PolarDB-Xの自動パーティション分割機能は、透過的な分散、自動スケーリング、パーティション管理など、分散データベースの機能を提供します。
手動パーティショニング
手動パーティション分割方法を使用してテーブルを作成する場合は、パーティションキーやパーティション分割ポリシーなどのパーティション関連の構成項目を指定する必要があります。 テーブルが手動でパーティション分割されている場合、AUTOモードでデータベースにテーブルを作成するために使用する構文は、DRDSモードでデータベースにテーブルを作成するために使用する構文とは異なります。
AUTOモード: 標準のMySQL構文を使用して、パーティションテーブルを作成できます。 ハッシュ分割、範囲分割、リスト分割などの分割ポリシーがサポートされています。
次の例では、
PARTITION BY HASH(a)
句を使用して、パーティションキーaとハッシュパーティショニングポリシーを指定します。CREATE TABLE tb (a INT, b INT, PRIMARY KEY(a)) -> HASHによるPARTITION (a) PARTITIONS 4; クエリOK、影響を受ける0行 (0.83秒) フル作成テーブルtb\Gを表示 *************************** 1。 行 *************************** テーブル: tb CREATE TABLE: CREATE TABLE 'tb' ( 'a' int (11) NOT NULL, 'b' int(11) DEFAULT NULL、 主要なキー ('a') ) エンジン=InnoDBデフォルト料金=utf8mb4 キーによるパーティー ('a') パーティー4 1行セット (0.02秒)
DRDSモード: テーブルを作成するときに、DRDSモードでデータベースのシャーディング構文を使用できます。 ハッシュポリシーのみがサポートされています。
次の例では、
DBPARTITION BY HASH(a) TBPARTITION BY HASH(a)
句を使用して、列aがシャーディングキーであることを指定します。CREATE TABLE tb (a INT, b INT, PRIMARY KEY(a)) -> DBPARTITION by HASH(a) -> HASHによるTBPARTITION (a) -> TBPARTIONS 4; クエリOK、影響を受ける0行 (1.16秒) フル作成テーブルtb\Gを表示 *************************** 1。 行 *************************** テーブル: tb テーブルの作成: テーブル 'tb' を作成 ( 'a' int (11) NOT NULL, 'b' int(11) DEFAULT NULL、 主要なキー ('a') エンジン=InnoDB DEFAULT CHARSET = utf8mb4 dbpartition by hash('a') tbpartition by hash('a') tbpartition 4 1行セット (0.02秒)
パーティションテーブルとシャードテーブルに使用されるルーティングアルゴリズムの比較
パーティションテーブルとシャードテーブルの主な違いは、パーティションテーブルに使用されるルーティングアルゴリズムが、シャードテーブルに使用されるルーティングアルゴリズムと異なることです。
シャードテーブルに使用されるルーティングアルゴリズムでは、ハッシュ値と物理テーブルシャードの数を使用してモジュロ演算が実行されます。 シャードの数を変更する場合は、すべてのデータのハッシュ値を再計算する必要があります。 たとえば、シャードの数を4から5に変更する場合は、すべてのデータのハッシュ値を再計算する必要があります。 DRDSモードでテーブルシャーディングに使用されるルーティングアルゴリズムは、シャードの数を変更するシナリオには適していません。
パーティションテーブルに使用されるデフォルトのルーティングアルゴリズムは、範囲ベースのコンシステントハッシュアルゴリズムです。 このアルゴリズムを使用すると、パーティションの分割やパーティションのマージなどの操作を実行して、パーティションの数を変更できます。 このアルゴリズムを使用する場合、すべてのデータのハッシュ値を再計算する必要はありません。 AUTOモードでは、テーブルのパーティション数を変更できます。
AUTOモードとDRDSモードのデータベースの機能の比較
DRDSモードのデータベースと比較して、AUTOモードのデータベースは、自動パーティショニング、ホットデータ分割、パーティションスケジューリング、生存時間 (TTL) テーブルなどの新機能をサポートします。 AUTOモードのデータベースに提供される配布機能も、パーティション管理やパーティション変更などのさまざまなディメンションに基づいて最適化されます。
次の表に、AUTOモードとDRDSモードのデータベースで提供される機能の違いを示します。
機能 | データベースの自動モード | DRDSモードのデータベース | |
透明な分布 | デフォルトの主キーベースのパーティション分割 | サポートされています。 テーブルの作成時にパーティション分割ポリシーを設定しない場合、テーブルは主キーに基づいて自動的にパーティション分割されます。 | サポートされていません。 |
デフォルトのグローバルセカンダリインデックス (GSI) | サポートされています。 インデックステーブルにパーティション分割ポリシーを指定しない場合、インデックステーブルはインデックスキー列に基づいて自動的にパーティション分割されます。 | サポートされていません。 | |
負荷分散 | サポートされています。 | サポートされていません。 | |
ホットデータ分布 | サポートされています。 | サポートされていません。 | |
パーティション分割ポリシー | ハッシュ分割とキー分割 | サポートされています。 コンシステントハッシュルーティングアルゴリズムが使用される。 ホットデータは、複数のパーティションに分割し、複数のデータノードに分散できます。 | モジュロ演算は、データをルーティングするシャードの数に基づいて実行できます。 ホットデータを複数のシャードに分割したり、複数のデータノードに分散したりすることはできません。 |
範囲のパーティション分割と範囲列のパーティション分割 | サポートされています。 ホットデータは、複数のパーティションに分割し、複数のデータノードに分散できます。 | サポートされていません。 | |
リスト分割とリスト列分割 | サポートされています。 | サポートされていません。 | |
ベクターパーティションキー (複数の列がパーティションキーとして使用されます) | サポートされています。 ベクトルはパーティションキーとして使用できます。 たとえば、 | サポートされていません。 | |
パーティションキーの照合 | サポートされています。 | サポートされていません。 | |
パーティション分割されていないテーブルとブロードキャストテーブル | サポートされています。 | サポートされています。 | |
パーティション管理 | パーティションの作成、削除、および変更 | サポートされています。 | サポートされていません。 |
パーティションの分割とマージ | サポートされています。 | サポートされていません。 | |
パーティションの移行 | サポートされています。 | サポートされていません。 | |
パーティションの切り捨て | サポートされています。 | サポートされていません。 | |
ホットデータパーティションの分析 | この機能はまもなくリリースされます。 ホットデータパーティションは自動的に分析できます。 | サポートされていません。 | |
テーブルの変更 | テーブルタイプの変更 (テーブルのタイプは、非パーティションテーブル、ブロードキャストテーブル、およびパーティションテーブルに変更できます。) | サポートされています。 | サポートされています。 |
パーティションの変更 (パーティションの数、パーティションキーの種類、およびパーティションポリシーを変更できます。) | サポートされています。 | サポートされています。 | |
自動スケーリング | スケーリング操作中にデータ書き込み操作が中断されるかどうか | 任意 | はい。 データ書き込み動作は、短時間中断される。 |
スケーリング操作中に他のDDL操作を実行できるかどうか | はい。 | 任意 | |
地域性 | 静的ストレージ分離 | サポートされています。 データベース、テーブル、およびパーティションを作成するときに、物理ストレージリソースを指定できます。 | サポートされています。 データベースとテーブルを作成するときに、物理ストレージリソースを指定できます。 |
動的ストレージ分離 | サポートされています。 データベースおよびテーブルに使用される物理ストレージリソースを動的に変更できます。 | サポートされていません。 | |
自動スケーリングに対応 | はい。 | 任意 | |
パーティションの剪定 | プレフィックスに基づくパーティションの剪定 | サポートされています。
| サポートされていません。 |
計算式での定数折りたたみ | サポートされています。 例えば、パーティションプルーニングは、計算式を含む | サポートされていません。 パーティションキーは、pk = 123などの定数で指定する必要があります。 パーティションキーが | |
パーティションルーティング設定の各行の末尾のスペースを無視し、ケース感度のオプション | サポートされています。 パーティションキーの照合順序を指定して、ケースの機密性を確保するかどうかを判断し、パーティションルーティングの行末のスペースを無視することができます。 | サポートされていません。 パーティションキー列には照合順序を使用できません。 ハッシュアルゴリズムを使用すると、値の大文字と小文字の区別が保証され、行末に指定されたスペースは無視できません。 | |
参加操作プッシュダウン | サポートされています。 パーティションの分割、マージ、移行などの操作がパーティションに対して実行される場合、結合操作のプッシュダウンプロセスは影響を受けません。 | サポートされています。 | |
パーティションの選択 | サポートされています。 SELECTステートメントを使用して、指定したパーティションのデータを照会できます。 たとえば、 | サポートされていません。 | |
TTL | サポートされています。 | サポートされていません。 | |
AUTO_INCREMENT | サポートされています。 自動インクリメント列の値は、グローバルに一意で、単調に増加し、連続しています。 | サポートされています。 自動インクリメント列の値は、グローバルに一意であるが、単調に増加し、連続していなくてもよい。 |
DRDSモードとAUTOモードでのデータベースのパフォーマンスの比較
DRDSモードでのテーブルシャーディングに使用されるルーティングアルゴリズムは、AUTOモードでのテーブルパーティショニングに使用されるルーティングアルゴリズムとは異なります。 Sysbenchは、異なるSysbenchテストシナリオでアルゴリズムが使用されている場合に、PolarDB-Xデータベースのベンチマークテストを実行して1秒あたりのクエリ (QPS) を取得するために使用されます。 テスト結果を使用して、ルーティングアルゴリズムのパフォーマンスの違いを評価できます。
テスト環境
PolarDB-Xインスタンスタイプ: polarx.x4.2xlarge.2e
CN (16C64G) × 2
DN (16C64G) × 2
バージョン: 5.4.13-16415631
テーブルのパーティション設定とテーブルのシャーディング設定:
テーブル分割:
32パーティション
パーティショニング句: PARTITION BY HASH(id) PARTITIONS 32
総データ量: 160万行
テーブルのsharding:
32個の物理テーブルシャード
シャーディング句: DBPARTITION BY HASH(id) TBPARTITION BY HASH(id) TBPARTITION 2
総データ量: 160万行
テストシナリオ
次のリストは、Sysbenchテストが実行されるシナリオを示しています。
oltp_point_select: 等価条件のみを含むステートメントを実行して、ポイント読み取り操作を実行します。 テーブルのパーティションキーは、WHERE句で使用されます。
oltp_read_only: BETWEEN演算子または等価条件を含むステートメントを実行して、トランザクション内で小範囲およびポイントの読み取り操作を実行します。 テーブルのパーティションキーは、WHERE句で使用されます。
oltp_read_write: ポイント読み取り操作、ポイント書き込み操作、小範囲読み取り操作、および小範囲書き込み操作は、テーブルのパーティションキーに基づいて実行され、トランザクションを処理します。
テスト結果
上記のテスト結果に基づいて、次の分析結果が得られます。
テーブル分割で使用されるコンシステントハッシュルーティングアルゴリズムは、シャーディングで使用されるモジュラハッシュルーティングアルゴリズムよりも複雑です。 oltp_point_selectクエリが実行されるシナリオでは、テーブル分割のQPSはシャーディングのQPSと同様です。
oltp_read_onlyクエリとoltp_read_writeクエリの実行に使用されるステートメントの式は、oltp_point_selectクエリの実行に使用されるステートメントの式よりも複雑です。 この場合、分割されたテーブルの全体的なQPSは、分割されたテーブルの全体的なQPSよりも約33% 高い。
よくある質問
AUTOモードとDRDSモードのどちらでデータベースを作成するかを判断するにはどうすればよいですか?
AUTOモードは、PolarDB-X V5.4.13以降のバージョンでサポートされています。 アプリケーションをPolarDB-X 1.0から移行する場合は、AUTOモードのデータベースのみを使用できます。 新しいアプリケーションを展開するときは、データベースをAUTOモードで使用できます。
AUTOモードでデータベースにテーブルを作成するときに、自動パーティショニング方式と手動パーティショニング方式のどちらを使用するかを判断するにはどうすればよいですか?
作成したテーブルをアプリケーションのテストに使用する場合は、自動パーティション分割方法を使用してテーブルをパーティション分割できます。 データベースのパフォーマンスを最適化するためにパーティションを変更する場合は、
ALTER PARTITION
DDLステートメントを実行して、テーブルのパーティション分割方法を変更できます。 ビジネスシナリオで使用されるSQL文を知っていて、個々のテーブル間で定義されている関係を理解している場合は、テーブルを作成するときに手動パーティション分割方法を使用できます。データベースのモードをDRDSからAUTOに変更するにはどうすればよいですか?
PolarDB-X V5.4.16以降のバージョンでは、次のいずれかの方法でデータベースのモードをDRDSからAUTOに変更できます。 バージョンがV5.4.16より前のPolarDB-Xの場合、メソッド2と3のみがサポートされます。 PolarDB-Xインスタンスのバージョンを表示する方法の詳細については、「インスタンスのバージョンの表示」をご参照ください。
方法1: PolarDB-X V5.4.16以降のバージョンでは、CREATE database LIKEまたはCREATE DATABASE ASステートメントを実行して、データベースのモードをDRDSからAUTOに変更できます。 詳細については、「DRDSモードのデータベースをAUTOモードのデータベースに変換する」をご参照ください。
方法2: ターゲットインスタンスにAUTOモードでデータベースを作成し、データベースにテーブルを作成できます。 次に、Data Transmission Service (DTS) を使用して、DRDSモードのソースデータベースからAUTOモードのターゲットデータベースのテーブルにデータを移行します。
方法3:
mysqldump
コマンドを実行して、DRDSモードのソースデータベースのデータファイル (CREATE TABLEステートメントを除く) をダンプします。 次に、AUTOモードでデータベースを作成し、データベースにテーブルを作成します。 次に、source
コマンドを実行して、ダンプされたデータファイルをAUTOモードのターゲットデータベースにインポートします。
AUTOモードでデータベースにテーブルを作成するときに自動パーティショニング方式を使用すると、生成されるパーティションの数はいくつですか?
AUTOモードのテーブルのパーティション数は、次の式で計算されます。インスタンス作成時に指定したノード数 × 8 たとえば、インスタンスの作成時にNodesパラメーターの値として2を指定した場合、自動的にパーティション分割されるテーブルのパーティション数は16になります。 自動的にパーティション分割されるテーブルのパーティション数は、インスタンスにノードを追加しても変更されません。 テーブルのパーティション数を変更する場合は、AUTO_PARTITION_PARTITIONSパラメーターの値を変更できます。
自動的にパーティション分割されるテーブルのパーティション数を変更できますか?
はい、テーブルのパーティション数を変更できます。 自動的にパーティション分割されるテーブルのパーティション数を変更するには、テーブルを含むインスタンスのAUTO_PARTITION_partitionsパラメーターの値を変更します。 AUTO_PARTITION_PARTITIONSパラメーターの設定は、インスタンス内のすべてのテーブルで有効になります。 AUTO_PARTITION_PARTITIONSパラメーターの値が変更された後、自動パーティション分割方法を使用して作成される新しいテーブルのパーティションの数は、AUTO_PARTITION_PARTITIONSパラメーターの新しい値に等しくなります。 新しいテーブルのパーティション数が元のテーブルのパーティション数と異なる場合、2つのテーブル間のJOIN操作をプッシュダウンできないため、実行効率に影響します。 新しいテーブルのパーティション数を元のテーブルのパーティション数と一致させるように手動で設定することをお勧めします。 詳細については、「ALTER TABLEを使用してテーブルパーティションを変更する (AUTOモード) 」をご参照ください。