All Products
Search
Document Center

PolarDB:RANGE_HASH

Last Updated:Mar 29, 2026

RANGE_HASH adalah fungsi partisi kunci ganda untuk PolarDB-X 1.0, digunakan ketika data di-shard berdasarkan dua kunci bisnis, tetapi hanya satu kunci tersedia saat kueri dilakukan.

Cara kerja

RANGE_HASH(COL1, COL2, N) mengarahkan setiap baris ke sebuah shard dengan mengambil N karakter terakhir dari kunci partisi, lalu menghitung sisa bagi (remainder) dari nilai hash setelah dibagi dengan jumlah shard database.

Referensi parameter

ParameterTipe dataDeskripsi
COL1string atau numberKunci partisi utama. Dipilih terlebih dahulu jika ada dalam kueri.
COL2string atau numberKunci partisi cadangan. Dipilih ketika COL1 tidak ada dalam kueri.
NintegerJumlah karakter akhir yang digunakan untuk perhitungan hash. Kedua kunci harus memiliki setidaknya N karakter, dan N karakter terakhirnya harus identik untuk setiap baris tertentu.

Logika pengarahan

Saat menerima kueri, PolarDB-X 1.0 memilih kunci yang tersedia dalam urutan berikut:

Kueri menyediakanKunci yang digunakan untuk pengarahan
COL1 sajaCOL1 — hash dihitung dari N karakter terakhir
COL2 sajaCOL2 — hash dihitung dari N karakter terakhir
Keduanya: COL1 dan COL2COL1 — hash dihitung dari N karakter terakhir

Dalam semua kasus, nilai hash dibagi dengan jumlah shard dan sisa baginya menentukan shard tujuan.

Batasan

  • COL1 dan COL2 harus memiliki tipe data yang sama, yaitu string atau number.

  • Kunci partisi tidak dapat diubah setelah tabel dibuat.

  • Kueri rentang (range queries) pada kunci partisi tidak didukung.

  • Saat memasukkan data, N karakter terakhir dari COL1 dan COL2 harus identik.

  • Nilai string harus memiliki panjang minimal N karakter.

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

Contoh

Pernyataan Data Definition Language (DDL) berikut membuat tabel pesanan di kluster PolarDB-X 1.0 dengan delapan shard database fisik. Pesanan di-shard berdasarkan buyer_id dan order_id, meskipun kueri mungkin hanya menyediakan salah satu ID tersebut.

CREATE TABLE test_order_tb (
    id          INT,
    buyer_id    VARCHAR(30) DEFAULT NULL,
    order_id    VARCHAR(30) DEFAULT NULL,
    create_time DATETIME    DEFAULT NULL,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
  dbpartition  BY RANGE_HASH(buyer_id, order_id, 10)
  tbpartition  BY RANGE_HASH(buyer_id, order_id, 10) tbpartitions 3;

Dengan N = 10, PolarDB-X 1.0 menghitung hash dari 10 karakter terakhir kunci yang tersedia. Kueri yang difilter berdasarkan buyer_id dan kueri yang difilter berdasarkan order_id keduanya diarahkan ke shard yang sama, asalkan 10 karakter terakhir dari masing-masing pasangan tersebut cocok saat data dimasukkan.