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

PolarDB:RIGHT_SHIFT

最終更新日:Mar 29, 2026

RIGHT_SHIFT は PolarDB-X 1.0 のシャーディング関数です。シャードキーの値を固定ビット数だけ右にシフトしてから剰余演算を適用することで、行をルーティングします。シャードキーの下位ビットがフラグやパディングであり、分散に影響を与えない場合に使用します。これらのビットをシフトで除外してから剰余を計算することで、シャード全体でより均等な分散が実現されます。

仕組み

RIGHT_SHIFT(shardKey, n) は、2 つのステップで行をルーティングします。

  1. シャードキー値に対して符号付き右シフトを実行します: shardKey >> n

  2. 結果をデータベースシャードまたはテーブルシャードの数で除算し、その剰余を求めます: (shardKey >> n) % shardCount

この剰余によって、行がどのシャードに格納されるかが決まります。

例: 4 つのデータベースシャードがあり、キーが 0x0100 の場合

RIGHT_SHIFT(0x0100, 8) = 0x01 = 1
1 % 4 = 1  ->  shard 1

同様のロジックで、0x02000x03000x0400 はそれぞれシャード 2、3、0 にマップされ、4 つの値が 4 つのシャードに分散されます。

RIGHT_SHIFT の使用シーン

RIGHT_SHIFT は、シャードキーの上位ビットが行ごとに異なる一方、下位ビットが固定されている場合に使用します。例えば、最下位ビットがステータスフラグ、バージョン番号、または型識別子をエンコードしている場合などです。

単純な剰余シャーディングでは、これらの固定された下位ビットが剰余計算を支配してしまい、多くの行が同じシャードに格納される可能性があります。固定ビットをシフトで除外することで、上位ビットが持つ分散の特性が復元されます。

パラメーター

パラメーター説明
shardKey列リファレンスシャードキー列。整数型である必要があります。
n整数右にシフトするビット数。シャードキーのデータ型のビット幅 (例: INT の場合は 32) を超えることはできません。

注意事項

  • RIGHT_SHIFT が均等な分布を生成するのは、上位ビット (シフト後に残るビット) がシャードキーの値全体で十分にばらけている場合に限られます。残りのビットもクラスター化されていたり、連続していたりする場合、分布は依然として不均一になる可能性があります。

  • DDL 文でビットシフト数を指定します。

  • このシフトは符号付き (算術) 右シフトであり、符号ビットは保持されます。

制限事項

  • シャードキーは整数列である必要があります。

  • PolarDB-X 1.0 インスタンスのバージョンが 5.1.28-1320920 以降である必要があります。

RIGHT_SHIFT を使用したテーブルのパーティション分割

次の例では、test_hash_tbid 列でパーティション分割し、8 ビット右にシフトします。テーブルは、データベースシャードごとに 4 つのテーブルシャードに分割されます。

CREATE TABLE test_hash_tb (
    id           INT,
    name         VARCHAR(30)  DEFAULT NULL,
    create_time  DATETIME     DEFAULT NULL,
    PRIMARY KEY (id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8
dbpartition  BY RIGHT_SHIFT(id, 8)
tbpartition  BY RIGHT_SHIFT(id, 8) tbpartitions 4;

プレースホルダーの値を置き換えます:

プレースホルダー説明
idシャードキー列 — 整数型である必要がありますuser_idorder_id
8右にシフトするビット数 — キー値の固定された下位ビット数に合わせて調整します4816
4データベースシャードあたりのテーブルシャード数48