milvus
무엇인가
Milvus는 벡터 유사도 검색 계층에 속하는 데이터베이스다. 텍스트·이미지·멀티모달 데이터를 임베딩한 dense 벡터와 sparse 벡터를 정수·문자열·JSON 같은 스칼라 필드와 함께 한 컬렉션에 저장하고, 메타데이터 필터링이나 하이브리드 검색으로 질의한다. RAG, 이미지 검색, 추천 시스템에서 검색 백엔드 자리를 맡는다.
어떻게 동작하나
구조는 컴퓨트와 스토리지를 분리한 분산 마이크로서비스다. K8s 위에 무상태 서비스로 뜨고, 읽기 부하가 크면 쿼리 노드를, 쓰기 부하가 크면 데이터 노드를 늘려 수평 확장한다. 데이터는 세그먼트 단위로 여러 쿼리 노드에 로드되며, 복제본을 두면 처리량과 장애 격리가 함께 올라간다. 실시간 스트리밍 갱신으로 새 데이터가 계속 검색 대상에 들어온다.
무엇과 다른가
시스템과 코어 벡터 검색 엔진이 분리돼 있어 인덱스 타입을 교체할 수 있다. HNSW, IVF, FLAT(전수 검색), SCANN, DiskANN에 양자화 변형과 mmap을 상황별로 고르고, CPU/GPU 하드웨어 가속과 NVIDIA CAGRA GPU 인덱싱을 쓴다. FAISS 같은 라이브러리와 달리 영속 저장, 분산 실행, 다중 테넌시를 데이터베이스 계층에서 처리한다. 테넌트 격리는 데이터베이스·컬렉션·파티션·파티션 키 단위로 나뉘고, 핫 데이터는 메모리나 SSD에, 콜드 데이터는 느린 저비용 스토리지에 배치한다.
어떻게 쓰나
Python에서는 pymilvus를 설치한 뒤 MilvusClient를 만든다. 로컬 파일 경로를 넘기면 Milvus Lite가 그 자리에서 로컬 벡터 DB로 뜨고, 배포된 서버나 Zilliz Cloud에 붙일 때는 자격 증명을 넘긴다. 이후 컬렉션 생성, 데이터 삽입, 벡터 검색 순으로 진행한다. 배포 형태는 단일 머신용 Standalone 모드와 K8s 분산 모드로 나뉜다.
전제와 한계
Milvus Lite는 Python 빠른 시작용 경량 버전이라 대규모 워크로드의 전제가 아니다. 분산 모드는 Kubernetes 네이티브 아키텍처를 전제로 한다. 접근 통제는 사용자 인증, TLS 암호화, 역할 기반 접근 제어(RBAC)로 구성하며, 권한을 역할별로 부여해 세밀하게 제한한다.