すべてのプロダクト
Search
ドキュメントセンター

PolarDB:HASHパーティショニング

最終更新日:Jun 11, 2024

このトピックでは、自動パーティショニングモードの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を超えると、異なるパーティション間のデータ分散のバランスが取れます。 パーティションキーの値が異なる場合、データはよりバランスの取れた方法で分散されます。