13. Implementasi Cloud: Melipatgandakan Kecepatan Pencarian Tanggal via Range Partitioning

763 views
Arsitektur Basis Data

Arsitektur Basis Data

Ilustrasi Arsitektur Basis Data Tingkat Enterprise

Menggantung Miliaran Ekspedisi di Sebuah Tali

Seiring berjalannya roda usaha e-Commerce maupun gudang grosir raksasa di atas infrastruktur Odoo, satu sifat genetik data tercipta: pertumbuhan tabel stock_move dan account_move_line tidak akan pernah berhenti, melesat linear tanpa belas kasihan. Saat jumlah deret transaksi tunggal mencapai 50 Juta baris, Odoo mulai kehilangan nafasnya untuk mencari kwitansi tiga tahun lalu.
Fenomena ini tak bisa diselesaikan hanya dengan melempar RAM yang lebih besar (Hardware Scaling). Obat mujarab level tinggi di dalam PostgreSQL adalah "Pemecahan Anatomi Tabel Fisik" yang lebih dikenal dengan Table Partitioning. Kita menyembunyikan dan melipat 50 Juta baris itu tanpa merusak skema referensi fungsional ORM di atasnya.

Arsitektur Range Partitioning Waktu

Dengan mendeklarasikan sebuah tabel master fiktif (Declarative Partitioning), lalu membelahnya berdasarkan batas bulan (Januari, Februari, dan seterusnya) menggunakan algoritma Range Partitioning, setiap Odoo meminta data jurnal bulan Januari, mesin Planner akan 100% melupakan semua tabel selain petak-petak tabel Januari.
Teknik potong kuenya pun sangat aman, karena Odoo di tingkatan kode python masih menganggap bahwa ia membaca ke tabel tunggal bernama account_move_line. Keindahan magisnya terjadi di lapisan dalam pangkalan data. Tak cuma performa membaca yang meloncat super tinggi, performa penulisan (bulk inserts) turut membaik dan manajemen Auto-Vacuum pun tertolong bernafas.
sql
-- Blueprint Partisi Waktu Kronologis
class="text-pink-400 font-bold">CREATE class="text-pink-400 font-bold">TABLE account_move_line (
    id SERIAL,
    date DATE class="text-pink-400 font-bold">NOT NULL,
    account_id INT,
    balance NUMERIC
) class="text-pink-400 font-bold">PARTITION BY RANGE (date);

-- Penciptaan Anak Petak Kategori Tabel
class="text-pink-400 font-bold">CREATE class="text-pink-400 font-bold">TABLE aml_2026_q1 class="text-pink-400 font-bold">PARTITION OF account_move_line
FOR class="text-pink-400 font-bold">VALUES class="text-pink-400 font-bold">FROM (class="text-green-400">'2026-01-01') TO (class="text-green-400">'2026-04-01');

Kesimpulan Partitioning

Pilah tabel transaksional terberat dari Odoo Anda segera. Terapkan strategi Partisi Waktu minimal dengan pecahan Per-Semester atau Bulanan, agar sejarah tidak menenggelamkan harapan responsivitas peladen Anda di masa depan.