Deni.dev Logo
25-07-2026
8 mnt baca

Membongkar Mekanisme HNSW dan IVFFlat pada pgvector: Strategi Vector Indexing untuk Performa Query Skala Ratusan Juta

#PostgreSQL#pgvector#Vector Database#Machine Learning#Database Optimization

Membongkar Mekanisme HNSW dan IVFFlat pada pgvector: Strategi Vector Indexing untuk Performa Query Skala Ratusan Juta

Ledakan adopsi kecerdasan buatan generatif (GenAI) dan Large Language Models (LLM) telah mengubah lanskap arsitektur data modern secara drastis. Kebutuhan untuk menyimpan, mengindeks, dan melakukan similarity search pada high-dimensional embeddings (vektor dimensi tinggi) menjadi fondasi krusial bagi sistem seperti Retrieval-Augmented Generation (RAG) dan mesin rekomendasi semantik.

Alih-alih mengandalkan ekosistem vector database terisolasi yang menambah kompleksitas infrastruktur operasional, ekstensi pgvector hadir sebagai jembatan revolusioner. Ekstensi ini memungkinkan PostgreSQL—basis data relasional yang telah teruji andal selama beberapa dekade—untuk bertindak sebagai vector database berkinerja tinggi.

Namun, tantangan terbesar dalam pengelolaan vektor di basis data relasional bukanlah pada kapasitas penyimpanan, melainkan pada kompleksitas komputasi saat melakukan pencarian tetangga terdekat (Nearest Neighbor Search) di ruang berdimensi tinggi. Artikel ini akan membedah secara mendalam mekanisme internal vector indexing pada pgvector, khususnya perbandingan arsitektural antara IVFFlat dan HNSW, serta strategi optimasi untuk mengekstrak performa maksimal pada skala ratusan juta data.


Anatomi Masalah: Kutukan Dimensionalitas (Curse of Dimensionality)

Sebelum menyelami solusi pengindeksan, penting untuk memahami mengapa pencarian vektor secara naif (Exact Nearest Neighbor atau Sequential Scan) menjadi momok bagi performa sistem.

Dalam pencarian vektor tradisional menggunakan metrik jarak seperti Cosine Similarity, Euclidean Distance ($L_2$), atau Inner Product, basis data harus menghitung jarak antara vektor kueri terhadap seluruh vektor yang tersimpan di dalam tabel (Sequential Scan atau Seq Scan).

Secara matematis, kompleksitas waktu dari exact search adalah $\mathcal{O}(N \cdot D)$, di mana $N$ adalah jumlah baris dan $D$ adalah dimensi vektor (misalnya 1536 untuk text-embedding-3-small OpenAI). Ketika $N$ mencapai jutaan baris, operasi ini memakan waktu detik bahkan menit, yang tentu tidak dapat diterima oleh aplikasi real-end-user.

Untuk mengatasi hal ini, pgvector memperkenalkan struktur Approximate Nearest Neighbor (ANN) indexing. Alih-alih menjamin 100% akurasi matematis dengan memindai seluruh data, indeks ANN mengorbankan sedikit akurasi (recall) demi kecepatan pencarian eksponensial ($\mathcal{O}(\log N)$).


Membedah Algoritma Indeks Pertama: IVFFlat (Inverted File with Flat Quantization)

Algoritma IVFFlat adalah salah satu pendekatan indexing paling awal yang diadopsi secara luas di pgvector.

Cara Kerja IVFFlat

  1. K-Means Clustering: Saat indeks dibuat, algoritma melakukan clustering pada sekumpulan vektor pelatihan menggunakan algoritma K-Means untuk membagi ruang vektor menjadi beberapa kluster atau lists ($L$).
  2. Centroid Assignment: Setiap vektor dikaitkan dengan centroid terdekat dari kluster tersebut.
  3. Inverted File Structure: Vektor-vektor disimpan ke dalam struktur file terbalik berdasarkan centroid tempat mereka bernaung.
  4. Query Phase: Saat kueri masuk, indeks hanya menghitung jarak antara vektor kueri dengan centroid, lalu melakukan pencarian mendalam hanya pada $nprobes$ kluster terdekat.

