YYYYMM adalah fungsi partisi PolarDB-X 1.0 yang mendistribusikan data ke shard database dan shard tabel berdasarkan tahun serta bulan dari kolom bertipe tanggal.
Cara kerja
YYYYMM menghitung nilai hash berdasarkan tahun dan bulan kunci partisi, lalu mendistribusikan catatan ke shard database menggunakan aritmetika modulo:
hash value = (year × 12 + month) % Ddi mana D adalah jumlah shard database.
Sebagai contoh, YYYYMM('2012-12-31 12:12:12') dievaluasi menjadi (2012 × 12 + 12) % D, sehingga catatan tersebut diarahkan ke shard yang sesuai dengan Desember 2012.
Batasan
Kunci partisi harus bertipe
DATE,DATETIME, atauTIMESTAMP.Tentukan jumlah total shard tabel fisik sebelum membuat tabel, berdasarkan panjang siklus (misalnya, 2 tahun).
YYYYMMmengalokasikan satu shard tabel per bulan dalam siklus tersebut.Setelah siklus selesai, bulan-bulan akan berulang dan data diarahkan ke shard yang sama seperti pada siklus sebelumnya. Sebagai contoh, dengan siklus dua tahun yang dimulai pada Maret 2012, data dari Maret 2014 diarahkan ke shard tabel yang sama dengan data dari Maret 2012. Shard tabel spesifik tempat data diarahkan bergantung pada jumlah shard tabel.
Memerlukan versi PolarDB-X 1.0 5.1.28-1320920 atau lebih baru.
Buat tabel yang dipartisi berdasarkan YYYYMM
Contoh berikut membuat tabel yang mendistribusikan data berdasarkan tahun dan bulan ke 8 shard database, dengan satu shard tabel per bulan selama siklus dua tahun.
Perencanaan shard:
| Faktor | Nilai | Perhitungan |
|---|---|---|
| Panjang siklus | 2 tahun | — |
| Jumlah shard tabel yang dibutuhkan | 24 | 12 bulan × 2 tahun |
| Shard database | 8 | — |
| Shard tabel per shard database | 3 | 24 ÷ 8 |
Gunakan tbpartitions 3 untuk membuat 3 shard tabel per shard database.
create table test_yyyymm_tb (
id int,
name varchar(30) DEFAULT NULL,
create_time datetime DEFAULT NULL,
primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
dbpartition by YYYYMM(create_time)
tbpartition by YYYYMM(create_time) tbpartitions 3;Kueri yang melakukan filter berdasarkan create_time diarahkan langsung ke shard tabel target dalam shard database-nya, sehingga menghindari pemindaian seluruh tabel.
Kasus penggunaan
YYYYMM cocok untuk set data yang catatannya secara alami dikelompokkan berdasarkan bulan kalender—misalnya, catatan pesanan, tabel log, atau data penagihan. Gunakan dbpartition by YYYYMM(ShardKey) bersama dengan tbpartition by YYYYMM(ShardKey) untuk mendistribusikan data baik di tingkat shard database maupun shard tabel, serta memungkinkan pengarahan kueri berbasis bulan secara tepat ke satu shard saja.