요약
Milvus 3.0이 2026년 7월 29일 릴리스됐다. LF AI & Data 재단의 졸업 프로젝트인 Milvus의 이번 메이저 버전은 "레이크 네이티브(lake-native)" 아키텍처를 핵심 개념으로 내세운다.
기존 Milvus는 데이터를 자체 스토리지로 복사해 인덱스를 구축했다. 3.0의 External Collections는 이 전제를 뒤집는다. Iceberg, Lance, Parquet, Vortex 포맷으로 오브젝트 스토리지에 이미 존재하는 데이터 위에 Milvus가 벡터·전문 검색·스칼라 인덱스를 직접 구축하고, 데이터 복사 없이 쿼리한다. 쓰기 선행 로그(WAL) 구성 요소인 Woodpecker는 독립적으로 배포 가능한 서비스로 분리됐다. SINDI 알고리즘 기반 희소 벡터 인덱스, StructArray와 팻싯 검색(faceted search), 다운타임 없는 스키마 진화, Spark DataSource V2 통합이 함께 포함됐다.
문제: 데이터 복사의 비용
벡터 데이터베이스를 도입할 때 가장 먼저 부딪히는 운영 문제 중 하나는 데이터 이중화다. 분석 쿼리용으로 레이크하우스에 이미 저장된 임베딩 데이터를, 벡터 검색을 위해 Milvus로 다시 적재해야 하는 구조가 일반적이었다.
이 구조의 비용은 세 가지다.
- 스토리지 중복: 동일한 임베딩 데이터가 레이크와 벡터 DB에 각각 존재한다.
- 파이프라인 유지 비용: 레이크의 데이터가 갱신될 때마다 Milvus로의 재적재 파이프라인을 관리해야 한다.
- 일관성 시차: 파이프라인 지연만큼 벡터 검색 결과와 레이크 데이터 사이에 괴리가 생긴다.
Milvus 3.0의 External Collections는 이 복사 단계를 제거하는 방향을 택했다.
External Collections: 레이크 위의 인덱스
External Collections의 핵심 아이디어는 Milvus가 오브젝트 스토리지를 직접 데이터 소스로 참조한다는 것이다.
지원하는 오픈 포맷:
| 포맷 | 특징 | 주요 사용처 |
|---|---|---|
| Apache Iceberg | 트랜잭셔널 테이블 포맷, 스키마 진화 지원 | 레이크하우스 (Databricks, Apache Spark) |
| Lance | 벡터 특화 컬럼형 포맷, 무작위 접근 최적화 | 벡터 데이터셋, LanceDB |
| Parquet | 범용 컬럼형 포맷 | 데이터 웨어하우스, 레이크 |
| Vortex | 적응형 인코딩, 압축 강화 | 고성능 분석 파이프라인 |
External Collection을 생성하면 Milvus는 해당 오브젝트 스토리지 경로를 가리키는 메타데이터 엔티티를 만든다. 실제 데이터는 이동하지 않는다. Milvus는 그 위에 벡터 인덱스, 전문 검색(full-text search) 인덱스, 스칼라 인덱스를 구축하고, 쿼리 시에 오리지널 데이터를 참조한다.
이 구조의 전제 조건은 Milvus 프로세스가 오브젝트 스토리지(S3, GCS, Azure Blob 등)에 읽기 접근 권한을 가져야 한다는 것이다. 쓰기는 여전히 Milvus 자체 경로를 거친다.
Woodpecker: WAL을 서비스로 분리
Milvus의 쓰기 경로 핵심에는 메시지 큐 기반의 로그 컴포넌트가 있었다. 기존에는 Apache Pulsar 또는 Apache Kafka를 WAL 레이어로 사용했는데, 이 외부 의존성을 관리하는 운영 부담이 컸다.
3.0에서 Woodpecker가 내장 WAL로 도입됐고, 이를 독립 서비스로 배포할 수 있게 됐다.
Woodpecker의 역할:
- Milvus의 쓰기 로그를 처리하는 WAL 역할
- 외부 Pulsar/Kafka 클러스터 없이도 동작 가능한 경량 배포 옵션 제공
- Woodpecker를 분리 배포해 쓰기 경로의 독립적인 스케일링 가능
실제 프로덕션에서는 Pulsar/Kafka를 계속 사용할 수 있다. Woodpecker는 더 단순한 배포 환경을 위한 대안 경로다.
검색 엔진 강화
SINDI 기반 희소 벡터 인덱스
Milvus 2.x에서 희소 벡터 인덱스는 밀집 벡터 인덱스(HNSW, IVF)에 비해 성능이 제한적이었다. 3.0에서는 SINDI(Sparse INverted Dynamic Index) 알고리즘으로 희소 인덱스를 재설계했다. 이를 통해 BM25 기반 전문 검색과 밀집 벡터 검색을 하나의 쿼리 플랜에서 결합하는 하이브리드 검색이 더 효율적으로 동작한다.
StructArray와 팻싯 검색
StructArray는 Milvus 컬렉션 내의 필드에 구조체 타입을 지원하는 기능이다. 기존에는 평면적인 스칼라 필드만 쓸 수 있었는데, StructArray를 이용하면 중첩 구조 데이터를 저장하고 필터링할 수 있다.
팻싯 검색(faceted search)은 검색 결과를 특정 필드 값별로 집계하는 기능이다. 전자상거래, 문서 검색 등에서 "카테고리별 결과 수" 같은 응답을 벡터 검색 결과와 함께 반환할 수 있다.
스키마 온라인 진화
컬렉션을 재생성하거나 재인덱싱하지 않고도 필드를 추가, 백필, 삭제할 수 있다. 기존 Milvus에서 스키마 변경이 필요할 때는 데이터를 마이그레이션해야 했는데, 이 작업이 제거됐다.
Spark DataSource V2 통합
Milvus 3.0에서 Apache Spark DataSource V2 표준을 구현한 공식 커넥터가 포함됐다. 이 커넥터를 통해 Spark, Databricks, Amazon EMR 작업에서 Milvus를 직접 읽기·쓰기 소스로 참조할 수 있다.
df = spark.read \
.format("milvus") \
.option("uri", "http://milvus:19530") \
.option("collection.name", "embeddings") \
.load()ETL 파이프라인에서 Milvus로의 적재와 Spark 분석 사이의 연결이 단순해진다.
Milvus 2.x와의 주요 차이
| 항목 | Milvus 2.x | Milvus 3.0 |
|---|---|---|
| 데이터 적재 방식 | Milvus로 복사 필수 | External Collections로 복사 불필요 |
| WAL 의존성 | Pulsar 또는 Kafka 필수 | Woodpecker 내장 옵션 추가 |
| 희소 벡터 인덱스 | 기본 지원 | SINDI 재설계로 성능 개선 |
| 스키마 변경 | 컬렉션 재생성 필요 | 온라인 add/backfill/drop |
| Spark 통합 | 별도 커넥터 필요 | DataSource V2 공식 지원 |
| 구조체 필드 | 미지원 | StructArray 지원 |
운영 관점
External Collections의 전제 조건
External Collections를 사용하려면 Milvus 프로세스가 해당 오브젝트 스토리지에 접근할 수 있어야 하고, 레이크하우스 데이터가 지원 포맷(Iceberg, Lance, Parquet, Vortex)으로 저장돼 있어야 한다. Iceberg REST Catalog를 사용하는 환경에서는 카탈로그 경로를 Milvus에 등록하는 추가 설정이 필요하다.
마이그레이션 고려사항
Milvus 2.x → 3.0 마이그레이션 시 주의할 점:
- WAL 경로: Pulsar/Kafka를 Woodpecker로 교체할 경우 기존 WAL의 미처리 메시지 처리 방법을 확인해야 한다.
- 스키마 변경 기능: 온라인 스키마 진화는 3.0에서 새로 추가된 기능이므로 2.x에서 마이그레이션한 컬렉션에 적용할 때 동작 방식을 검증해야 한다.
- SINDI 인덱스 재구축: 기존 희소 벡터 인덱스는 SINDI 포맷으로 재구축이 필요할 수 있다.
오픈 사항
Open question: External Collections에서 Iceberg 테이블의 스냅샷 시점 쿼리(time travel)가 Milvus 쿼리 레이어에서 지원되는지 여부. 현재 릴리스 문서에서 명확한 언급을 찾지 못했다.
정리
Milvus 3.0은 "벡터 데이터베이스는 데이터를 가져온다"는 기본 전제를 변경한 릴리스다. External Collections는 레이크하우스에 이미 존재하는 데이터 위에 인덱스를 얹는 방식으로 적재 비용과 이중화를 줄인다. Woodpecker는 운영 복잡도의 주요 원인 중 하나였던 외부 메시지 큐 의존성을 선택 사항으로 만들었다. 벡터 검색이 레이크하우스 스택의 일부로 자연스럽게 녹아드는 방향에서, 이번 릴리스는 의미 있는 이정표다.
References
- Zilliz, "Announcing Milvus 3.0," Zilliz Newsroom, July 29, 2026. https://zilliz.com/news/milvus-3-0-lake-native-vector-database
- Milvus Blog, "Announcing Milvus 3: Lake-Native Vector Search & a More Powerful Retrieval Engine," July 29, 2026. https://milvus.io/blog/announcing-milvus-3-lake-native-vector-search-and-a-more-powerful-retrieval-engine.md
- LF AI & Data Foundation, "Milvus 3.0 Is Here," July 29, 2026. https://lfaidata.foundation/blog/2026/07/29/milvus-3-0-is-here-lf-ai-datas-open-source-vector-database-goes-lake-native/
- Milvus GitHub Releases. https://github.com/milvus-io/milvus/releases/tag/v3.0.0