Kelebihan dan Kekurangan IVFFlat

  • Kelebihan: Proses pembuatan indeks (index build time) relatif cepat dan konsumsi memori saat build cukup efisien.
  • Kekurangan: Akurasi (recall) sangat bergantung pada kualitas fase training awal. Jika data baru yang masuk memiliki distribusi yang jauh berbeda dari data sampel training, performa pencarian akan merosot tajam. Selain itu, IVFFlat sangat sensitif terhadap parameter lists.
-- Contoh Pembuatan Indeks IVFFlat
CREATE INDEX items_ivfflat_idx ON items 
USING ivfflat (embedding vector_cosine_ops) 
WITH (lists = 100);

Catatan Operasional: Nilai parameter lists umumnya direkomendasikan sekitar $\sqrt{N}$ hingga $N / 1000$ untuk data berukuran sedang. Pastikan indeks dibuat setelah tabel terisi data yang representatif, bukan pada tabel kosong.


Melompat ke Standar Industri Modern: HNSW (Hierarchical Navigable Small World)

Jika IVFFlat menggunakan pendekatan berbasis clustering, HNSW mengadopsi pendekatan berbasis graph (graf). HNSW adalah salah satu algoritma ANN tercanggih saat ini yang menawarkan keseimbangan terbaik antara latensi rendah dan akurasi tinggi.

Anatomi Graf Berlapis HNSW

Terinspirasi oleh struktur Skip List probabilistik, HNSW membangun struktur data hierarkis berlapis-lapis:

  • Layer Atas (Sparse Layers): Berisi sedikit node dengan jarak koneksi antar-node yang jauh. Digunakan untuk navigasi cepat melintasi ruang vektor secara global (mirip jalan tol antarkota).
  • Layer Bawah (Dense Layers): Berisi seluruh node dengan koneksi lokal yang padat. Digunakan untuk pencarian presisi tinggi di area target (mirip jalan perumahan).
Layer 2 (Top):    [ Node A ]-------------------------> [ Node Z ]
                       |                                    |
Layer 1:          [ Node A ]-----> [ Node M ]--------> [ Node Z ]
                       |                |                   |
Layer 0 (Base):   [ Node A ]->[Node D]->[ Node M ]->[Node X]->[ Node Z ]

Proses Navigasi Kueri HNSW

  1. Kueri dimulai dari titik masuk (entry point) di layer paling atas.
  2. Algoritma melakukan greedy routing untuk bergerak ke node tetangga yang posisinya paling dekat dengan vektor kueri di layer tersebut.
  3. Ketika mencapai titik optimum lokal pada layer tersebut, algoritma turun ke layer di bawahnya dan mengulangi proses hingga mencapai layer terbawah (Layer 0).
  4. Di Layer 0, pencarian diperluas secara lokal untuk mengumpulkan $K$ tetangga terdekat.

Parameter Tuning Krusial pada HNSW (pgvector)

pgvector menyediakan dua parameter utama saat membangun dan mengeksekusi kueri HNSW:

  1. m (Maksimum koneksi per node per layer): Mengontrol jumlahbiaya koneksi graf. Nilai umum berkisar antara 16 hingga 64. Nilai yang lebih tinggi meningkatkan akurasi untuk dimensi tinggi, namun memperbesar ukuran indeks di disk dan memperlambat proses build.
  2. ef_construction (Ukuran kandidat saat build): Menentukan ukuran daftar kandidat dinamis selama konstruksi indeks. Nilai tinggi (misal 64 hingga 200) menghasilkan kualitas graf yang superior dengan konsekuensi waktu build yang jauh lebih lama.
  3. ef_search (Ukuran kandidat saat runtime query): Parameter sesi yang dapat diatur secara dinamis untuk mengontrol trade-off antara kecepatan pencarian dan recall.
-- Contoh Pembuatan Indeks HNSW
CREATE INDEX items_hnsw_idx ON items 
USING hnsw (embedding vector_cosine_ops) 
WITH (m = 16, ef_construction = 64);

-- Mengatur ef_search pada sesi kueri untuk akurasi optimal
SET hnsw.ef_search = 40;

