3P by neo 3달전 | favorite | 댓글 1개

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 확장이라는 장점은 있지만 성능 면에서는 검증이 필요함.
Hacker News 의견
  • 저자가 직접 댓글에 참여하며 새로운 프로젝트인 sqlite-vec에 대해 소개하고 있음. 아직 개발 중이지만 몇 주 내로 v0.1.0을 목표로 하고 있음. 이전에 개발했던 sqlite-vss의 후속 프로젝트 성격임.
  • sqlite-vec은 임베디드 벡터 검색에 최적화된 라이브러리로, 다양한 OS와 모바일, 라즈베리파이 등에서 동작 가능함. 저자는 Beepy라는 시맨틱 검색 앱에 sqlite-vec을 적용해보고 있음.
  • 768차원 벡터를 96바이트에 어떻게 저장하는지에 대한 질문이 있었음. 보통은 float64로 6144바이트가 필요한데, 압축이나 근사값 저장 등의 기법이 궁금하다는 반응임.
  • sqlite-vss를 사용해봤던 개발자가 RAG 모델 개발에 도움이 되었다며 감사 인사를 전함. 우분투 환경에서 잘 동작했다고 함.
  • DuckDB에서도 유사한 벡터 유사도 검색 익스텐션을 최근 공개함.
  • Qdrant 벡터 DB를 활용한 AI RAG 앱 개발 경험을 얘기하며, sqlite-vec 활용에 대한 기대감을 나타냄.
  • SQLite의 public API만 사용할 것인지, amalgamation에 직접 통합될 것인지 궁금해 함. 웹어셈블리 바인딩 관점에서 배포 방식에 대한 고민을 얘기함.
  • OSS 프로젝트가 특정 니즈에 부합하는 걸 좋아한다는 댓글. 타입스크립트 생태계에서 활용 가능한 아이디어를 고민 중이라고 함.
  • 몇 달 전 sqlite-vss 이슈에 대한 해결책이 될 수 있을 것 같다는 반응.
  • 모든 피쳐 벡터의 차원 수를 어떻게 일치시키는지 궁금해 함. 문자열을 float으로 변환해 저장하는 것 같은데, 해밍 거리 계산시 길이가 다른 벡터도 고려되는지 확인 필요함.
  • README 문서 기반 개발 방식으로 보인다는 의견. 문서 작성부터 시작했는지 궁금해 함.