PolarDB-X mendukung dua mode database: AUTO mode dan DRDS mode. AUTO mode merupakan mode default modern untuk aplikasi baru yang menawarkan partisi otomatis, skalabilitas elastis, dan manajemen partisi yang lebih kaya. DRDS mode adalah model sharding lama yang dipertahankan demi kompatibilitas dengan aplikasi yang dimigrasikan dari versi PolarDB-X sebelumnya.
Untuk aplikasi baru, gunakan AUTO mode. Jika Anda melakukan migrasi dari PolarDB-X 1.0, AUTO mode juga merupakan mode target yang direkomendasikan.
Cara kerja
Saat membuat database PolarDB-X, parameter MODE menentukan cara tabel dipartisi:
AUTO mode — Tabel berupa tabel partisi. PolarDB-X secara otomatis memilih kunci partisi dan mendistribusikan data secara merata ke seluruh partisi menggunakan algoritma consistent hashing berbasis rentang (range-based). Sintaksis MySQL standar
CREATE TABLEdapat digunakan tanpa modifikasi. Fitur ini tersedia di PolarDB-X V5.4.13 dan versi setelahnya.DRDS mode — Tabel berupa tabel sharded. Anda menentukan kunci shard database dan kunci shard tabel menggunakan sintaksis sharding khusus PolarDB-X. Jika tidak ada kunci shard yang ditentukan, tabel non-partisi akan dibuat. Ini merupakan mode default jika Anda menghilangkan parameter
MODEdari pernyataanCREATE DATABASE.
Satu instans PolarDB-X dapat berisi database dalam kedua mode tersebut.
Catatan penggunaan
Tentukan
MODE='AUTO'dalam pernyataanCREATE DATABASEuntuk membuat database dalam AUTO mode.Jika parameter
MODEdihilangkan, database dalam DRDS mode akan dibuat.Setelah database dibuat, mode-nya tidak dapat diubah.
Database AUTO mode tidak dapat dibuat di kluster PolarDB-X edisi standar.
Di database AUTO mode, gunakan hanya sintaksis partisi MySQL standar—sintaksis sharding DRDS tidak didukung.
Di database DRDS mode, gunakan hanya sintaksis sharding DRDS—sintaksis partisi MySQL tidak didukung.
Membuat database
Gunakan parameter MODE untuk mengatur mode database saat pembuatan.
MODE nilai | Database Mode | Default? | Sintaksis tabel |
|---|---|---|---|
'AUTO' | AUTO mode | Tidak | MySQL standar CREATE TABLE; membuat tabel partisi |
'DRDS' | DRDS mode | Ya | Sintaksis sharding PolarDB-X; membuat tabel sharded |
AUTO mode:
CREATE DATABASE auto_db MODE='AUTO';Tabel yang dibuat di database ini merupakan tabel partisi. Lihat CREATE TABLE (AUTO mode) dan CREATE DATABASE.
DRDS mode:
-- Kedua bentuk berikut membuat database dalam mode DRDS
CREATE DATABASE drds_db MODE='DRDS';
CREATE DATABASE drds_db;Tabel yang dibuat di database ini merupakan tabel sharded. Lihat CREATE TABLE (DRDS mode) dan CREATE DATABASE.
Tabel partisi dalam AUTO mode
AUTO mode mendukung partisi otomatis maupun manual.
Partisi otomatis
Jalankan pernyataan CREATE TABLE standar tanpa menentukan klausa partisi apa pun. PolarDB-X akan memilih kunci partisi dan melakukan partisi horizontal terhadap tabel beserta indeksnya.
CREATE TABLE tb (a INT, b INT, PRIMARY KEY(a));Dalam AUTO mode, PolarDB-X secara otomatis mempartisi tabel ini berdasarkan primary key:
SHOW FULL CREATE TABLE tb\G
*************************** 1. row ***************************
TABLE: tb
CREATE TABLE: CREATE PARTITION TABLE `tb` (
`a` int(11) NOT NULL,
`b` int(11) DEFAULT NULL,
PRIMARY KEY (`a`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY KEY(`a`)
PARTITIONS 16
1 row in set (0.01 sec)Pernyataan yang sama pada database mode DRDS akan membuat tabel non-partisi.
Partisi manual
Tentukan kunci partisi dan kebijakan secara eksplisit. AUTO mode mendukung partisi hash, key, range, range columns, list, dan list columns—menggunakan sintaksis MySQL standar.
-- Partisi hash dengan 4 partisi
CREATE TABLE tb (a INT, b INT, PRIMARY KEY(a))
PARTITION BY HASH(a) PARTITIONS 4;Tabel sharded dalam DRDS mode
DRDS mode menggunakan sintaksis sharding khusus PolarDB-X dengan DBPARTITION BY dan TBPARTITION BY. Hanya sharding berbasis hash yang didukung.
CREATE TABLE tb (a INT, b INT, PRIMARY KEY(a))
DBPARTITION BY HASH(a)
TBPARTITION BY HASH(a)
TBPARTITIONS 4;Algoritma perutean
Perbedaan utama antara kedua mode ini terletak pada cara data dirutekan ke partisi.
AUTO mode: consistent hashing
AUTO mode menggunakan algoritma consistent hashing berbasis rentang.
Keunggulan:
Mendukung pemisahan, penggabungan, dan migrasi partisi tanpa perlu menghitung ulang semua nilai hash.
Memungkinkan pemisahan data panas (hot data splitting): partisi yang sering diakses dapat dibagi menjadi beberapa partisi dan didistribusikan ulang ke node data.
Pemangkasan partisi (partition pruning) berfungsi pada kondisi awalan (prefix), ekspresi perhitungan (
pk = POW(2, 4)), dan perbandingan yang memperhatikan aturan pengurutan (collation-aware).Pushdown operasi join tetap dipertahankan selama pemisahan, penggabungan, dan migrasi partisi.
Keterbatasan:
Algoritma consistent hashing lebih kompleks secara komputasi dibandingkan modulo hashing, yang dapat sedikit mengurangi throughput pada beban kerja point-select. Dalam praktiknya, permintaan per detik (QPS) sebanding dengan mode DRDS untuk kueri
oltp_point_select(lihat Benchmark performa).
DRDS mode: modulo hashing
DRDS mode merutekan data menggunakan operasi modulo terhadap nilai hash berdasarkan jumlah shard tabel fisik.
Keunggulan:
Algoritma perutean sederhana dengan overhead rendah.
Keterbatasan:
Mengubah jumlah shard memerlukan penghitungan ulang nilai hash untuk seluruh data. Misalnya, penskalaan dari 4 ke 5 shard memicu rehash data penuh.
Tidak ada pemisahan partisi untuk data panas—shard yang sering diakses tidak dapat dibagi lebih lanjut.
Partisi range dan list tidak didukung.
Perbandingan fitur
AUTO mode menambahkan banyak kemampuan signifikan dibandingkan DRDS mode. Tabel berikut mencakup seluruh fitur yang tersedia.
Tip: Jika Anda hanya ingin tahu mode mana yang harus digunakan, lihat FAQ.
| Fitur | AUTO mode | DRDS mode |
|---|---|---|
| Partisi | ||
| Partisi otomatis (tidak memerlukan kunci partisi) | Didukung | Tidak didukung |
| Partisi hash dan key | Didukung (consistent hashing) | Didukung (modulo) |
| Partisi range dan range columns | Didukung | Tidak didukung |
| Partisi list dan list columns | Didukung | Tidak didukung |
| Kunci partisi vektor (beberapa kolom sebagai kunci partisi) | Didukung | Tidak didukung |
| Aturan pengurutan kunci partisi (partition key collation) | Didukung | Tidak didukung |
| Tabel non-partisi dan tabel broadcast | Didukung | Didukung |
| Distribusi | ||
| Distribusi transparan (partisi berdasarkan primary key default) | Didukung | Tidak didukung |
| Indeks sekunder global default (GSIs) | Didukung — tabel indeks dipartisi otomatis berdasarkan kolom kunci indeks | Tidak didukung |
| Penyeimbangan beban (load balancing) | Didukung | Tidak didukung |
| Distribusi data panas (hot data distribution) | Didukung | Tidak didukung |
| Manajemen partisi | ||
| Pembuatan, penghapusan, dan modifikasi partisi | Didukung | Tidak didukung |
| Pemisahan dan penggabungan partisi | Didukung | Tidak didukung |
| Migrasi partisi | Didukung | Tidak didukung |
| Pemangkasan partisi (partition truncation) | Didukung | Tidak didukung |
| Analisis partisi data panas | Segera hadir | Tidak didukung |
| Modifikasi tabel | ||
| Perubahan jenis tabel (non-partisi, broadcast, atau partisi) | Didukung | Didukung |
| Modifikasi partisi (jumlah, jenis kunci, kebijakan) | Didukung | Didukung |
| Skalabilitas otomatis | ||
| Gangguan penulisan selama penskalaan | Tanpa gangguan | Gangguan singkat |
| Operasi DDL lain selama penskalaan | Diizinkan | Tidak diizinkan |
| Kompatibel dengan skalabilitas otomatis | Ya | Tidak |
| Lokalitas | ||
| Isolasi penyimpanan statis (database, tabel, partisi) | Didukung | Didukung (hanya database dan tabel) |
| Isolasi penyimpanan dinamis | Didukung | Tidak didukung |
| Pemangkasan partisi | ||
Pemangkasan berbasis awalan (misalnya, PARTITION BY KEY(a,b,c) dengan a=100) | Didukung | Tidak didukung |
Constant folding dalam ekspresi (misalnya, pk = POW(2, 4)) | Didukung | Tidak didukung — kunci partisi harus berupa konstanta |
| Penanganan case sensitivity dan spasi akhir yang memperhatikan aturan pengurutan (collation-aware) | Didukung | Tidak didukung |
| Lainnya | ||
| Pushdown operasi join | Didukung (dipertahankan selama split/merge/migrasi) | Didukung |
Pemilihan partisi (SELECT * FROM tb PARTITION (p1)) | Didukung | Tidak didukung |
| Time to live (TTL) | Didukung | Tidak didukung |
AUTO_INCREMENT | Unik secara global, meningkat secara monoton, dan berurutan | Unik secara global; mungkin tidak meningkat secara monoton atau berurutan |
Benchmark performa
Uji benchmark Sysbench yang membandingkan AUTO mode (tabel partisi) dan DRDS mode (tabel sharded) pada skala yang sama.
Test environment:
Jenis instans:
polarx.x4.2xlarge.2eNode komputasi (CN): 16C64G × 2
Node data (DN): 16C64G × 2
Versi: 5.4.13-16415631
Data pengujian:
| Pengaturan | AUTO mode (partisi) | DRDS mode (sharded) |
|---|---|---|
| Jumlah partisi / shard | 32 partisi | 32 shard tabel fisik |
| Klausa partisi | PARTITION BY HASH(id) PARTITIONS 32 | DBPARTITION BY HASH(id) TBPARTITION BY HASH(id) TBPARTITION 2 |
| Volume data | 160 juta baris | 160 juta baris |
Test scenarios:
oltp_point_select— pembacaan titik berbasis kondisi kesetaraan menggunakan kunci partisioltp_read_only— pembacaan titik dan pembacaan rentang kecil dalam transaksi menggunakan kunci partisioltp_read_write— pembacaan dan penulisan titik serta rentang kecil menggunakan kunci partisi
Hasil:
oltp_point_select: QPS untuk tabel partisi sebanding dengan tabel sharded. Algoritma consistent hashing memang lebih kompleks daripada modulo hashing, tetapi perbedaannya dapat diabaikan untuk pencarian titik (point lookups).oltp_read_onlydanoltp_read_write: QPS untuk tabel partisi sekitar 33% lebih tinggi daripada tabel sharded karena pemangkasan partisi (partition pruning) dipicu untuk kueri rentang kecil.
FAQ
Kapan saya harus menggunakan AUTO mode dibandingkan DRDS mode?
Gunakan AUTO mode. Fitur ini tersedia di PolarDB-X V5.4.13 dan versi setelahnya serta mendukung semua fitur database terdistribusi modern. Jika aplikasi Anda dimigrasikan dari PolarDB-X 1.0, AUTO mode adalah satu-satunya mode target yang didukung.
Haruskah saya menggunakan partisi otomatis atau manual dalam AUTO mode?
Mulailah dengan partisi otomatis—fitur ini bekerja dengan sintaksis CREATE TABLE standar dan tidak memerlukan perencanaan partisi di awal. Setelah Anda memiliki pola kueri aktual, jalankan ALTER PARTITION untuk menyesuaikan kunci dan jumlah partisi jika diperlukan. Beralihlah ke partisi manual sejak awal hanya jika Anda sudah mengetahui pola akses SQL dan relasi join untuk tabel Anda.
Berapa jumlah partisi yang dibuat oleh partisi otomatis?
Jumlah partisi default dihitung sebagai: number of nodes specified at instance creation × 8. Untuk instans 2-node, partisi otomatis membuat 16 partisi. Jumlah ini tidak berubah meskipun Anda menambahkan node nanti.
Untuk mengubah nilai default untuk tabel baru, ubah parameter AUTO_PARTITION_PARTITIONS. Perubahan ini berlaku untuk semua tabel baru di instans tersebut. Tabel yang sudah ada tidak berubah.
Jika tabel baru dibuat dengan jumlah partisi berbeda dari tabel yang sudah ada, operasi join di antara keduanya tidak dapat dipushdown, sehingga mengurangi performa kueri. Tetapkan jumlah partisi secara konsisten di seluruh tabel yang saling terkait.
Bisakah saya mengubah jumlah partisi tabel partisi otomatis yang sudah ada?
Bisa. Untuk mengubah jumlah partisi untuk tabel partisi otomatis baru, ubah parameter AUTO_PARTITION_PARTITIONS untuk instans tersebut. Perubahan ini berlaku untuk semua tabel baru yang dibuat setelah modifikasi. Lihat Gunakan ALTER TABLE untuk memodifikasi partisi tabel (AUTO mode).
How do I convert a DRDS mode database to AUTO mode?
Pilih berdasarkan versi PolarDB-X Anda. Periksa versi Anda terlebih dahulu: lihat Melihat versi instans.
V5.4.16 dan versi setelahnya (direkomendasikan): Gunakan
CREATE DATABASE LIKEatauCREATE DATABASE ASuntuk mengonversi database. Lihat Mengonversi database dalam mode DRDS menjadi database dalam mode AUTO.Semua versi — migrasi DTS: Buat database dan tabel dalam mode AUTO di instans target, lalu gunakan Data Transmission Service (DTS) untuk memigrasikan data dari sumber mode DRDS.
Semua versi — dump dan restore: Gunakan
mysqldumpuntuk mengekspor data dari database mode DRDS (tanpa menyertakan pernyataanCREATE TABLE). Buat database mode AUTO dengan skema target, lalu impor dump tersebut menggunakan perintahsource.