Perbandingan Langsung: IVFFlat vs. HNSW di pgvector

Untuk membantu arsitek sistem menentukan pilihan yang tepat, berikut adalah matriks perbandingan komprehensif:

Parameter Evaluasi IVFFlat HNSW
Struktur Data Inverted File / Clustering Multi-layer Graph
Index Build Time Cepat Lambat (Membutuhkan komputasi graf intensif)
Memory Footprint Rendah - Sedang Tinggi (Graf disimpan di memori/shared_buffers)
Query Latency Sedang Sangat Rendah (Sub-milidetik pada skala optimal)
Recall / Akurasi Menengah (Sensitif terhadap distribusi data) Tinggi (Konsisten di atas 95-99%)
Skalabilitas Data Optimal hingga puluhan juta baris Sangat baik hingga ratusan juta baris
Sifat Data Memerlukan re-train jika distribusi berubah Dinamis, ramah terhadap penyisipan data baru

Strategi Optimasi Lanjutan dan Pemeliharaan Sistem

Mengimplementasikan pgvector di lingkungan produksi berskala enterprise memerlukan pemahaman mendalam tentang perilaku memori PostgreSQL dan konfigurasi perangkat keras.

1. Alokasi Memori dan Konfigurasi shared_buffers serta work_mem

Indeks HNSW sangat bergantung pada akses memori yang cepat. Pastikan parameter PostgreSQL Anda dikonfigurasi secara optimal:

  • shared_buffers: Alokasikan sekitar 25% hingga 40% dari total RAM sistem agar halaman indeks HNSW dapat di-cache secara agresif di memori.
  • maintenance_work_mem: Tingkatkan nilai ini (misalnya 2GB atau lebih) saat membangun indeks HNSW dalam skala besar untuk menghindari pembacaan/penulisan disk (temp files) yang berlebihan selama proses sorting dan konstruksi graf.

2. Kuantisasi Vektor (Vector Quantization)

Jika ukuran basis data Anda membengkak hingga puluhan gigabytes dan mulai membebani RAM, pertimbangkan teknik kuantisasi yang didukung oleh pgvector versi terbaru, seperti Half-Precision Floating-Point (halfvec) atau Binary Quantization (bit).

  • Menggunakan halfvec (16-bit float) memangkas penggunaan memori hingga 50% dibandingkan vector standar (32-bit float) dengan penurunan akurasi (recall drop) yang sangat minimal.
-- Contoh penggunaan tipe data halfvec untuk efisiensi memori
CREATE TABLE items_optimized (
    id SERIAL PRIMARY KEY,
    embedding halfvec(1536)
);

3. Pemantauan Indeks dan Penanganan Bloat

Operasi UPDATE dan DELETE secara masif pada tabel yang memiliki indeks HNSW dapat menyebabkan fragmentasi graf (index bloat). Lakukan pemeliharaan rutin secara berkala menggunakan perintah:

REINDEX INDEX CONCURRENTLY items_hnsw_idx;

Penggunaan kata kunci CONCURRENTLY sangat penting agar tabel tetap dapat diakses oleh aplikasi (read and write operations) selama proses pembangunan ulang indeks berlangsung tanpa mengalami table locking.


Ringkasan Eksekutif

pgvector telah mengubah paradigma pengelolaan data berbasis AI, memungkinkan pengembang untuk menyatukan logika transaksional relasional dan pencarian semantik vektor dalam satu mesin basis data yang tangguh.

Pemilihan antara IVFFlat dan HNSW harus didasarkan pada kebutuhan spesifik produk Anda: gunakan IVFFlat jika Anda memiliki keterbatasan sumber daya memori dan prioritas utama adalah kecepatan pembuatan indeks; namun, untuk performa query latensi rendah yang konsisten dan akurasi tinggi pada skala ratusan juta data, HNSW adalah standar emas arsitektural yang wajib dipilih. Dengan konfigurasi parameter yang matang dan manajemen memori yang tepat, PostgreSQL siap menjadi AI database utama yang skalabel dan handal bagi infrastruktur modern Anda.

Menikmati artikel ini? Berikan apresiasi Anda!