YYYYDD adalah fungsi sharding berbasis tanggal untuk PolarDB-X 1.0 yang mengarahkan baris ke shard database berdasarkan tahun dan hari dalam tahun (day-of-year) yang diekstraksi dari kunci shard bertipe tanggal atau waktu.
Cara kerja
YYYYDD menghitung indeks shard dari nilai tanggal atau waktu menggunakan rumus berikut:
(YYYY × 366 + DD) % D| Variable | Description |
|---|---|
YYYY | Bagian tahun dari nilai kunci shard |
DD | Hari dalam tahun (1–366) |
D | Jumlah total shard database |
Sisa bagi menentukan shard database tempat baris tersebut disimpan.
Contoh: Untuk 2012-12-31 12:12:12, 31 Desember merupakan hari ke-366 tahun 2012. Indeks shard-nya adalah (2012 × 366 + 366) % D.
Batasan
| Constraint | Detail |
|---|---|
| Tipe kunci shard | Harus bertipe DATE, DATETIME, atau TIMESTAMP |
| Jumlah shard | Harus ditentukan sebelum menggunakan fungsi ini, berdasarkan siklus tertentu (misalnya dua tahun) |
| Pergantian siklus | Ketika suatu tanggal muncul kembali di siklus berikutnya, baris tersebut mungkin ditempatkan di shard yang sama dengan baris dari tanggal yang sama pada siklus sebelumnya. Misalnya, dalam siklus dua tahun yang dimulai 1 Maret 2012, baris untuk 1 Maret 2014 dapat diarahkan ke shard yang sama dengan baris untuk 1 Maret 2012. Shard tepatnya bergantung pada jumlah total shard tabel. |
| Versi minimum | Versi instans PolarDB-X 1.0 5.1.28-1320920 atau lebih baru |
Kasus penggunaan
YYYYDD cocok untuk beban kerja yang mempartisi data berdasarkan tahun dan hari dalam tahun—misalnya, log time-series atau catatan event yang difilter berdasarkan tanggal tertentu. Gunakan bersama tbpartition by YYYYDD(ShardKey) agar baris dari hari yang sama ditempatkan dalam satu shard tabel fisik yang sama, sehingga kueri dengan predikat kunci shard hanya menargetkan satu shard tanpa melakukan pemindaian terhadap shard lainnya.
Buat tabel ter-shard
Contoh berikut membuat tabel yang dipartisi berdasarkan create_time, mencakup siklus dua tahun.
Hitung jumlah shard tabel
Tentukan jumlah total shard tabel fisik sebelum menulis pernyataan Data Definition Language (DDL):
Pilih panjang siklus. Satu tahun memiliki hingga 366 hari, sehingga siklus dua tahun memerlukan paling banyak 732 shard tabel (366 × 2).
Bagi jumlah tersebut dengan jumlah shard database, lalu bulatkan ke atas ke bilangan bulat terdekat.
Dalam contoh ini, instans PolarDB-X 1.0 memiliki dua node dengan masing-masing delapan shard database, sehingga totalnya 16 shard database:
732 ÷ 16 = 45,75 → bulatkan ke atas menjadi 46Tetapkan jumlah shard tabel menjadi 46.
Untuk performa terbaik, pilih jumlah shard tabel yang merupakan kelipatan bulat dari jumlah shard database.
Pernyataan DDL
CREATE TABLE test_yyyydd_tb (
id INT,
name VARCHAR(30) DEFAULT NULL,
create_time DATETIME DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8
dbpartition BY YYYYDD(create_time)
tbpartition BY YYYYDD(create_time) TBPARTITIONS 46;Kueri yang menyertakan create_time dalam klausa WHERE akan diarahkan langsung ke shard tabel fisik yang sesuai tanpa memindai shard lainnya.