VectorDB · Rust
English | 简体中文 | 日本語 | Español | Português do Brasil
Rust로 재구현된 독립형 벡터 데이터베이스이며, 임베드 가능한 엔진(embeddable engine), HTTP 서비스, 트랜잭션 지속성(transactional persistence), 그리고 별도의 정적 웹사이트를 갖추고 있습니다.
상태: 0.1.0 Alpha. Milvus의 데이터 모델과 REST v2 요청 스타일에서 영감을 받아 VectorDB는 사용 가능한 독립형 기능 세트를 구현합니다. Milvus의 분산 인프라 대부분은 구현되지 않았으며, VectorDB는 Milvus / PyMilvus의 대체품이 아닙니다. 정확한 범위는 feature comparison를 참조하십시오. 이전 C++ 구현체, 문서 및 웹사이트는 제거되었습니다.
빠른 시작 (Quick start)
Rust 1.89+, Cargo, 그리고 C 컴파일러 도구 체인(번들된 SQLite 컴파일용)이 필요합니다. macOS에서는 Xcode Command Line Tools를 사용하거나 Linux에서는 시스템 C 컴파일러를 사용하십시오. 외부 데이터베이스 서비스는 필요하지 않습니다.
cargo build --release --locked
./target/release/vectordb serve
서버는 기본적으로 127.0.0.1:19530에서 리스닝하며, 데이터를 data/vectordb.sqlite에 저장합니다. 다른 터미널에서는:
curl http://127.0.0.1:19530/healthz
bash examples/quickstart.sh
이 예제는 demo 컬렉션을 생성하고, 두 개의 엔티티를 삽입하며, 유사한 벡터를 검색하고, 스칼라 필터(scalar filters)를 적용합니다. 다시 실행하기 전에 demo를 삭제하거나 다른 컬렉션 이름을 사용하십시오.
현재 기능 (Current capabilities)
- 여러 데이터베이스, 컬렉션, 명시적 스키마 / 빠른 컬렉션 생성, 파티션(partitions), 컬렉션 별칭(aliases), 이름 변경, 로딩 및 해제.
- Int64 / VarChar 기본 키와 자동 ID; 스칼라 필드, JSON, 배열(Array), Nullable 필드, 기본값, 동적 필드.
- 배치 삽입 (Batch insert) / 전체 엔티티 업데이트(upsert), 쿼리/조회/삭제(get/delete), 카운팅, 정렬, 페이지네이션.
- FloatVector, SparseFloatVector, BinaryVector; 코사인(COSINE), 내적(IP), L2 (제곱 거리), 해밍(HAMMING), 자카드(JACCARD).
- FLAT 정확 검색(exact search), IVF_FLAT, HNSW; 스칼라 사전 필터링(pre-filtering), 범위 검색(range search), 그룹화 검색(grouping search), 다중 쿼리 벡터.
- 다중 벡터 검색 융합: RRF 및 정규화된 가중치 순위 지정(normalized weighted ranking).
- 완전 동기화(FULL synchronization)가 적용된 SQLite WAL; 배치 트랜잭션, 충돌 복구(crash recovery), 독점 프로세스 잠금(exclusive process lock), 스냅샷 백업, 스트리밍 JSONL 가져오기/내보내기.
- Bearer 토큰, 요청 크기 및 동시성 큐 제한(concurrency queue limits), 상태 확인(health checks), Prometheus 요청/오류 카운터, 그리고 우아한 종료(graceful shutdown).
임베딩은 자동으로 생성되지 않습니다. 애플리케이션이 벡터를 생성하고 제출해야 합니다. 데이터베이스 로직, 필터, 인덱스 알고리즘 및 HTTP 서비스는 Rust로 작성되었습니다. SQLite는 C로 구현된 내장 지속성 종속성(embedded persistence dependency)입니다.
요청 예시 (Request examples)
curl -sS localhost:19530/v2/vectordb/collections/create \
-H 'Content-Type: application/json' \
-d '{"collectionName":"demo","dimension":3}'
...
응답: {"code":0,"data":[{"id":1,"title":"Rust","distance":1.0}]}.
임베디드 Python (Alpha)
저장소 루트에서 CPython 3.9+ 및 위에 설명된 Rust/C 툴체인을 사용하여 설치합니다. 일치하는 미리 컴파일된 휠(wheel)은 Rust/C 컴파일러가 필요하지 않습니다. 이 패키지는 현재 로컬에서 빌드되었으며 PyPI에 게시되지 않았습니다. 배포 및 임포트 이름 모두 vectordb_io입니다. 게시 후에는 pip install vectordb_io로 설치합니다.
릴리스 휠은 Apple Silicon Mac (macOS 11+) 및 Linux x86_64 (glibc 2.17+)을 대상으로 합니다. 플랫폼 검증 기록을 참조하십시오.
Supports file and memory databases, CRUD(생성, 읽기, 업데이트, 삭제), 검색, 전체 엔티티 upsert, 스냅샷, 그리고 원시 execute() 작업을 지원합니다. 반환 전에 쓰기를 커밋하며, 컨텍스트 매니저가 데이터베이스를 닫고 파일 잠금을 해제합니다. 다시 실행하기 전에 새 컬렉션 이름을 사용하거나 기존 컬렉션을 삭제하십시오. 설치, API 및 동시성 세부 정보는 Python 가이드를 참조하십시오.
임베디드 Rust
use serde_json::json;
use vectordb_engine::Engine;
...
리포지토리에 포함된 전체 예제를 실행하십시오: cargo run -p vectordb-engine --example embedded.
유효성 검사 (Validation)
cargo fmt --all --check
cargo test --workspace --locked
cargo clippy --workspace --all-targets --locked -- -D warnings
...
테스트는 트랜잭션 롤백, 스키마 유효성 검사, 필터링, 기본 키 정밀도, 로드 상태, 데이터베이스/파티션 격리(isolation), 인덱스 새로 고침, ANN 비교, 하이브리드 검색, 스냅샷, 독점 잠금(exclusive locking), 데이터베이스 손상, HTTP 인증 및 동시 쓰기를 다룹니다. smoke.py는 임시 데이터베이스를 사용하여 실제 프로세스를 시작하고, SIGKILL 이후에도 승인된 쓰기 작업이 복구될 수 있는지 확인합니다. 이 스크립트는 data/의 실제 데이터를 사용하지 않습니다.
문서 (Documentation)
디렉토리: crates/engine — 데이터베이스 엔진; crates/server — HTTP / CLI; docs — 문서; examples — 예제; website — 웹사이트. 웹사이트는 vectordb.io에서 GitHub Pages로 별도 배포됩니다.