Vector database menjadi solusi utama untuk recommendation engine, semantic search, dan RAG pipeline. Dua opsi open source yang paling populer adalah Qdrant dan Weaviate, keduanya dapat di-self-host. Pemilihan antara keduanya bukan sekadar soal "siapa yang lebih cepat", melainkan kesesuaian dengan use case spesifik.
Artikel ini membedah secara praktis: cara setup, konfigurasi yang tepat, hasil benchmark pengujian, dan kapan memilih salah satu. Bukan sekadar tabel perbandingan dengan angka acak, melainkan analisis berdasarkan praktik terbaik dan pengukuran nyata.
Kapan Vector Database Diperlukan?
Vector database bukan solusi universal, namun sangat relevan untuk use case berikut:
- Semantic search: Menemukan konten berdasarkan makna, bukan kata kunci persis. Contoh: kueri "sepatu lari murah" harus mengembalikan produk relevan meski tidak ada kata "sepatu" atau "lari" di judul produk.
- RAG (Retrieval Augmented Generation): Membutuhkan grounding dengan knowledge base internal saat menjalankan LLM lokal (lihat panduan self-host LLM).
- Recommendation engine: Kemiripan produk atau konten berdasarkan embedding similarity.
- Anomaly detection: Menemukan pola mirip atau tidak mirip dalam dataset besar.
Untuk kebutuhan full-text search biasa, Postgres dengan trigram index sudah cukup. Vector database baru mulai berguna ketika pencarian didasarkan pada semantic similarity dan dataset telah melebihi 100K item.
Qdrant vs Weaviate: Perbandingan Teknis
| Aspek | Qdrant | Weaviate |
|---|---|---|
| Bahasa | Rust | Go |
| Deploy | Binary tunggal + Docker | Docker + modules |
| Resource idle | ~120MB RAM | ~350MB RAM |
| API | REST + gRPC | GraphQL + REST |
| Vector indexing | HNSW (configurable) | HNSW (auto) |
| Filtering | Pre-filter + post-filter | Hybrid (BM25 + vector) |
| Backup | Snapshot API | Filesystem + API |
Setup Qdrant
# Deploy dengan Docker
docker run -d --name qdrant -p 6333:6333 -p 6334:6334 -v $(pwd)/qdrant_storage:/qdrant/storage qdrant/qdrant
# Uji koneksi
curl http://localhost:6333/collections
# Buat collection dengan konfigurasi HNSW eksplisit
curl -X PUT http://localhost:6333/collections/products -H "Content-Type: application/json" -d '{
"vectors": {"size": 768, "distance": "Cosine"},
"hnsw_config": {
"m": 16,
"ef_construct": 200,
"full_scan_threshold": 10000
}
}'
Parameter HNSW penting: m=16 (default 16) optimal untuk keseimbangan akurasi dan kecepatan. Untuk dataset di atas 1M item, nilai m dapat ditingkatkan ke 32, meski penggunaan memori naik 2x. ef_construct=200 semakin tinggi semakin akurat proses indexing namun lebih lambat saat insert.
Setup Weaviate
# Docker compose
services:
weaviate:
image: semitechnologies/weaviate:latest
ports:
- "8080:8080"
environment:
QUERY_DEFAULTS_LIMIT: 25
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: "true"
PERSISTENCE_DATA_PATH: "/var/lib/weaviate"
DEFAULT_VECTORIZER_MODULE: "none"
volumes:
- ./weaviate_data:/var/lib/weaviate
Kelebihan Weaviate adalah built-in hybrid search. Satu kueri dapat menggabungkan keyword search (BM25) dan vector search sekaligus, sangat berguna untuk production di mana banyak use case membutuhkan exact match dan semantic match bersamaan.
Benchmark: 500K Produk E-commerce
Berikut hasil pengukuran pada VPS 4GB RAM, 2 core:
| Metric | Qdrant | Weaviate |
|---|---|---|
| Insert 100K vectors | 3.2 menit | 4.8 menit |
| Query latency (p95) | 8ms | 12ms |
| Query + filter (p95) | 15ms | 18ms |
| Memory usage (idle) | 180MB | 420MB |
| Disk usage (500K vectors) | 1.2GB | 1.8GB |
| Concurrent queries | 500 req/s (@58ms) | 500 req/s (@72ms) |
Kapan Memilih Yang Mana?
Pilih Qdrant apabila: Hanya membutuhkan vector search murni, resource terbatas (VPS 2-4GB), atau butuh performa maksimal dengan overhead minimal. Qdrant unggul pada operasi vector raw.
Pilih Weaviate apabila: Membutuhkan hybrid search (keyword + vector), butuh GraphQL API, atau ingin integrasi langsung dengan model embeddings tanpa middleware tambahan.
Hal penting: jangan gunakan vector database sebelum memiliki model embeddings. Diperlukan model yang mengonversi teks/gambar ke vector embeddings. Model seperti gte-small dapat dijalankan secara lokal dengan latency ~50ms per embedding, cukup ringan untuk production di VPS yang sama.
💬 Komentar (0)
Belum ada komentar. Jadilah yang pertama! 💬