본문 바로가기
AI2026년 4월 25일9분 읽기

pgvector 0.10 vs Qdrant vs Pinecone vs Milvus — 2026 Vector DB 비교

YS
김영삼
조회 1
pgvector 0.10 vs Qdrant vs Pinecone vs Milvus — 2026 Vector DB 비교

핵심 요약

RAG 시스템의 핵심 인프라. pgvector(PostgreSQL extension)이 가장 단순, Pinecone이 가장 매니지드, Qdrant·Milvus가 전문 vector DB. 2026년 시점 선택 매트릭스.

  • pgvector 0.10 (2026-02): HNSW + iterative scan
  • Pinecone serverless (2024 출시 후 표준)
  • Qdrant 1.10: Rust 기반, hybrid 검색 강함
  • Milvus 2.5: 가장 큰 스케일, 운영 부담

1. 성능 비교 (1M docs, 1024-dim)

지표pgvectorQdrantPineconeMilvus
indexing 시간4분2분1분1.5분
QPS (single search)8002,4003,0002,800
p99 latency40ms15ms20ms18ms
recall@100.950.960.950.96
월 비용 (1M docs)$50 (PG 인스턴스)$120$70 (serverless)$200 (자체 호스팅)

2. pgvector 0.10 — 단순함의 가치

-- 설치
CREATE EXTENSION vector;

-- 테이블
CREATE TABLE docs (
    id UUID PRIMARY KEY DEFAULT uuidv7(),
    content TEXT,
    embedding VECTOR(1024),
    metadata JSONB
);

-- HNSW 인덱스
CREATE INDEX docs_embedding_idx ON docs
  USING hnsw (embedding vector_cosine_ops)
  WITH (m = 16, ef_construction = 64);

-- 검색
SELECT id, content, 1 - (embedding <=> $1) AS score
FROM docs
ORDER BY embedding <=> $1
LIMIT 10;

0.10 신기능 — Iterative Scan

SET hnsw.iterative_scan = 'strict_order';
SET hnsw.max_scan_tuples = 20000;
-- recall 부족 시 자동 추가 탐색

장점: PostgreSQL 데이터·메타데이터·관계·트랜잭션 모두 한 곳에. 운영 매우 단순.

3. Qdrant — Rust 기반 전문 DB

# 설치
docker run -p 6333:6333 qdrant/qdrant

# Python
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams, PointStruct

client = QdrantClient("localhost", port=6333)
client.create_collection(
    collection_name="docs",
    vectors_config=VectorParams(size=1024, distance=Distance.COSINE),
)

client.upsert(
    collection_name="docs",
    points=[
        PointStruct(id=1, vector=[0.1]*1024, payload={"source": "..."}),
    ],
)

results = client.search(
    collection_name="docs",
    query_vector=[0.1]*1024,
    query_filter={"must": [{"key": "source", "match": {"value": "blog"}}]},
    limit=10,
)

Hybrid 검색 (vector + keyword)

from qdrant_client.models import Fusion, Prefetch

results = client.query_points(
    collection_name="docs",
    prefetch=[
        Prefetch(query=dense_vector, using="dense", limit=100),
        Prefetch(query=sparse_vector, using="sparse", limit=100),
    ],
    query=Fusion.RRF,  # Reciprocal Rank Fusion
    limit=10,
)

dense + sparse 결합이 1급 시민. 한국어 RAG에서 효과 큼.

4. Pinecone Serverless

from pinecone import Pinecone

pc = Pinecone(api_key="...")
index = pc.create_index(
    name="docs",
    dimension=1024,
    metric="cosine",
    spec=ServerlessSpec(cloud="aws", region="us-east-1")
)

index.upsert([
    ("id1", [0.1]*1024, {"source": "..."}),
])

results = index.query(
    vector=[0.1]*1024,
    filter={"source": {"$eq": "blog"}},
    top_k=10,
)

완전 관리. 운영 부담 0. 단 비용·lock-in.

5. Milvus — 대규모

10억+ 벡터 처리. 설치·운영 부담 큼. 대규모 검색 엔진·추천 시스템에서만 정당화.

6. 의사결정 매트릭스

워크로드1순위
이미 PostgreSQL 운영pgvector
1M docs 미만pgvector
관리 부담 0Pinecone Serverless
hybrid (dense + sparse) 필수Qdrant
1억+ 벡터Milvus 또는 Pinecone
오픈소스 + self-hosted + 성능Qdrant

7. 임베딩 모델과의 조합

# BGE-M3로 임베딩 + Qdrant 또는 pgvector
from FlagEmbedding import BGEM3FlagModel
model = BGEM3FlagModel('BAAI/bge-m3')

embs = model.encode(documents, batch_size=32)['dense_vecs']

# Qdrant로 저장
client.upsert(collection_name="docs",
    points=[PointStruct(id=i, vector=e.tolist(), payload={...}) for i, e in enumerate(embs)]
)

8. 운영 노하우

pgvector

  • maintenance_work_mem 4GB+ 후 인덱스 빌드
  • HNSW: m=16, ef_construction=64 표준
  • 큰 테이블은 partition + 인덱스 별도

Qdrant

  • quantization (scalar·binary)으로 메모리 50% 절감
  • multi-tenant 시 collection 분리
  • snapshot으로 백업

Pinecone

  • namespace로 multi-tenant
  • 비용은 query·storage 분리 — 검색 빈도 추적

9. 비용 종합

규모pgvectorQdrantPinecone
10K docs~$20/월~$30/월~$10/월
1M docs~$50/월~$120/월~$70/월
10M docs~$200/월~$400/월~$300/월
100M docs~$1500/월~$3000/월~$2500/월

10. RAG 시스템 권장 조합

규모임베딩Vector DBReranker
POC·소규모OpenAI v3pgvector없음
중간bge-m3pgvector or Qdrantbge-reranker-v2-m3
큰 규모bge-m3Qdrantcross-encoder
매니지드 우선OpenAI v3PineconeCohere Rerank

자주 묻는 질문

pgvector 0.10이 정말 충분한가?1M~10M docs는 충분. 그 이상은 Qdrant 검토. 매우 까다로운 ms latency 요구는 Qdrant·Pinecone.

Pinecone vs self-hosted?운영팀 시간 vs 비용 트레이드오프. 1만 쿼리/일 이상이면 self-hosted 유리.

hybrid 검색 정말 필요?한국어·복합어 많은 도메인에서 +5~15%p recall. 영어 단순 검색은 dense만으로 충분한 경우 많음.

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록