datastax/jvector
JVector: the most advanced embedded vector search engine
해결하는 문제
JVector는 고차원 공간에서 정확한 최근접 이웃 검색(KNN)이 비현실적이며 느려지는(선형 스캔) "차원의 저주" 문제를 해결하기 위해 설계되었습니다. 대략적인 최근접 이웃(ANN) 검색을 로그 시간 내에 수행하여 대규모 데이터셋을 효율적으로 검색할 수 있도록 합니다.
작동 방식
JVector는 HNSW(Hierarchical Navigable Small Worlds)와 DiskANN(Vamana 알고리즘)의 아키텍처적 강점을 결합한 그래프 기반 인덱스입니다. 다층 구조를 사용합니다:
- 상위 레이어: 이들은 메모리 내 인접 리스트로 유지되어 디스크 I/O 없이 빠른 탐색이 가능합니다.
- 하위 레이어: 이 레이어는 디스크에 저장됩니다. 성능을 최적화하기 위해 JVector는 두 단계 검색 전략을 사용합니다:
- 첫 번째 단계: 메모리에 보관된 벡터의 손실 압축 표현(예: Product Quantization(PQ), Binary Quantization(BQ), Fused PQ)을 사용하여 후보를 좁힙니다.
- 두 번째 단계: 디스크에서 읽은 더 정확한 표현(예: 전체 해상도 float32 벡터 또는 NVQ)을 사용하여 검색을 정밀화합니다.
또한 JVector는 이 두 단계 검색을 사용하여 인덱스 자체를 구축할 수 있어, 시스템 메모리보다 큰 인덱스를 생성할 수 있습니다.
대상 사용자
Java 생태계(Java 11부터 Java 20 이상까지 지원)에서 작동하는, 빠르고 확장 가능한 의미적 검색 또는 벡터 데이터베이스를 구축하는 개발자들.
주요 특징
- 하이브리드 아키텍처: HNSW의 계층 구조와 DiskANN의 Vamana 알고리즘을 통합.
- 메모리 효율성: 두 단계 검색 설계로 메모리 사용량과 지연 시간을 줄이면서 정확도를 유지.
- 양자화 지원: PQ, BQ, NVQ를 포함한 다양한 양자화 기법을 지원.
- 확장 가능한 구축: 블로킹되지 않는 동시성 제어로 인덱스 구축이 CPU 코어 수에 비례하여 확장 가능.
- 메모리보다 큰 인덱스: 사용 가능한 RAM을 초과하는 인덱스 구축이 가능.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트