YYYYWEEK mem-partisi data ke dalam shard database dan shard tabel berdasarkan tahun serta nomor minggu ISO dari kolom DATE, DATETIME, atau TIMESTAMP.
Cara kerja
YYYYWEEK mengekstraksi tahun dan nomor minggu ISO dari nilai kunci shard, lalu menghitung (year × 54 + ISO_week_number) % D, dengan D sebagai jumlah shard database. Hasil perhitungan tersebut menentukan shard tempat baris data ditempatkan.
Minggu yang melintasi batas tahun: Penomoran minggu ISO dapat menetapkan beberapa hari terakhir bulan Desember sebagai minggu pertama tahun berikutnya. Sebagai contoh, 31 Desember 2012 termasuk dalam minggu ISO 1 tahun 2013, sehingga YYYYWEEK('2012-12-31 12:12:12') dievaluasi sebagai (2013 × 54 + 1) % D, bukan (2012 × 54 + 52) % D.
Penggunaan ulang data setelah siklus berakhir: Ketika suatu minggu muncul kembali setelah siklus yang ditentukan selesai, data tersebut mungkin diarahkan ke shard yang sama dengan data dari minggu yang sama sebelumnya. Misalnya, dengan siklus dua tahun yang dimulai pada minggu 1 tahun 2012, data dari minggu 1 tahun 2014 mungkin ditempatkan di shard yang sama dengan data dari minggu 1 tahun 2012. Shard tepatnya bergantung pada jumlah total shard tabel.
Kapan menggunakan YYYYWEEK
Gunakan YYYYWEEK ketika:
Kueri Anda melakukan filter atau agregasi data berdasarkan tahun dan minggu—misalnya, laporan penjualan mingguan atau jumlah pengguna aktif mingguan.
Data mencakup beberapa tahun dan penyelarasan minggu lintas tahun penting.
WEEKmengatur ulang nomor minggu setiap tahun, sedangkanYYYYWEEKmempertahankan konteks tahun.Anda memerlukan granularitas mingguan dalam rentang multi-tahun. Gunakan
YYYYMMuntuk granularitas bulanan atauYYYYWEEKuntuk granularitas mingguan.
Pasangkan YYYYWEEK dengan tbpartition by YYYYWEEK(ShardKey) untuk mengarahkan baik shard database maupun shard tabel menggunakan kunci yang sama. Hal ini memungkinkan pencarian shard langsung untuk kueri yang menyertakan kunci partisi.
Batasan
Kunci partisi harus bertipe DATE, DATETIME, atau TIMESTAMP.
YYYYWEEKmembuat satu shard tabel per minggu dalam siklus yang ditentukan. Hitung jumlah total shard tabel sebelum membuat tabel.Versi instans PolarDB-X 1.0 harus 5.1.28-1320920 atau lebih baru.
Buat tabel dengan YYYYWEEK
Langkah 1: Hitung jumlah shard tabel yang diperlukan
Tentukan panjang siklus, lalu hitung:
Total shard tabel = jumlah minggu per tahun × panjang siklus dalam tahun. Satu tahun memiliki hingga 53 minggu ISO, sehingga siklus dua tahun memerlukan 53 × 2 = 106 shard tabel.
Shard tabel per shard database = total shard tabel ÷ jumlah shard database, dibulatkan ke atas ke bilangan bulat terdekat. Jika memungkinkan, pertahankan nilai ini sebagai kelipatan bulat dari jumlah shard database.
Contoh: Dengan 8 shard database dan siklus dua tahun:
Total shard tabel: 53 × 2 = 106
Shard tabel per shard database: 106 ÷ 8 = 13,25, dibulatkan ke atas menjadi 14
Langkah 2: Buat tabel
Gunakan pernyataan Data Definition Language (DDL) dengan dbpartition by YYYYWEEK dan tbpartition by YYYYWEEK. Atur tbpartitions ke nilai yang dihitung pada Langkah 1.
Contoh berikut membuat tabel dengan 8 shard database dan 14 shard tabel per shard database, mencakup siklus dua tahun:
create table test_yyyyweek_tb (
id int,
name varchar(30) DEFAULT NULL,
create_time datetime DEFAULT NULL,
primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
dbpartition by YYYYWEEK(create_time)
tbpartition by YYYYWEEK(create_time) tbpartitions 14;