PolarDB-X 1.0は、データベースシャーディングとテーブルシャーディングの両方をサポートするデータベースサービスです。 このトピックでは、PolarDB-X 1.0のシャーディング関数について説明します。
シャーディング法
PolarDB-X 1.0では、論理テーブルのシャーディング方法は、シャーディング関数とシャーディングキー (キーのMySQLデータ型を含む) によって定義されます。 シャーディング関数には、シャードの数とルーティングアルゴリズムが含まれます。 PolarDB-X 1.0の論理テーブルのデータベースシャードとテーブルシャードは、同じシャーディング関数とシャーディングキーが使用されている場合にのみ、同じシャーディング方法で生成されます。 データベースシャードとテーブルシャードが同じシャーディング方法で生成されている場合、PolarDB-X 1.0は、シャーディングキーの値に基づいて一意の物理データベースシャードと物理テーブルシャードを見つけることができます。 論理テーブルのデータベースシャーディングとテーブルシャーディングに使用されるシャーディング方法が異なり、SQL文でデータベースシャーディングとテーブルシャーディングに条件が指定されていない場合、PolarDB-X 1.0はすべてのデータベースシャードまたはすべてのテーブルシャードをスキャンしてデータを照会します。
データベースシャーディングとテーブルシャーディングのサポート
| シャーディング機能 | 説明 | サポートデータベースsharding | サポートテーブルsharding |
| ハッシュ | 単純なモジュロ演算を実行します。 | 可 | 可 |
| STR_HASH | 部分文字列を返します。 | 可 | 可 |
| UNI_ハッシュ | 単純なモジュロ演算を実行します。 | 可 | 可 |
| 右_シフト | データベースシャードキーの値に対して、符号付き右シフトを実行します。 | 可 | 可 |
| レンジ_ハッシュ | 2つのシャーディングキーが必要なときにハッシュを実行します。 | 可 | 可 |
| MM | 月ごとにハッシュを実行します。 | 任意 | 可 |
| DD | 日付によるハッシュを実行します。 | 任意 | 可 |
| 週 | 週ごとにハッシュを実行します。 | 任意 | 可 |
| MMDD | 月と日付によるハッシュを実行します。 | 任意 | 可 |
| YYYYMM | 年と月ごとにハッシュを実行します。 | 可 | 可 |
| YYYYWEEK | 年と週ごとにハッシュを実行します。 | 可 | 可 |
| YYYYDD | 年と日付でハッシュを実行します。 | 可 | 可 |
グローバルセカンダリインデックスのサポート
- PolarDB-X 1.0は、グローバルセカンダリインデックスをサポートしています。 データストレージに関して、各GSIは、インデックスデータを格納する論理テーブルに対応します。 このテーブルをインデックステーブルと呼ぶ。
- PolarDB-X 1.0では、GSIの作成時にインデックステーブルのシャーディングメソッドを指定することもできます。 インデックステーブルと通常の論理テーブルは同じシャーディング機能をサポートします。 詳細については、「グローバルセカンダリインデックスの使用」をご参照ください。
サポートしているデータ型
| シャーディング機能 | データ型 | ||||||||||
| INT | ビギント | MEDIUMINT | SMALLINT | TINYINT | VARCHAR | CHAR | 日付 | DATETIME | タイムスタンプ | 他のタイプ | |
| ハッシュ | √ | √ | √ | √ | √ | √ | √ | × | × | × | × |
| UNI_ハッシュ | √ | √ | √ | √ | √ | √ | √ | × | × | × | × |
| レンジ_ハッシュ | √ | √ | √ | √ | √ | √ | √ | × | × | × | × |
| 右_シフト | √ | √ | √ | √ | √ | × | × | × | × | × | × |
| STR_HASH | × | × | × | × | × | √ | √ | × | × | × | × |
| MM | × | × | × | × | × | × | × | √ | √ | √ | × |
| DD | × | × | × | × | × | × | × | √ | √ | √ | × |
| 週 | × | × | × | × | × | × | × | √ | √ | √ | × |
| MMDD | × | × | × | × | × | × | × | √ | √ | √ | × |
| YYYYMM | × | × | × | × | × | × | × | √ | √ | √ | × |
| YYYYWEEK | × | × | × | × | × | × | × | √ | √ | √ | × |
| YYYYDD | × | × | × | × | × | × | × | √ | √ | √ | × |
シャーディング関数の構文
PolarDB-X 1.0は、MySQLのデータ定義言語 (DDL) テーブルステートメントと互換性があります。 また、次のステートメントに示すように、データベースシャーディングとテーブルシャーディングのdrds_partition_optionsキーワードも提供します。
CREATE [一時] TABLE [存在しない場合] tbl_name
(create_definition,...)
[table_options]
[drds_partition_options]
[partition_options]
作成 [一時] テーブル [存在しない場合] tbl_name
[(create_definition,...)]
[table_options]
[drds_partition_options]
[partition_options]
select_statement
drds_partition_options:
DBPARTITIONによる
{ {HASH | YYYYMM | YYYYWEEK | YYYYDD |...}([列])}
[TBPARTITION BY]
{ {HASH | MM | DD | WEEK | MMDD | YYYYMM | YYYYWEEK | YYYYDD |...}(列)}
[TBPARTITIONS num]
]