MMDD mempartisi tabel besar menjadi shard tabel berdasarkan hari kalender di PolarDB-X 1.0. Subskrip nama setiap shard tabel dipetakan ke hari tertentu yang diidentifikasi oleh dua digit bulan dan dua digit hari (format MMDD).
Cara kerja
MMDD menurunkan subskrip shard tabel dari bagian bulan dan hari pada nilai kunci partisi. Baris dengan create_time bernilai 2024-03-15 dipetakan ke shard tabel 0315, sehingga ditempatkan di shard yang merepresentasikan tanggal 15 Maret.
Karena MMDD melakukan routing berdasarkan hari dalam tahun, setiap shard database menyimpan paling banyak 366 shard tabel—satu untuk setiap hari kalender yang mungkin.
Batasan
| Constraint | Detail |
|---|---|
| Tipe data yang didukung | DATE, DATETIME, atau TIMESTAMP |
| Cakupan sharding | Hanya untuk shard tabel — tidak dapat digunakan untuk sharding database |
| Jumlah maksimum shard tabel per shard database | 366 (satu per hari kalender; satu tahun memiliki paling banyak 366 hari) |
| Versi minimum | Instans PolarDB-X 1.0 versi 5.1.28-1320920 atau lebih baru |
Kasus penggunaan
Gunakan MMDD ketika Anda perlu mempartisi tabel besar berdasarkan hari dalam tahun dan pola kueri Anda sesuai dengan hari kalender tertentu. Subskrip shard tabel secara langsung merepresentasikan hari kalender, sehingga menjadikan kueri rentang berbasis hari lebih efisien.
MMDD tidak cocok untuk:
Sharding database —
MMDDhanya berlaku untuk shard tabel.Distribusi data merata tanpa mempertimbangkan tanggal — jika volume data Anda sangat bervariasi berdasarkan hari (misalnya, traffic tinggi pada hari kerja dan rendah pada akhir pekan),
MMDDakan menghasilkan shard dengan ukuran tidak merata. Gunakan fungsi berbasis hash untuk distribusi yang seragam.
Membuat tabel dengan sharding MMDD
Contoh Data Definition Language (DDL) berikut mempartisi data ke dalam shard database berdasarkan nama pengguna (hash) dan ke dalam shard tabel berdasarkan hari kalender menggunakan MMDD pada kolom create_time.
CREATE TABLE test_mmdd_tb (
id INT,
name VARCHAR(30) DEFAULT NULL,
create_time DATETIME DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8
dbpartition BY HASH(name)
tbpartition BY MMDD(create_time) tbpartitions 366;
-- 366 tbpartitions: satu per hari kalender yang mungkin (satu tahun memiliki paling banyak 366 hari)Parameter utama:
| Parameter | Nilai | Deskripsi |
|---|---|---|
dbpartition by | HASH(name) | Mendistribusikan baris ke seluruh shard database dengan melakukan hashing pada kolom name |
tbpartition by | MMDD(create_time) | Mengarahkan setiap baris ke shard tabel berdasarkan bulan dan hari dari create_time |
tbpartitions | 366 | Jumlah shard tabel per shard database — diatur ke 366 untuk mencakup setiap hari kalender dalam setahun |