Pembagian Kunci mirip dengan Pembagian Hash, yang membagi data berdasarkan algoritma penghashan konsisten bawaan PolarDB-X. Algoritma perutean untuk Pembagian Kunci di PolarDB-X berbeda dari yang digunakan di MySQL.
Perbedaan antara Pembagian Kunci dan Pembagian Hash meliputi aspek-aspek berikut:
Tidak ada kolom kunci partisi yang dapat ditentukan dalam Pembagian Kunci. Secara default, kolom kunci utama digunakan sebagai kunci partisi. Jika tidak ada kolom kunci utama yang ditentukan, pembagian dilakukan berdasarkan kunci unik.
Pembagian Kunci mendukung kunci partisi vektor. Jika kunci partisi vektor terdiri dari beberapa kolom kunci partisi, kolom kunci partisi pertama digunakan secara default untuk merutekan data.
Pembagian Kunci mendukung tipe data berikut: INT, STRING, DATE, dan DATETIME.
Sintaksis
CREATE TABLE ...
PARTITION BY KEY(partition_column_list)
PARTITIONS number;
partition_column_list:
partition_column_list[, partition_column, partition_column, ...]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 Kunci tidak mendukung fungsi partisi.
Secara default, tabel yang dipartisi dapat berisi hingga 8.192 partisi.
Secara default, kunci partisi dapat terdiri dari hingga lima kolom kunci partisi.
Contoh
Menggunakan kunci partisi kolom tunggal
Tentukan kolom id sebagai kunci partisi kolom tunggal untuk Pembagian Kunci dan atur jumlah partisi menjadi 8.
CREATE TABLE tb_k(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY KEY(id)
PARTITIONS 8;Menggunakan kunci partisi vektor
Gunakan kunci partisi vektor yang terdiri dari kolom bid dan id untuk Pembagian Kunci dan atur jumlah partisi menjadi 8.
Secara default, kolom kunci partisi pertama digunakan untuk menghitung nilai hash. Jika kueri berisi kondisi kesetaraan yang melibatkan kolom kunci partisi awalan, kondisi pemangkasan partisi terpenuhi. Kolom kunci partisi yang tersisa, seperti id, digunakan untuk pemisahan partisi data panas.
CREATE TABLE tb_k(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY KEY(bid, id)
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, VARCHAR, dan BINARY.
Tipe titik tetap: DECIMAL, di mana jumlah digit di bagian pecahan harus 0.
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.
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 didistribusikan secara lebih seimbang jika kunci partisi memiliki lebih banyak nilai berbeda.