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

PolarDB:HASH

最終更新日:Jun 05, 2024

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