meilisearch/arroy
An Approximate Nearest Neighbors library in Rust, based on random projections and LMDB and optimized for memory usage :boom:
해결하는 문제
Arroy는 근사적인 최근접 이웃(ANN) 검색을 위한 Rust 라이브러리입니다. 고차원 공간 내에서 타겟 벡터와 가장 가까운 벡터를 찾을 수 있으며, 특히 수백만 개의 문서를 다루는 고차원 공간(예: 768 또는 1536 차원)에서 메모리 제약이 있는 검색 문제를 해결합니다.
작동 방식
Arroy는 랜덤 프로젝션을 사용하여 트리의 숲을 구축합니다. 각 노드에서 랜덤한 초평면이 공간을 두 개의 하위 공간으로 나눕니다. 이 과정을 여러 번 반복하여 숲을 만듭니다. 내적 거리(Dot Product distance)를 처리하기 위해 벡터를 내적 공간에서 쿼리에 적합한 코사인 공간으로 변환합니다.
대상 사용자
효율적이고 저메모리 벡터 검색이 필요한 애플리케이션을 개발하는 개발자들을 위한 것입니다. 특히 Rust를 사용하고, LMDB를 통해 여러 프로세스 간에 인덱스를 공유해야 하는 개발자에게 적합합니다.
주요 기능
- LMDB 기반 저장소: 메모리 매핑된 키-값 저장소를 사용하여 여러 프로세스가 동일한 데이터를 공유하고 원자적 수정을 수행할 수 있습니다.
- 저메모리 사용량: 작은 메모리 사용량을 최적화하여, 가용 RAM을 초과하는 대규모 데이터셋의 인덱싱이 가능합니다.
- 다양한 거리 메트릭: 유클리드, 맨하탄, 코사인, 그리고 내적(Dot) 거리 메트릭을 지원합니다.
- 병렬 접근:
rayon을 사용해 멀티스레드로 트리를 구축할 수 있으며, 다른 인덱스가 수정되는 동안에도 조회가 가능합니다. - 확장 기능: 쿼리 시 필터링 기능과 전체 재구성 없이 트리를 단계적으로 업데이트할 수 있습니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트