PolarDB-X 1.0 mendukung sharding database dan sharding tabel. Setiap konfigurasi sharding didefinisikan oleh dua komponen: sharding function (yang menentukan jumlah shard dan algoritma perutean) dan shard key (kolom tabel beserta tipe data MySQL-nya).
Cara kerja sharding
Ketika fungsi sharding dan shard key yang sama digunakan baik untuk sharding database maupun sharding tabel, PolarDB-X 1.0 menganggapnya sebagai metode sharding yang sama. Dengan metode sharding yang konsisten ini, PolarDB-X 1.0 dapat mengarahkan kueri secara langsung ke satu shard database fisik dan satu shard tabel fisik berdasarkan nilai shard key.
Jika metode sharding yang berbeda digunakan untuk sharding database dan sharding tabel pada tabel logis yang sama, serta pernyataan SQL tidak mencakup kondisi untuk salah satu dimensi tersebut, PolarDB-X 1.0 melakukan pemindaian terhadap semua shard database atau semua shard tabel untuk mengambil data.
Fungsi sharding
PolarDB-X 1.0 menyediakan 12 fungsi sharding dalam dua kategori:
Berbasis hash (untuk shard key numerik atau string): gunakan
HASH,UNI_HASH, atauRANGE_HASHuntuk mendistribusikan data secara merata di seluruh shard; gunakanSTR_HASHkhusus untuk kunci berbasis string; dan gunakanRIGHT_SHIFTuntuk kunci integer di mana bit orde rendah mengandung sebagian besar variasi.Berbasis waktu (untuk shard key bertipe DATE/DATETIME/TIMESTAMP): gunakan
MM,DD,WEEK, atauMMDDuntuk sharding hanya pada level tabel berdasarkan satuan kalender; gunakanYYYYMM,YYYYWEEK, atauYYYYDDjika Anda juga memerlukan sharding pada level database berdasarkan waktu.
Tabel berikut menampilkan setiap fungsi, dukungan sharding database dan tabelnya, serta tipe data shard key yang kompatibel.
| Sharding function | Deskripsi | Sharding basis data | Tabel sharding | INT / BIGINT / MEDIUMINT / SMALLINT / TINYINT | VARCHAR / CHAR | DATE / DATETIME / TIMESTAMP |
|---|---|---|---|---|---|---|
| HASH | Operasi modulo | Ya | Ya | √ | √ | × |
| UNI_HASH | Operasi modulo | Ya | Ya | √ | √ | × |
| STR_HASH | Mengembalikan substring | Ya | Ya | × | √ | × |
| RIGHT_SHIFT | Signed right shift pada nilai shard key database | Ya | Ya | √ | × | × |
| RANGE_HASH | Hash ketika diperlukan dua shard key | Ya | Ya | √ | √ | × |
| MM | Hash berdasarkan bulan | Tidak | Ya | × | × | √ |
| DD | Hash berdasarkan tanggal | Tidak | Ya | × | × | √ |
| WEEK | Hash berdasarkan minggu | Tidak | Ya | × | × | √ |
| MMDD | Hash berdasarkan bulan dan tanggal | Tidak | Ya | × | × | √ |
| YYYYMM | Hash berdasarkan tahun dan bulan | Ya | Ya | × | × | √ |
| YYYYWEEK | Hash berdasarkan tahun dan minggu | Ya | Ya | × | × | √ |
| YYYYDD | Hash berdasarkan tahun dan tanggal | Ya | Ya | × | × | √ |
Global secondary indexes
PolarDB-X 1.0 mendukung global secondary indexes (GSIs). Setiap GSI berkorespondensi dengan tabel logis yang menyimpan data indeks, yang disebut tabel indeks.
Saat membuat GSI, tentukan metode sharding untuk tabel indeks tersebut. Tabel indeks mendukung fungsi sharding yang sama seperti tabel logis biasa. Untuk detailnya, lihat Use global secondary indexes.
Sintaksis fungsi sharding
PolarDB-X 1.0 kompatibel dengan pernyataan bahasa definisi data (DDL) MySQL CREATE TABLE dan memperluasnya dengan klausa drds_partition_options untuk konfigurasi sharding.
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[drds_partition_options]
[partition_options]
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
[table_options]
[drds_partition_options]
[partition_options]
select_statement
drds_partition_options:
DBPARTITION BY
{ {HASH|YYYYMM|YYYYWEEK|YYYYDD|...}([column])}
[TBPARTITION BY
{ {HASH|MM|DD|WEEK|MMDD|YYYYMM|YYYYWEEK|YYYYDD|...}(column)}
[TBPARTITIONS num]
]Gunakan DBPARTITION BY untuk mengonfigurasi sharding database, dan TBPARTITION BY bersama dengan TBPARTITIONS num untuk mengonfigurasi sharding tabel.