このトピックでは、HASH関数の使用方法について説明します。
説明
- HASH関数がデータベースシャーディングとテーブルシャーディングに異なるシャードキーを使用する場合、データベースシャードキーの値はデータベースシャードの数で除算され、データがパーティション分割される剰余が取得されます。 キー値が文字列の場合、文字列は最初にハッシュ値に変換され、ルート計算に使用されます。
例えば、HASH(8) は8% Dに相当する。 Dは、データベースシャードの数を指定します。 HASH (「ABC」) は、ハッシュコード (「ABC」) と同等である。 Dは、データがパーティション分割されるデータベースシャードの数を指定します。
- HASH関数がデータベースシャーディングとテーブルシャーディングに同じシャードキーを使用する場合、シャードキーの値はテーブルシャードの総数で除算され、剰余が取得されます。
たとえば、2つのデータベースシャードが作成されます。 各データベースシャードには4つのテーブルシャードがあります。 データベースシャード0はテーブルシャード0〜3を格納し、データベースシャード1はテーブルシャード4〜7を格納する。 キー値が15の場合、キー値15のレコードは、次の式に基づいてデータベースシャード1のテーブルシャード7に分配されます。15% (2*4) = 7。
注意事項
HASH関数の出力は、シャードキー列の値が均等に分散されている場合にのみ均等に分散できます。
制限事項
- シャードキーはINTEGERまたはSTRINGタイプである必要があります。
- STRING型のシャードキーは、データルーティングが実行されるときに大文字と小文字が区別されます。
一般的なシナリオ
HASH関数は、次のシナリオで使用できます。
例- データベースシャーディングは、ユーザーIDまたは注文IDに基づいて実行されます。
- シャードキーの値は文字列です。
ID列の値に基づいてデータベースのシャーディングにのみHASH関数を使用する場合は、次のDDLステートメントを実行できます。
テーブルtest_hash_tbを作成する (
id int,
名前varchar(30) DEFAULT NULL、
create_time datetime DEFAULT NULL、
主キー (id)
) エンジン=InnoDB DEFAULT CHARSET=utf8 dbpartition by HASH(ID);