PolarDB-X 1.0 は、データベースシャーディングおよびテーブルシャーディングの両方をサポートするデータベースサービスです。本トピックでは、PolarDB-X 1.0 のシャーディング機能について説明します。
シャーディング方法
PolarDB-X 1.0 において、シャーディング方法とは、論理テーブルをどのように分割するかを定義するものです。この方法では、シャーディング関数とシャードキーを使用します。シャーディング関数には、シャード数とルーティングアルゴリズムが含まれます。シャードキーには MySQL のデータの型が指定されます。データベースシャーディングとテーブルシャーディングが同一の関数およびキーを使用する場合にのみ、両者は整合性を保ちます。この整合性により、PolarDB-X 1.0 は、シャードキーの値を用いて一意の物理データベースおよび物理テーブルを特定できます。データベースシャーディングとテーブルシャーディングの方法が異なる場合、PolarDB-X 1.0 はフルスキャンを実行します。つまり、すべてのデータベースまたはすべてのテーブルをスキャンします。これは、PolarDB-X 1.0 のクエリで、両方の条件が指定されていない場合に発生します。
データベースシャーディングおよびテーブルシャーディングの対応状況
| シャーディング関数 | 説明 | データベースシャーディングに対応していますか? | テーブルシャーディングをサポート |
| HASH | 単純な剰余演算 | はい | はい |
| STR_HASH | 文字列から部分文字列を抽出 | はい | はい |
| UNI_HASH | 単純な剰余演算 | はい | はい |
| RIGHT_SHIFT | 数値を右シフト | はい | はい |
| RANGE_HASH | 2 つのシャードカラムに対するハッシュ処理 | はい | はい |
| MM | 月単位のハッシュ処理 | いいえ | はい |
| DD | 日単位のハッシュ処理 | いいえ | はい |
| WEEK | 週単位のハッシュ処理 | いいえ | はい |
| MMDD | 月および日に基づくハッシュ処理 | いいえ | はい |
| YYYYMM | 年および月に基づくハッシュ処理 | はい | はい |
| YYYYWEEK | 年および週に基づくハッシュ処理 | はい | はい |
| YYYYDD | 年および日に基づくハッシュ処理 | はい | はい |
グローバルセカンダリインデックスにおける分割関数の対応状況
- PolarDB-X 1.0グローバルセカンダリインデックスグローバルセカンダリインデックス (GSI) をサポートします。データストレージの観点から、各 GSI はインデックスデータを格納する論理テーブルに対応し、このテーブルを「インデックステーブル」と呼びます。
- PolarDB-X 1.0 では、GSI を作成する際に、インデックステーブルのシャーディング方法を指定できます。サポートされるシャーディング関数は、通常の論理テーブルと同一です。GSI の作成構文の詳細については、「グローバルセカンダリインデックスの使用」をご参照ください。
分割関数のデータの型対応状況
| シャーディング関数 | データの型 | ||||||||||
| INT | BIGINT | MEDIUMINT | SMALLINT | TINYINT | VARCHAR | CHAR | DATE | DATETIME | TIMESTAMP | その他の型 | |
| HASH | √ | √ | √ | √ | √ | √ | √ | × | × | × | × |
| UNI_HASH | √ | √ | √ | √ | √ | ○ | √ | × | × | × | × |
| RANGE_HASH | √ | ○ | √ | √ | √ | √ | √ | × | × | × | × |
| RIGHT_SHIFT | √ | ○ | √ | √ | ○ | × | × | × | × | × | × |
| STR_HASH | × | × | × | × | × | √ | ○ | × | × | × | × |
| MM | × | × | × | × | × | × | × | √ | √ | √ | × |
| DD | × | × | × | × | × | × | × | √ | √ | √ | × |
| WEEK | × | × | × | × | × | × | × | √ | √ | √ | × |
| MMDD | × | × | × | × | × | × | × | √ | √ | √ | × |
| YYYYMM | × | × | × | × | × | × | × | √ | √ | √ | × |
| YYYYWEEK | × | × | × | × | × | × | × | ○ | √ | √ | × |
| YYYYDD | × | × | × | × | × | × | × | √ | √ | √ | × |
シャーディング関数の構文
PolarDB-X 1.0 は、MySQL の DDL テーブル操作構文と互換があり、drds_partition_options シャーディングキーワードを追加しています。構文は次のとおりです:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[drds_partition_options]
[partition_options]
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
[table_options]
[drds_partition_options]
[partition_options]
select_statement
drds_partition_options:
DBPARTITION BY
{ {HASH|YYYYMM|YYYYWEEK|YYYYDD|...}([column])}
[TBPARTITION BY
{ {HASH|MM|DD|WEEK|MMDD|YYYYMM|YYYYWEEK|YYYYDD|...}(column)}
[TBPARTITIONS num]
]