SQLite에서 벡터 검색을 위한 새로운 확장 기능 개발 중
- sqlite-vec은 SQLite에서 벡터 검색을 위한 새로운 확장 기능으로, 기존의 sqlite-vss를 대체할 예정임
- SQLite가 실행되는 모든 환경(WASM 포함)에서 실행 가능한 임베디드 가능한 "충분히 빠른" 벡터 검색 도구가 될 것임
- 아직 개발 중에 있지만, 준비되는대로 repo를 확인해 볼 것을 추천함
sqlite-vec의 특징
- 순수 C로 작성되며 의존성이 없는 SQLite 확장 기능
- 빠른 벡터 검색을 위한 사용자 정의 SQL 함수와 가상 테이블 제공
- 벡터 작업(양자화, JSON/BLOB/numpy 변환, 벡터 연산 등)을 위한 기타 도구와 유틸리티 제공
- SQL만으로 벡터 검색 가능 (CREATE VIRTUAL TABLE, INSERT INTO, SELECT 문 사용)
sqlite-vec의 장점
- 순수 C로 작성되어 모든 플랫폼(Linux/MacOS/Windows), 웹 브라우저(WebAssembly), 모바일 폰, 라즈베리 파이 등에서 실행 가능
- 바이너리 크기가 수백 KB 수준으로 작음
- 메모리 사용량을 더 잘 제어할 수 있음 (벡터를 청크 단위로 저장하고 KNN 검색 시 청크별로 읽어들임)
- PRAGMA mmap_size 명령으로 인메모리 속도 향상 가능
- Matryoshka 임베딩 등 가변 길이 임베딩 및 int8/bit 벡터 지원으로 이진 및 스칼라 양자화 가능
- 속도, 정확도, 디스크 공간에 대한 더 많은 제어 가능
- 처음에는 전수 검색 벡터 검색만 지원하지만 향후 IVF + HNSW 추가 예정
데모
- 브라우저에서 바로 sqlite-vec 실행 가능 (movies.bit.db SQLite 데이터베이스 로드됨)
- articles 테이블에는 title, release_date, overview 등의 컬럼이 있음
- vec_movies 가상 테이블에는 overview 컬럼의 임베딩 벡터가 저장됨 (768차원 바이너리 벡터, 96바이트)
- KNN 스타일 검색으로 선택한 영화와 가장 유사한 영화 10개 검색 가능
sqlite-vss의 문제점
- Linux + MacOS에서만 작동 (Windows, WASM, 모바일 기기 등 지원 안됨)
- 벡터를 모두 메모리에 저장
- 트랜잭션 관련 버그와 이슈 다수
- 컴파일이 매우 어렵고 시간이 오래 걸림
- 일반적인 벡터 연산(스칼라/바이너리 양자화) 누락
- Faiss에 의존하기 때문에 발생하는 문제들
sqlite-vec 개발 현황
- 핵심 기능은 작동하지만 오류 처리 및 테스트가 거의 없는 상태
- sqlite-vec.c 파일에 246개의 TODO 있음
- 모든 TODO 완료 후 문서, 데모, 바인딩 등과 함께 sqlite-vec v0.1.0 출시 예정 (한 달 정도 목표)
GN⁺의 의견
- 다양한 플랫폼과 환경에서 실행 가능한 임베디드 벡터 검색 도구라는 점이 매력적임. 특히 웹 브라우저에서 WASM으로 실행 가능한 점이 흥미로움.
- 메모리 제어, 가변 길이 임베딩, 양자화 등 최신 벡터 검색 기술을 반영한 점도 장점. 속도, 정확도, 저장 공간 등을 유연하게 제어할 수 있을 것으로 보임.
- 다만 전수 검색만 지원하는 것은 한계. 데이터 크기가 커지면 검색 속도 문제가 생길 수 있음. IVF+HNSW 등의 ANN 알고리즘 지원이 시급해 보임.
- 또한 아직 개발 초기 단계여서 실제 프로덕션 환경에서 사용하기에는 무리가 있어 보임. 안정화까지 좀 더 시간이 필요할 듯.
- Faiss 등 기존 벡터 검색 라이브러리와의 벤치마크 비교도 필요해 보임. 순수 SQLite 확장이라는 장점은 있지만 성능 면에서는 검증이 필요함.