Qdrant는 Rust로 작성된 고성능 벡터 데이터베이스입니다. 임베딩 벡터를 기반으로 유사도 검색, 필터링, 실시간 업데이트를 제공하며, MLOps 파이프라인에서 RAG, 추천 시스템, 이상 탐지 등에 널리 사용됩니다.
HNSW 그래프 기반 Approximate Nearest Neighbor 검색, 수백만 벡터를 밀리초 단위로 탐색.
스칼라 필터와 벡터 유사도를 동시에 적용, 정밀한 결과 집합 반환.
벡터 추가/삭제/업데이트가 즉시 반영, 배치 없이 실시간 서비스 가능.
기존 벡터 DB(Pinecone, Milvus, Weaviate)와 비교한 Qdrant의 강점:
| 기능 | Qdrant | Pinecone | Milvus |
|---|---|---|---|
| 오픈소스 | ✅ Apache 2.0 | ❌ 클로즈드 | ✅ Apache 2.0 |
| 코어 언어 | Rust | Go | Go/C++ |
| 필터링 성능 | ✅ 탁월 (payload 인덱스) | ✅ 우수 | ⚠️ 설정 필요 |
| 임베딩 온보드 | ❌ (외부 모델) | ✅ 내장 | ❌ |
| 분산 모드 | ✅ 클러스터 (raft) | ✅ 매니지드 | ✅ 복잡 |
💡 실무 포인트: Qdrant는 Rust의 메모리 안전성과 동시성을 활용해 단일 노드에서도 높은 처리량을 보장합니다. MLOps 파이프라인에 가볍게 임베딩하기 좋습니다.
Qdrant의 주요 구성 요소: Collection (벡터+payload 집합), Point (벡터+ID+payload), Payload (메타데이터 JSON), HNSW 인덱스.
Payload 인덱스는 keyword, integer, float, geo 등 타입별로 생성 가능하며, 필터 검색 성능을 극대화합니다.
docker pull qdrant/qdrant:latest
docker run -p 6333:6333 -p 6334:6334 \
-v $(pwd)/qdrant_storage:/qdrant/storage \
qdrant/qdrant
또는 pip install qdrant-client로 Python 클라이언트 설치.
storage:
optimizers:
default_segment_number: 2
memmap_threshold_kb: 20000
wal:
wal_capacity_mb: 32
from qdrant_client import QdrantClient
from qdrant_client.models import VectorParams, Distance
client = QdrantClient("localhost", port=6333)
# 컬렉션 생성
client.create_collection(
collection_name="my_vectors",
vectors_config=VectorParams(size=128, distance=Distance.COSINE)
)
# 포인트 추가
client.upsert(
collection_name="my_vectors",
points=[
{"id": 1, "vector": [0.1]*128, "payload": {"label": "cat"}},
{"id": 2, "vector": [0.3]*128, "payload": {"label": "dog"}},
]
)
# 검색
result = client.search(
collection_name="my_vectors",
query_vector=[0.15]*128,
limit=2
)
print(result)
⚠️ 주의: 첫 실행 시 storage 디렉토리 권한을 확인하세요. Docker 볼륨 마운트가 없으면 컨테이너 재시작 시 데이터가 사라집니다.
| 파라미터 | 기본값 | 설명 |
|---|---|---|
storage.optimizers.default_segment_number | 2 | 세그먼트 병렬 최적화 수, 쓰기 많은 경우 증가 |
storage.optimizers.memmap_threshold_kb | 20000 | memmap 전환 임계값 (KB), 대용량에서 메모리 절약 |
hnsw.m | 16 | HNSW 그래프 연결 수 (높을수록 정확도↑, 메모리↑) |
hnsw.ef_construct | 100 | 인덱스 구축 시 탐색 범위 |
wal.wal_capacity_mb | 32 | WAL 버퍼 크기, 쓰기 폭주 시 증가 |
자세한 옵션은 공식 설정 문서 참고.
자주 필터링하는 필드는 create_payload_index로 인덱싱하세요. 검색 속도가 10배 이상 차이납니다.
너무 큰 HNSW m 값은 메모리 폭주를 유발합니다. m=8로 낮추고 ef_construct를 조정하세요.
WAL 용량 부족 시 쓰기가 블로킹됩니다. wal_capacity_mb를 128 이상으로 늘리세요.
🔧 CLI 진단: curl http://localhost:6333/collections 로 컬렉션 상태 확인. qdrant_client의 get_collection() 메서드로 세그먼트 수를 모니터링하세요.