이동 가능한 스냅샷
변경 사항은 체크섬이 있는 WAL에 커밋됩니다. .rvec 스냅샷만 복사하려면 쓰기를 일시 중지한 상태에서 먼저 checkpoint()를 호출하세요. 그렇지 않으면 대응하는 스냅샷과 WAL을 함께 보관해야 합니다.
Recern Vector 0.2.0은 Rust, Python, Node.js, CLI를 위한 임베디드 벡터 데이터베이스입니다. 로컬 스냅샷과 WAL, HNSW 검색, int8 저장, 쿼리 실행 과정 설명을 제공합니다.
pip install recern-vectorv0.2.0 릴리스 노트(영문) Recern Workspace · 데모 데이터베이스

payment_patterns int8 컬렉션에서 ef 값에 따른 재현율과 지연 시간을 측정합니다.
2026-10-07에 공개된 0.2.0 이전의 벤치마크 기준 결과입니다. 이 수치는 int8이나 새로운 필터 플래너의 성능을 측정한 것이 아닙니다.
SIFT1M 재현율 0.95에서 faiss HNSW 대비 처리량
GloVe-100에서의 동일 비교
14코어에서 벡터 100만 개의 인덱스 구축 시간
SIFT1M 재현율 0.983에서의 쿼리 지연 시간 중앙값
변경 사항은 체크섬이 있는 WAL에 커밋됩니다. .rvec 스냅샷만 복사하려면 쓰기를 일시 중지한 상태에서 먼저 checkpoint()를 호출하세요. 그렇지 않으면 대응하는 스냅샷과 WAL을 함께 보관해야 합니다.
Rust, Python, 네이티브 Node.js 바인딩 또는 CLI로 애플리케이션 안에서 실행할 수 있습니다. 지원 플랫폼용 Node.js 바이너리는 릴리스에 첨부되어 있으며, npm에는 아직 게시되지 않았습니다.
각 검색의 전략, 방문한 노드, 필터 선택도, 소요 시간을 확인할 수 있습니다. 통계는 그래프 계층, 메모리 사용량, 검색으로 도달할 수 없는 레코드를 보여 주며, 직접 보유한 데이터로 재현율을 측정할 수 있습니다.
Python과 명령줄에서 같은 데이터베이스를 사용합니다. 오른쪽 출력은 레코드 20,000개에 메타데이터 필터를 적용한 실제 실행 결과입니다.
import recern_vector as rv
db = rv.Database.open_or_create("docs.rvec")
docs = db.create_collection("docs", dim=384, metric="cosine")
docs.upsert_many(ids, embeddings, metadatas)
hits = docs.search(query, k=5, filter={"lang": "en"})
docs.explain(query, k=5) # strategy, visited nodes, time$ recern-vector query docs.rvec docs --like doc-42 -k 3 \
--filter '{"lang": "en", "year": {"$gte": 2020}}' \
--explain
# id distance metadata
1 doc-42 -0.00000 {"lang":"en","year":2024}
2 doc-18861 0.63155 {"lang":"en","year":2022}
3 doc-10899 0.63834 {"lang":"en","year":2024}
strategy hnsw
ef 64
selectivity ~19.9% of records match the filter
visited 7,244 nodes
distances 7,330 computed
time 529 µsPython 바인딩은 요소별 변환 없이 NumPy float32 배열을 받습니다. 배치 삽입 시 모든 코어를 사용해 인덱스를 구축합니다.
컬렉션마다 m, ef_construction, ef_search를 설정할 수 있는 그래프 인덱스를 제공합니다. 정답 기준이 필요할 때는 정확 스캔을 사용할 수 있습니다.
컬렉션마다 차원과 거리 측정 방식을 고정합니다. 코사인 벡터는 저장할 때 정규화됩니다.
동등 비교, $in, 범위, 중첩된 $and, $or, $not을 지원합니다. 비용 기반 플래너가 필터 선택도를 샘플링하고 정확 검색 또는 HNSW를 선택해 탐색량을 조정합니다.
배치 삽입은 모든 코어로 인덱스를 구축합니다. 벡터 하나라도 유효하지 않으면 아무것도 기록하지 않습니다.
ID로 레코드를 교체하거나 삭제한 뒤, 압축 정리로 삭제된 레코드를 제외한 컬렉션을 다시 구축합니다.
stats(), explain(), estimate_recall()은 별도 도구가 아닌 API의 일부입니다.
CPython 3.11 이상용 PyO3 wheel이며 타입 힌트를 포함합니다.
init, create-collection, insert, query, inspect, recall, checkpoint, compact.
파일 버전 관리, 체크섬, 기준 파일을 이용한 호환성 테스트를 제공하며 기존 형식 1 스냅샷도 읽을 수 있습니다.
save()는 변경된 페이지를 WAL에 커밋하고, checkpoint()는 독립적으로 사용할 수 있는 스냅샷을 기록합니다. 복구 시 끝부분의 불완전한 레코드는 무시합니다.
컬렉션 단위의 int8 코드와 벡터별 스케일을 사용합니다. 보유한 데이터로 재현율을 측정하여 저장 공간과 정확도의 균형을 선택하세요.
Node-API 8, TypeScript 타입 정의, 워커에서 실행되는 searchAsync를 제공합니다. Linux x64, macOS arm64, Windows x64 빌드는 GitHub 릴리스에서 받을 수 있습니다.
Apple M3 Max에서 Python으로 쿼리를 하나씩 실행했으며, 각 수치 아래에 지연 시간 중앙값을 표시했습니다. 전체 보고서에는 인덱스 구축 시간, 디스크 크기, 측정 방법, 제한 사항도 포함되어 있습니다.
| 엔진 | SIFT1M | GloVe-100 |
|---|---|---|
| Recern VectorHNSW | 9,0410.11 ms | 6351.60 ms |
| faissHNSWFlat | 6,9610.15 ms | 3562.83 ms |
| LanceDBIVF_HNSW_SQ | 7311.34 ms | 미달 |
| LanceDBIVF_PQ, tuned | 2454.03 ms | 1675.93 ms |
| sqlite-vecexact scan | 1283.79 ms | 7140.43 ms |
데이터베이스 전체가 메모리에 들어가야 합니다. WAL은 디스크 쓰기를 줄이지만 save()는 전체 이미지를 인코딩하고 비교합니다. 체크포인트는 명시적으로 실행하며, 동시 쓰기는 직렬화됩니다. 오래된 상태의 쓰기 인스턴스는 데이터베이스를 다시 열어야 합니다.
Workspace는 pgvector 열과 인덱스, 서버가 지원하는 Redis 검색 인덱스와 벡터 세트, 커밋된 WAL 변경 사항이 반영된 Recern Vector 스냅샷을 검사합니다. f32와 int8을 포함한 Recern Vector 컬렉션에서 재현율을 측정할 수 있습니다.
워크스페이스 살펴보기