[Milvus] 소개 및 시작
milvus는 대표적인 vector search 전문 데이터베이스 중 하나다.
milvus, qdrant, pinecone 이 3가지 정도가 벡터 DB들 사이에서는 3대장 포지션이다.
2019년에 나왔고, Go와 C++을 섞어서 만들어졌다. 성능에 영향을 주는 핵심 로직은 주로 C++를 사용한 것 같다.
벡터 검색을 지원하는 데이터베이스 중에서는 성능이나 처리량 부분에서 가장 높은 성과를 보이는 편이다.
아키텍쳐는 조금 복잡한 편이다.
데이터 저장소는 일반 파일 볼륨, minio, S3 같은 클라우드 스토리지까지 전부 붙일 수 있다. 이게 좀 강점인 것 같다.
Coordinator Node와 Worker Node를 구분해서 연산을 처리하는 부분은 Elasticsearch와 유사한 부분이 있다.
Client SDK 지원 수준은 qdrant보단 좀 별로다.
Rust가 없고, 닷넷도 정식 지원이 아니다.
Docker Compose로 실행해보기
사실 난 여기서부터 좀 비호감이었다.
이건 단일 컨테이너로 간단하게 부팅해서 사용하는게 안된다. minio와 etcd를 기본으로 사용해야만 한다.
옛적 카프카도 이 정도는 아니었는데...?
etcd는 클러스터 관리자고, minio는 뒷단 스토리지 관리자다.
version: "3.5"
services:
etcd:
container_name: milvus-etcd
image: quay.io/coreos/etcd:v3.5.18
environment:
- ETCD_AUTO_COMPACTION_MODE=revision
- ETCD_AUTO_COMPACTION_RETENTION=1000
- ETCD_QUOTA_BACKEND_BYTES=4294967296
- ETCD_SNAPSHOT_COUNT=50000
volumes:
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd
command: etcd -advertise-client-urls=http://etcd:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
healthcheck:
test: ["CMD", "etcdctl", "endpoint", "health"]
interval: 30s
timeout: 20s
retries: 3
minio:
container_name: milvus-minio
image: minio/minio:RELEASE.2023-03-20T20-16-18Z
environment:
MINIO_ACCESS_KEY: minioadmin
MINIO_SECRET_KEY: minioadmin
ports:
- "9001:9001"
- "9000:9000"
volumes:
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data
command: minio server /minio_data --console-address ":9001"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
standalone:
container_name: milvus-standalone
image: milvusdb/milvus:v2.5.9
command: ["milvus", "run", "standalone"]
security_opt:
- seccomp:unconfined
environment:
ETCD_ENDPOINTS: etcd:2379
MINIO_ADDRESS: minio:9000
volumes:
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
interval: 30s
start_period: 90s
timeout: 20s
retries: 3
ports:
- "19530:19530"
- "9091:9091"
depends_on:
- "etcd"
- "minio"
networks:
default:
name: milvus
파일 만들고
실행해보자
sudo docker compose -f ./milvus-standalone.yml up

오류 없이 전부 실행되고,
9091 포트 엔드포인트로 접속이 되면, 잘 뜬 것이다.
그리고, /webui로 접속하면 개발자 보조용 대시보드가 뜬다.
그럼

옵션이나 슬로쿼리
데이터베이스가 컬렉션 목록 같은 메타데이터들을 조회할 수 있다.
근데 여기서 쿼리를 직접 날리거나, 데이터를 상세하게 조회하고 조작한다거나 하는 것은 지원되지 않는다.
이건 qdrant에 비해서 후달리는 부분인 것 같다. 여기서 할 수 있는게 적다.
참조
https://github.com/milvus-io/milvus
https://discuss.pytorch.kr/t/2023-picking-a-vector-database-a-comparison-and-guide-for-2023/2625
https://en.m.wikipedia.org/wiki/Milvus_(vector_database)