Skip to content

How to Deploy a Vector Database

Key idea:

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.

Try it now — free →

Step-by-Step Setup

  1. Docker: docker run -d -p 6333:6333 -v qdrant_data:/qdrant/storage qdrant/qdrant:latest
  2. Create collection: POST /collections/docs with vector size + distance metric
  3. Batch upsert: 100-1000 points per request (faster than single)
  4. Create HNSW index automatically (Qdrant) or explicit (pgvector)
  5. Add metadata filters for pre-filtering (category, date, lang)
  6. Monitor: /health endpoint + RPS + p95 latency
  7. Backup: snapshot API → S3

Working Examples

ScenarioConfig
Qdrant create collectioncurl -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 PostgresCREATE 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 searchclient.query.get('Doc', ['content']) .with_hybrid(query='TLS cert', alpha=0.5) .with_limit(10).do()
Qdrant batch upsertcurl -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']

Common Pitfalls

  • maxmemory: HNSW stays in RAM. 10M × 1536-dim × 4 bytes = 60 GB + 3x graph overhead → 180 GB RAM
  • Distance metric mismatch: cosine vs euclidean — results differ. Decide upfront
  • Vector size change requires collection recreate. Plan carefully
  • No metadata filter on query → full scan. Always use filters
  • Cloud cost trap: managed Pinecone $70+/mo for 100k vectors. Qdrant self-host $5/mo VPS

Learn more

Frequently Asked Questions

Is pgvector enough?

Up to 1M vectors — yes. Embedded in Postgres = single DB, transactional. Above 10M — dedicated vector DB.

Qdrant vs Weaviate?

Qdrant: vector-focused, fast Rust. Weaviate: hybrid search built-in, modular. For pure vector — Qdrant. For hybrid — Weaviate.

Backup / HA?

Qdrant: snapshot API, multi-region replication (Enterprise). pgvector: standard Postgres backup (pg_dump, WAL).

How to monitor uptime?

<a href="/en/ping">Enterno Ping</a> for port 6333/5432. <a href="/en/monitors">Monitors</a> for /health endpoint + alerts.