このトピックでは、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);