All Products
Search
Document Center

PolarDB:RIGHT_SHIFT

Last Updated:Mar 29, 2026

RIGHT_SHIFT adalah fungsi sharding untuk PolarDB-X 1.0 yang mengarahkan baris dengan menggeser nilai kunci shard ke kanan sebanyak jumlah bit tetap sebelum menerapkan operasi modulo. Gunakan fungsi ini ketika bit orde rendah dari kunci shard Anda berupa flag atau padding yang tidak membawa sinyal distribusi—menggesernya keluar sebelum operasi modulo menghasilkan penyebaran yang lebih merata di seluruh shard.

Cara kerja

RIGHT_SHIFT(shardKey, n) mengarahkan suatu baris dalam dua langkah:

  1. Lakukan penggeseran kanan bertanda (signed right shift) pada nilai kunci shard: shardKey >> n

  2. Bagi hasilnya dengan jumlah shard database atau tabel, lalu ambil sisanya: (shardKey >> n) % shardCount

Sisa pembagian tersebut menentukan shard tujuan baris tersebut.

Contoh: Dengan empat shard database dan kunci 0x0100:

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

Logika yang sama memetakan 0x0200, 0x0300, dan 0x0400 ke shard 2, 3, dan 0 secara berturut-turut—mendistribusikan keempat nilai tersebut ke empat shard yang berbeda.

Kapan menggunakan RIGHT_SHIFT

Gunakan RIGHT_SHIFT ketika bit orde tinggi dari kunci shard Anda bervariasi antar baris, tetapi bit orde rendah bersifat tetap—misalnya, ketika bit paling kanan menyandikan status flag, nomor versi, atau pengenal tipe.

Dengan sharding modulo biasa, bit orde rendah yang tetap tersebut mendominasi perhitungan sisa bagi, sehingga banyak baris berakhir di shard yang sama. Menggeser bit tetap tersebut keluar memulihkan sinyal distribusi dari bit orde tinggi.

Parameter

ParameterTipeDeskripsi
shardKeyReferensi kolomKolom kunci shard. Harus bertipe integer.
nIntegerJumlah bit yang digeser ke kanan. Tidak boleh melebihi lebar bit tipe kunci shard (misalnya, 32 untuk INT).

Catatan penggunaan

  • RIGHT_SHIFT menghasilkan distribusi merata hanya jika bit orde tinggi—yaitu bit yang tersisa setelah penggeseran—cukup bervariasi di antara nilai-nilai kunci shard. Jika bit-bit tersebut juga terklaster atau berurutan, distribusi mungkin tetap tidak merata.

  • Tentukan jumlah penggeseran bit dalam pernyataan DDL Anda.

  • Penggeseran dilakukan sebagai penggeseran kanan bertanda (aritmetika): bit tanda dipertahankan.

Batasan

  • Kunci shard harus merupakan kolom bertipe integer.

  • Diperlukan instans PolarDB-X 1.0 versi 5.1.28-1320920 atau lebih baru.

Membuat partisi tabel dengan RIGHT_SHIFT

Contoh berikut membuat partisi tabel test_hash_tb berdasarkan kolom id dengan menggeser 8 bit ke kanan. Tabel tersebut dibagi menjadi 4 shard tabel per shard database.

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;

Ganti nilai placeholder berikut:

PlaceholderDeskripsiContoh
idKolom kunci shard — harus bertipe integeruser_id, order_id
8Jumlah bit yang digeser ke kanan — sesuaikan agar sesuai dengan jumlah bit orde rendah tetap dalam nilai kunci Anda4, 8, 16
4Jumlah shard tabel per shard database4, 8