Fungsi MM mempartisi data tabel berdasarkan bulan dalam setahun. Setiap shard tabel dipetakan ke satu bulan kalender, sehingga penghapusan atau pengarsipan data untuk satu bulan hanya memerlukan operasi pada satu shard, bukan pemindaian dan penghapusan seluruh tabel.
Cara kerja
MM mengekstrak nilai bulan (1–12) dari nilai waktu pada kunci shard dan menggunakan nilai tersebut sebagai subskrip shard tabel. Baris dengan create_time di bulan Januari diarahkan ke shard 1, baris di bulan Februari diarahkan ke shard 2, dan seterusnya.
Kapan menggunakan MM
Gunakan MM ketika pola kueri Anda sejalan dengan bulan kalender:
Siklus penagihan bulanan — Hasilkan atau arsipkan faktur bulanan dengan melakukan operasi pada shard yang sesuai.
Laporan bulanan — Lakukan kueri hanya pada satu shard, bukan memindai seluruh tabel.
Arsip atau pembersihan data bulanan — Hapus seluruh shard untuk satu bulan melalui satu operasi DDL, yang lebih cepat daripada operasi
DELETEtingkat baris.
Hindari penggunaan MM jika pola akses Anda mencakup beberapa bulan sekaligus atau tidak berbasis waktu. Dalam kasus tersebut, fungsi sharding berbasis hash atau berbasis rentang lebih tepat digunakan.
Batasan
| Batasan | Detail |
|---|---|
| Tipe kunci partisi yang didukung | DATE, DATETIME, TIMESTAMP |
| Cakupan | Sharding tabel (tbpartition) saja — bukan sharding database (dbpartition) |
| Jumlah maksimum shard tabel per shard database | 12 (satu untuk setiap bulan) |
| Versi minimum PolarDB-X 1.0 | 5.1.28-1320920 |
Contoh
Pernyataan Data Definition Language (DDL) berikut membuat tabel yang di-shard berdasarkan ID pengguna di tingkat database dan berdasarkan bulan di tingkat tabel. Dengan tbpartitions 12, PolarDB-X 1.0 membuat satu shard tabel untuk setiap bulan kalender.
CREATE TABLE test_mm_tb (
id INT,
name VARCHAR(30) DEFAULT NULL,
create_time DATETIME DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8
dbpartition BY HASH(id)
tbpartition BY MM(create_time) tbpartitions 12;