Partisi Rentang, Daftar, dan Hash
Pilih strategi partisi yang tepat: rentang untuk deret waktu, daftar untuk penyewa, dan hash untuk distribusi merata
Partisi Rentang, Daftar, dan Hash adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Pemartisian Berdasarkan Rentang
Setiap partisi mencakup rentang nilai yang berkelanjutan. Paling umum digunakan untuk rangkaian waktu:
CREATE TABLE events (
id BIGSERIAL,
ts TIMESTAMPTZ NOT NULL,
data JSONB
) PARTITION BY RANGE (ts);
CREATE TABLE events_2024_q1 PARTITION OF events
FOR VALUES FROM ('2024-01-01') TO ('2024-04-01');
CREATE TABLE events_2024_q2 PARTITION OF events
FOR VALUES FROM ('2024-04-01') TO ('2024-07-01');Batas Rentang Bersifat Setengah Terbuka
FROM bersifat inklusif, sedangkan TO bersifat eksklusif. Batas-batasnya tersusun rapi — tanpa tumpang tindih dan tanpa celah.
Pemartisian Berdasarkan Daftar
Setiap partisi menyimpan nilai tertentu:
CREATE TABLE customers (
id BIGSERIAL,
country TEXT NOT NULL,
name TEXT
) PARTITION BY LIST (country);
CREATE TABLE customers_us PARTITION OF customers FOR VALUES IN ('US');
CREATE TABLE customers_eu PARTITION OF customers FOR VALUES IN ('DE','FR','IT','ES','NL');
CREATE TABLE customers_other PARTITION OF customers DEFAULT;Partisi DEFAULT
Menangkap baris yang tidak cocok dengan partisi lain. Tanpa partisi ini, INSERT untuk baris yang tidak cocok akan gagal.
Pemartisian Berdasarkan Hash
Baris didistribusikan dengan melakukan hashing terhadap kunci partisi. Cocok ketika Anda menginginkan distribusi yang merata, tetapi tidak memiliki rentang atau daftar alami:
CREATE TABLE sessions (
id UUID,
user_id BIGINT,
data JSONB
) PARTITION BY HASH (user_id);
CREATE TABLE sessions_0 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 0);
CREATE TABLE sessions_1 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 1);
CREATE TABLE sessions_2 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 2);
CREATE TABLE sessions_3 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 3);Memilih Strategi
- Rentang — rangkaian waktu dan ID yang terus bertambah
- Daftar — penyewa, negara, dan tingkat yang sering digunakan
- Hash — ketika tidak ada kemencengan alami dan Anda hanya menginginkan paralelisme
Subpemartisian
Partisi dapat dipartisi lagi secara bertingkat:
CREATE TABLE events_2024 PARTITION OF events
FOR VALUES FROM ('2024-01-01') TO ('2025-01-01')
PARTITION BY HASH (user_id);
-- 2024 is a yearly range partition, internally hashed by user_id.Indeks pada Tabel yang Dipartisi
Indeks pada tabel induk secara otomatis diterapkan ke semua partisi. Batasan UNIQUE harus menyertakan kunci partisi:
CREATE INDEX events_user_idx ON events (user_id);
-- Creates one index per partition automatically.
ALTER TABLE events ADD CONSTRAINT events_uniq UNIQUE (id, ts);
-- ts must be in the constraint because it's the partition key.Kunci Utama dan Partisi
PRIMARY KEY dari tabel yang dipartisi harus menyertakan kolom partisi. Ini adalah batasan mendasar dari pemartisian deklaratif.
Menambahkan dan Menghapus Partisi
Operasi yang murah:
CREATE TABLE events_2024_q3 PARTITION OF events
FOR VALUES FROM ('2024-07-01') TO ('2024-10-01');
DROP TABLE events_2023_q1;
-- Instant; equivalent to deleting all old data.Pembuatan Partisi Otomatis
Postgres tidak membuat partisi mendatang secara otomatis. Solusi yang umum:
- Ekstensi pg_partman — partisi bulanan yang dikelola
- Pekerjaan terjadwal yang membuat partisi berikutnya dengan CREATE
Kunci Asing
FK ke tabel yang dipartisi memerlukan PG 12+. FK FROM tabel yang dipartisi ke tabel biasa berfungsi seperti biasa.
Rangkuman
Tiga strategi pemartisian mencakup sebagian besar kasus.
- Rentang untuk waktu atau urutan
- Daftar untuk himpunan diskret
- Hash untuk distribusi yang merata
- PK harus menyertakan kolom partisi
Pemeriksaan Singkat
Anda ingin mempartisi tabel sessions berdasarkan user_id dengan distribusi merata dan tanpa pengurutan alami. Strategi mana yang tepat?
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Partisi Rentang, Daftar, dan Hash” gratis?
Ya — teks lengkap “Partisi Rentang, Daftar, dan Hash” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Partisi Rentang, Daftar, dan Hash”?
Pilih strategi partisi yang tepat: rentang untuk deret waktu, daftar untuk penyewa, dan hash untuk distribusi merata Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Partisi Rentang, Daftar, dan Hash” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengapa Melakukan Partisi: Pruning, Pemeliharaan
- Partisi Rentang, Daftar, dan Hash
- Melepas dan Memasang Partisi
- Membuat Kueri Lintas Partisi secara Efisien