All Products
Search
Document Center

PolarDB:YYYYMM

Last Updated:Mar 29, 2026

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) % D

di 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, atau TIMESTAMP.

  • Tentukan jumlah total shard tabel fisik sebelum membuat tabel, berdasarkan panjang siklus (misalnya, 2 tahun). YYYYMM mengalokasikan 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:

FaktorNilaiPerhitungan
Panjang siklus2 tahun—
Jumlah shard tabel yang dibutuhkan2412 bulan × 2 tahun
Shard database8—
Shard tabel per shard database324 ÷ 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.