🚀 100 Juta Vektor dalam 20 Menit: Optimasi Ekstrem VectorChord


Tanggal Berita: 3 Desember 2025

VectorChord, alternatif berkinerja tinggi untuk pgvector, telah mencapai terobosan performa yang signifikan. Dengan serangkaian optimasi, mereka kini mampu membangun indeks 100 juta vektor hanya dalam 20 menit pada instance CPU biasa (16 vCPU, 12 GB RAM), memangkas waktu dari 40 jam dan menghilangkan kebutuhan akan mesin memori raksasa.

🚧 Problem Statement: Bottleneck Memori dan Waktu
Membangun indeks vektor skala besar (100M+) di PostgreSQL biasanya menjadi mimpi buruk logistik.

📉 Biaya Infrastruktur: Menggunakan pgvector standar untuk dataset ini memerlukan instance dengan memori ~200 GB. Jika memori kurang, terjadi page swapping yang membuat proses build memakan waktu hingga 40 jam. Pengguna dipaksa menyewa instance mahal (seperti i7i.8xlarge seharga $2000+/bulan) atau menggunakan GPU hanya untuk proses indexing.

🛠️ Solusi: Tiga Fase Optimasi
VectorChord membedah proses indexing menjadi tiga fase dan mengoptimalkan masing-masing fase secara radikal.

1️⃣ Fase Inisialisasi (Clustering)
Tujuan: Mengurangi kompleksitas waktu dan memori K-means.

Hierarchical K-means: Alih-alih melakukan clustering pada seluruh dataset sekaligus, sampel dibagi menjadi subset kecil yang diproses secara terpisah lalu digabungkan. Ini mempercepat proses hingga ribuan kali lipat secara teoritis.

Dimensionality Reduction: Menggunakan transformasi Johnson-Lindenstrauss untuk memproyeksikan vektor 768-dimensi ke 100-dimensi hanya selama proses sampling K-means. Ini menurunkan kebutuhan memori dari 135 GB menjadi hanya 23 GB tanpa mengorbankan akurasi secara signifikan.

Smart Sampling: Menggunakan Feistel Network sebagai permutasi pseudorandom untuk mengambil sampel data tanpa perlu melakukan full table scan yang lambat.

2️⃣ Fase Insersi (Insertion)
Tujuan: Menghilangkan lock contention saat memasukkan data ke struktur indeks.

Multi-Linked Lists: Mengganti single linked list dengan multiple lists (satu per worker) untuk menyimpan vektor presisi penuh, menghilangkan rebutan akses antar-worker.

API PostgreSQL Baru: Beralih ke API baru PostgreSQL 16+ untuk LockRelationForExtension yang memiliki critical section lebih sempit, mengurangi waktu tunggu lock.

Bulk Page Extension: Meminta alokasi 16 halaman sekaligus (menggunakan fallocate di level sistem operasi) daripada satu per satu, meningkatkan throughput penulisan disk hingga 1.8 GB/s.

3️⃣ Fase Kompaksi (Compaction)
Tujuan: Mengubah layout data untuk pencarian cepat.

Paralelisasi: Proses mengubah layout "non-compact" (baris per vektor) menjadi "compact" (SIMD-optimized) kini dijalankan secara paralel oleh semua worker. Fase ini yang tadinya memakan waktu 8 menit kini selesai di bawah 1 menit.

⚡ Findings: Hasil Benchmark
Hasil akhirnya adalah efisiensi yang drastis.

🚀 Kecepatan: Waktu total build turun dari 420 menit (pada versi sebelumnya) menjadi 18 menit. 💰 Hemat Memori: Kebutuhan memori turun 7x lipat, memungkinkan penggunaan instance i7i.4xlarge (12GB RAM) yang jauh lebih murah daripada instance 256GB RAM yang sebelumnya dibutuhkan. 🎯 Akurasi: Recall tetap tinggi di angka 94.9%, hanya sedikit menurun dari versi GPU-assisted (95.6%).

⚙️ How to Use: Konfigurasi SQL
Untuk mendapatkan performa ini, Anda dapat menggunakan opsi konfigurasi berikut saat membuat indeks di VectorChord 1.0+:

SQL

CREATE INDEX ON laion USING vchordrq (embedding vector_ip_ops) WITH (options = $$
build.pin = 2
[build.internal]
lists = [400, 160000]
build_threads = 16
spherical_centroids = true
kmeans_algorithm.hierarchical = {}
kmeans_dimension = 100
sampling_factor = 64
$$);

🗝️ Key Takeaways
📉 Algoritma > Hardware: Optimasi cerdas (seperti reduksi dimensi dan hirarkikal K-means) bisa mengalahkan kebutuhan akan hardware mahal (GPU/RAM besar).

🔓 Unlock PostgreSQL: Dengan VectorChord, PostgreSQL kini bisa menangani beban kerja vektor skala miliaran (billion-scale) secara native tanpa perlu infrastruktur terpisah atau biaya selangit.

⚡ CPU Efficiency: Kunci performa bukan hanya pada algoritma pencarian, tapi juga bagaimana menangani lock contention dan I/O disk di level database internal.

💬 Interaksi Pembaca
Apakah proyek AI Anda saat ini menggunakan database vektor terpisah (seperti Pinecone/Milvus) karena menganggap Postgres terlalu lambat untuk skala besar? Apakah hasil benchmark ini mengubah pandangan Anda?

Sumber:
https://blog.vectorchord.ai/how-we-made-100m-vector-indexing-in-20-minutes-possible-on-postgresql

#PostgreSQL #VectorDatabase #VectorChord #DatabaseOptimization #pgvector #SystemEngineering #AlgorithmDesign #CostOptimization #AIInfrastructure #TechDeepDive

Leave a Comment