このトピックでは、自動パーティショニングモードのPolarDB-XデータベースのHASHパーティショニングポリシーについて説明します。
構文
PolarDB-Xでは、データはコンシステントハッシュアルゴリズムに基づいて異なるパーティションに分散されます。 HASHパーティショニングポリシーを使用すると、パーティショニング関数を含む式を使用して、パーティションキー列の値を処理できます。
PolarDB-XのHASHパーティショニングのルーティングアルゴリズムは、MySQLのそれとは異なります。
テーブルを作成...
PARTITION BY HASH(partition_expr)
パーティー番号
partition_expr:
partition_column_list
| partition_func(partition_column)
partition_column_list:
partition_column_list[, partition_column, partition_column, ...]
# パーティション関数を定義します。
partition_func:
| TO_DAYS
| TO_MONTHS
| TO_WEEKS
| TO_SECOND
| UNIX_TIMESTAMP
| 月
| DAYOFWEEK
| DAYOFMONTH
| DAYOFYEAR
| SUBSTR
| SUBSTRING
| 右
| 左 HASHパーティショニングとKEYパーティショニングの違いの詳細については、「概要」トピックの「KEYパーティショニングとHASHパーティショニングの比較」をご参照ください。
使用上の注意
HASHパーティショニングでは、単一列のパーティションキーにパーティション関数を使用できます。 ただし、パーティションキー列のサポートされるデータ型は、パーティション関数によって異なります。
HASHパーティショニングでは、ベクターパーティションキーにパーティション関数を使用することはできません。また、ホットデータパーティション分割もサポートしていません。
パーティションキー列にはネストされたパーティション分割関数を使用できません。
既定では、パーティション分割テーブルには最大8,192個のパーティションを含めることができます。
デフォルトでは、パーティションキーは最大5つのパーティションキー列で構成できます。
TIMESTAMPなどのタイムゾーンに依存するデータ型の列をパーティションキー列として使用する場合は、パーティションキー列にUNIX_TIMESTAMPパーティション分割関数を使用する必要があります。
例
パーティション分割関数の使用
DATETIME型の誕生日列を単一列パーティションキーとして指定し、TO_DAYSパーティショニング関数を使用して誕生日列の値を日数に変換し、HASHパーティショニングを実行します。 パーティションの数を8に設定します。
テーブルの作成tb_h_fn (
id bigint not null auto_increment,
bid int,
名前varchar(30) 、
birthday datetime not null,
主キー (id)
)
PARTITION BY HASH(TO_DAYS(birthday))
パーティー8; 単一列パーティションキーの使用
id列をHASHパーティション分割の単一列パーティションキーとして指定し、パーティション数を8に設定します。
テーブルの作成tb_h (
id bigint not null auto_increment,
bid int,
名前varchar(30) 、
birthday datetime not null,
主キー (id)
)
PARTITION BY HASH(id)
パーティー8; ベクターパーティションキーの使用
HASHパーティション分割のid列とbid列で構成されるvectorパーティションキーを使用し、パーティションの数を8に設定します。
idおよびbid列は、ハッシュ値を計算するために使用される。 等しい条件を含むクエリは、クエリの等しい条件がid列とbid列の両方を含む場合にのみ、パーティションプルーニング条件を満たすことができます。
テーブルの作成tb_h2 (
id bigint not null auto_increment,
bid int,
名前varchar(30) 、
birthday datetime not null,
主キー (id)
)
ハッシュによるパーティー (id、bid)
パーティー8; 制限
データ型の制限
整数型: BIGINT、BIGINT UNSINGEDINT、INT、INT UNSINGED、MEDIUMINT、MEDIUMINT UNSINGED、SMALLINT、SMALLINT UNSINGED、TINYINT、およびTINYINT UNSINGED
日付と時刻のタイプ: DATETIME、Date、およびTIMESTAMP
文字列型: CHARおよびVARCHR
データ分散バランシング
KEYパーティショニングとHASHパーティショニングは、組み込みのコンシステントハッシュアルゴリズムMurmurHash3に基づいて実装されます。 このアルゴリズムは業界で広くテストされており、データの衝突が少なく高性能であることが証明されています。 ただし、MurmurHash3は、特にパーティションキーの異なる値の数が比較的少ない場合、すべての場合で各パーティション内のデータ分散のバランスを保証することはできません。
KEYパーティショニングまたはHASHパーティショニングを使用する場合、MurmurHash3アルゴリズムに基づいてパーティションキーの異なる値の数が3,000を超えると、異なるパーティション間のデータ分散のバランスが取れます。 パーティションキーの値が異なる場合、データはよりバランスの取れた方法で分散されます。