All Products
Search
Document Center

PolarDB:YYYYDD

Last Updated:Mar 29, 2026

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
VariableDescription
YYYYBagian tahun dari nilai kunci shard
DDHari dalam tahun (1–366)
DJumlah 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

ConstraintDetail
Tipe kunci shardHarus bertipe DATE, DATETIME, atau TIMESTAMP
Jumlah shardHarus ditentukan sebelum menggunakan fungsi ini, berdasarkan siklus tertentu (misalnya dua tahun)
Pergantian siklusKetika 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 minimumVersi 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):

  1. Pilih panjang siklus. Satu tahun memiliki hingga 366 hari, sehingga siklus dua tahun memerlukan paling banyak 732 shard tabel (366 × 2).

  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 46

Tetapkan 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.