概要
PolarDB-Xの透過的分散共通テーブルシャーディング機能は、MySQLパーティション構文がテーブルの作成に明示的に使用されているかどうかに基づいて、論理データベース内のすべてのテーブルをシャードします。 次のリストと図は、一般的なテーブルシャーディングの仕組みを示しています。
論理テーブルのパーティション定義がMySQLで明示的に指定されていない場合、テーブルはパーティション分割されていないテーブルとして使用され、負荷のバランスを取るためにPolarDB-Xの異なるデータノードにランダムに分散されます。
論理テーブルのパーティション定義がMySQLで明示的に指定されている場合、テーブルはパーティションテーブルとして使用され、異なるデータノードに均等に分散されます。
シナリオ
この機能は、元のサービスのすべてのMySQLテーブルをシャードし、テーブルをデータノードに自動的に割り当てます。 これにより、単一サーバーリソースのボトルネックが解決され、負荷が分散されます。 この機能は、アプリケーションで多数のデータベースとテーブルが使用されているシナリオに適しています。 この機能は、結合関係が少ないテーブルに適しています。
例
共通テーブルシャーディング機能を使用するデータベースの作成
PolarDB-Xで共通のテーブルシャーディング機能を使用する場合は、次のSQL文を使用してデータベースを作成できます。
CREATE DATABASE autodb1 MODE='auto' DEFAULT_SINGLE='on';
PolarDBコンソールでAUTOモードでデータベースを作成する場合、システム生成SQLにDEFAULT_SINGLE='on'
パラメーターが自動的に含まれることはありません。 共通のテーブルシャーディング機能を使用するデータベースを作成する場合は、上記のSQL文を手動で実行します。 詳細については、「CREATE DATABASE」をご参照ください。
共通のテーブルシャーディング機能を使用するデータベースを作成するための完全なステートメントを表示します。
mysql> show create database autodb1;
+----------+------------------------------------------------------------------------------------------------------------------+
| DATABASE | CREATE DATABASE |
+----------+------------------------------------------------------------------------------------------------------------------+
| autodb1 | CREATE DATABASE `autodb1` CHARSET = `utf8mb4` COLLATE = `utf8mb4_general_ci` MODE = 'auto' DEFAULT_SINGLE = 'on' |
+----------+------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
パーティション化されていない複数のMySQLテーブルを作成し、テーブルを自動的にシャードします
次のSQL文を使用して、my_autodb
データベースに複数のテーブルを作成できます。
CREATE TABLE sin_t1(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id)
);
CREATE TABLE sin_t2(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id)
);
CREATE TABLE sin_t3(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id)
);
CREATE TABLE sin_t4(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id)
);
シャードテーブルのトポロジの表示
SHOW TOPOLOGY FROM #tableName
ステートメントを使用して、テーブルの分布を表示できます。
sin_t1
:
SHOW TOPOLOGY FROM sin_t1\G
ID: 0
GROUP_NAME: AUTODB1_P00000_GROUP
TABLE_NAME: sin_t1_HnMx
PARTITION_NAME: p1
SUBPARTITION_NAME:
PHY_DB_NAME: autodb1_p00000
DN_ID: polardbx-storage-0-master
STORAGE_POOL_NAME: _default
sin_t2
:
SHOW TOPOLOGY FROM sin_t2\G
ID: 0
GROUP_NAME: AUTODB1_P00001_GROUP
TABLE_NAME: sin_t2_IT7l
PARTITION_NAME: p1
SUBPARTITION_NAME:
PHY_DB_NAME: autodb1_p00001
DN_ID: polardbx-storage-1-master
STORAGE_POOL_NAME: _default
sin_t3
:
SHOW TOPOLOGY FROM sin_t3\G
ID: 0
GROUP_NAME: AUTODB1_P00000_GROUP
TABLE_NAME: sin_t3_HmtN
PARTITION_NAME: p1
SUBPARTITION_NAME:
PHY_DB_NAME: autodb1_p00000
DN_ID: polardbx-storage-0-master
STORAGE_POOL_NAME: _default
sin_t4
:
SHOW TOPOLOGY FROM sin_t4\G
ID: 0
GROUP_NAME: AUTODB1_P00001_GROUP
TABLE_NAME: sin_t4_ab7e
PARTITION_NAME: p1
SUBPARTITION_NAME:
PHY_DB_NAME: autodb1_p00001
DN_ID: polardbx-storage-1-master
STORAGE_POOL_NAME: _default
上記の表のSHOW TOPOLOGY
文の結果に従って、sin_t1とsin_t3がpolardbx-storage-0-masterデータノードに配布されます。 sin_t2とsin_t4はpolardbx-storage-1-masterデータノードに分配される。
使用上の注意
複数のデータノード間で共通のテーブルがシャードされると、テーブルに関連するJOIN操作のパフォーマンスが影響を受ける可能性があります。 JOIN動作のためのデータは、異なるDNにわたって分散され得る。 その結果、JOIN動作はもはやDNに効率的にプッシュダウンされない可能性がある。
論理テーブルにMySQLパーティーニングスキームを明示的に指定しない場合、テーブルはPolarDB-Xインスタンスの異なるノードにランダムに分散されます。 各テーブルシャードのデータ量はさまざまです。 その結果、各ノードで使用されるストレージスペースが異なる可能性があります。