Vector DB setup: (1) Pick — Qdrant (Rust open-source, fast), pgvector (Postgres extension, simple), Weaviate (hybrid search), (2) Docker deploy or managed cloud, (3) Create collection with vector size (1536 for OpenAI, 768 for bge-small), (4) Configure HNSW parameters (m=16, ef_construct=100), (5) Upsert + search, (6) Monitor via Grafana + Enterno Ping for health.
Below: step-by-step, working examples, common pitfalls, FAQ.
docker run -d -p 6333:6333 -v qdrant_data:/qdrant/storage qdrant/qdrant:latest| Scenario | Config |
|---|---|
| Qdrant create collection | curl -X PUT http://localhost:6333/collections/docs \
-H 'Content-Type: application/json' \
-d '{
"vectors": {"size": 1536, "distance": "Cosine"},
"hnsw_config": {"m": 16, "ef_construct": 100}
}' |
| pgvector in Postgres | CREATE EXTENSION vector;
CREATE TABLE docs (id bigint, embedding vector(1536), payload jsonb);
CREATE INDEX ON docs USING hnsw (embedding vector_cosine_ops);
-- Query
SELECT id FROM docs ORDER BY embedding <=> '[0.1,...]' LIMIT 5; |
| Weaviate hybrid search | client.query.get('Doc', ['content'])
.with_hybrid(query='TLS cert', alpha=0.5)
.with_limit(10).do() |
| Qdrant batch upsert | curl -X PUT http://localhost:6333/collections/docs/points/batch \
-d '{"batch": {"ids": [1,2,3], "vectors": [[...],[...],[...]], "payloads": [{...},{...},{...}]}}' |
| Prometheus monitoring | # Qdrant exposes /metrics in prom format
scrape_configs:
- job_name: qdrant
static_configs:
- targets: ['qdrant:6333'] |
Up to 1M vectors — yes. Embedded in Postgres = single DB, transactional. Above 10M — dedicated vector DB.
Qdrant: vector-focused, fast Rust. Weaviate: hybrid search built-in, modular. For pure vector — Qdrant. For hybrid — Weaviate.
Qdrant: snapshot API, multi-region replication (Enterprise). pgvector: standard Postgres backup (pg_dump, WAL).
<a href="/en/ping">Enterno Ping</a> for port 6333/5432. <a href="/en/monitors">Monitors</a> for /health endpoint + alerts.