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

PolarDB:HASH

最終更新日:May 29, 2024

このトピックでは、HASH関数の使用方法について説明します。

注意

UNI_HASH関数は、単純なモジュロ演算を実行する。 UNI_HASH関数の出力は、パーティショニングキー列の値が均等に分散されている場合にのみ均等に分散できます。

制限事項

パーティション分割キーは整数または文字列でなければなりません。

ルーティング方法

  • 異なるパーティショニングキーを使用してデータベースシャードとテーブルシャードに対してHASH関数を実行する場合は、データベースシャードキーの値をデータベースシャードの数で割り、残りを見つけます。 キー値が文字列の場合、文字列は最初にハッシュ値に変換され、ルート計算に使用されます。 たとえば、HASH(8)8% Dに相当します。Dはデータベースシャードの数を示します。 HASH (「ABC」) は、hashcode (「ABC」).abs() % Dと同等である。
  • 同じパーティショニングキーを使用してデータベースシャードとテーブルシャードのHASH関数を実行する場合は、パーティショニングキーの値をテーブルシャードの総数で割り、残りを見つけます。 2つのデータベースシャードが作成され、各データベースシャードが4つのテーブルシャードを含み、テーブルシャード0〜3がデータベースシャード0に格納され、テーブルシャード4〜7がデータベースシャード1に格納されると仮定する。 このルーティング方法に基づいて、キー値15は、データベースシャード1内のテーブルシャード7に分配される。 式は ((15% (2*4) = 7)) である。

シナリオ

HASH関数は、次のシナリオで使用できます。

  • ユーザーIDまたは注文IDでデータベースを分割します。
  • パーティション分割キーとして文字列を使用します。

HASH関数を実行して、ID列に基づいてデータベースシャードにパーティション分割されていないテーブルを作成するとします。 次のデータ定義言語 (DDL) ステートメントを実行して、テーブルを作成できます。

テーブルtest_hash_tbを作成する (
    id int,
    名前varchar(30) DEFAULT NULL、  
    create_time datetime DEFAULT NULL、
    主キー (id)
) エンジン=InnoDB DEFAULT CHARSET=utf8 dbpartition by HASH(ID);