全部产品
Search
文档中心

PolarDB:Pembagian HASH

更新时间:Jul 06, 2025

Topik ini menjelaskan kebijakan pembagian HASH untuk database PolarDB-X dalam mode pembagian otomatis.

Sintaksis

Di PolarDB-X, data didistribusikan ke partisi berbeda berdasarkan algoritma penghashan konsisten. Kebijakan pembagian HASH memungkinkan Anda menggunakan ekspresi yang mencakup fungsi pembagian untuk memproses nilai kolom kunci partisi.

Algoritma perutean untuk pembagian HASH di PolarDB-X berbeda dari yang digunakan di MySQL.

CREATE TABLE ... 
PARTITION BY HASH(partition_expr) 
PARTITIONS number;

partition_expr:
    partition_column_list	
  | partition_func(partition_column)

partition_column_list:
  partition_column_list[, partition_column, partition_column, ...]
  
# Tentukan fungsi pembagian.
partition_func:
     
  | TO_DAYS
  | TO_MONTHS
  | TO_WEEKS
  | TO_SECOND
  | UNIX_TIMESTAMP
  | MONTH
  | DAYOFWEEK
  | DAYOFMONTH
  | DAYOFYEAR
  | SUBSTR
  | SUBSTRING
  | RIGHT
  | LEFT
Catatan

Untuk informasi lebih lanjut tentang perbedaan antara pembagian HASH dan Pembagian Kunci, lihat tabel Perbandingan antara Pembagian Kunci dan Pembagian HASH pada topik "Ikhtisar".

Catatan Penggunaan

  • Pembagian HASH memungkinkan Anda menggunakan fungsi pembagian untuk kunci partisi kolom tunggal. Namun, tipe data yang didukung untuk kolom kunci partisi bervariasi tergantung pada fungsi pembagian.

  • Pembagian HASH tidak mendukung penggunaan fungsi pembagian untuk kunci partisi vektor dan tidak dapat membagi partisi data panas.

  • Anda tidak dapat menggunakan fungsi pembagian bersarang untuk kolom kunci partisi.

  • Secara default, tabel terpartisi dapat memiliki hingga 8.192 partisi.

  • Secara default, kunci partisi dapat terdiri dari hingga lima kolom kunci partisi.

  • Jika Anda menggunakan kolom dengan tipe data sensitif zona waktu seperti TIMESTAMP sebagai kolom kunci partisi, gunakan fungsi pembagian UNIX_TIMESTAMP untuk kolom tersebut.

Contoh

Menggunakan fungsi pembagian

Tentukan kolom ulang tahun bertipe DATETIME sebagai kunci partisi kolom tunggal, gunakan fungsi pembagian TO_DAYS untuk mengonversi nilai kolom ulang tahun menjadi jumlah hari, lalu lakukan pembagian HASH. Atur jumlah partisi menjadi 8.

CREATE TABLE tb_h_fn(
 id bigint not null auto_increment, 
 bid int, 
 name varchar(30),
 birthday datetime not null,
 primary key(id)
) 
PARTITION BY HASH(TO_DAYS(birthday)) 
PARTITIONS 8;

Menggunakan kunci partisi kolom tunggal

Tentukan kolom id sebagai kunci partisi kolom tunggal untuk pembagian HASH dan atur jumlah partisi menjadi 8.

CREATE TABLE tb_h(
 id bigint not null auto_increment, 
 bid int, 
 name varchar(30),
 birthday datetime not null,
 primary key(id)
) 
PARTITION BY HASH(id) 
PARTITIONS 8;

Menggunakan kunci partisi vektor

Gunakan kunci partisi vektor yang terdiri dari kolom id dan bid untuk pembagian HASH dan atur jumlah partisi menjadi 8.

Penting

Kolom id dan bid digunakan untuk menghitung nilai hash. Permintaan yang mencakup kondisi kesetaraan hanya dapat memenuhi kondisi pemangkasan partisi jika kondisi kesetaraan permintaan melibatkan kedua kolom id dan bid.

CREATE TABLE tb_h2(
 id bigint not null auto_increment, 
 bid int, 
 name varchar(30),
 birthday datetime not null,
 primary key(id)
) 
PARTITION BY HASH(id,bid) 
PARTITIONS 8;

Batasan

Batasan pada tipe data

  • Tipe bilangan bulat: BIGINT, BIGINT UNSIGNED, INT, INT UNSIGNED, MEDIUMINT, MEDIUMINT UNSIGNED, SMALLINT, SMALLINT UNSIGNED, TINYINT, dan TINYINT UNSIGNED.

  • Tipe tanggal dan waktu: DATETIME, DATE, dan TIMESTAMP.

  • Tipe string: CHAR dan VARCHAR.

Keseimbangan distribusi data

  • Pembagian KUNCI dan pembagian HASH diimplementasikan berdasarkan algoritma penghashan konsisten bawaan MurmurHash3. Algoritma ini telah diuji secara luas di industri dan terbukti memiliki tingkat tabrakan data rendah serta performa tinggi. Namun, MurmurHash3 tidak menjamin keseimbangan distribusi data di setiap partisi dalam semua kasus, terutama ketika jumlah nilai berbeda dari kunci partisi relatif kecil.

  • Saat menggunakan Pembagian KUNCI atau pembagian HASH, distribusi data di berbagai partisi menjadi seimbang jika jumlah nilai berbeda dari kunci partisi lebih besar dari 3.000 berdasarkan algoritma MurmurHash3. Data akan didistribusikan lebih merata jika kunci partisi memiliki lebih banyak nilai berbeda.