3. Melipatgandakan Kecepatan Pencarian Tanggal via Range Partitioning
189 views
Arsitektur Basis Data
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.