# SQLite 벡터 검색 확장 기능 개발 중

> Clean Markdown view of GeekNews topic #14639. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=14639](https://news.hada.io/topic?id=14639)
- GeekNews Markdown: [https://news.hada.io/topic/14639.md](https://news.hada.io/topic/14639.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-05-04T10:01:10+09:00
- Updated: 2024-05-04T10:01:10+09:00
- Original source: [alexgarcia.xyz](https://alexgarcia.xyz/blog/2024/building-new-vector-search-sqlite/index.html)
- Points: 3
- Comments: 1

## Topic Body

### 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 확장이라는 장점은 있지만 성능 면에서는 검증이 필요함.

## Comments



### Comment 24946

- Author: neo
- Created: 2024-05-04T10:01:10+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=40243168) 
* 저자가 직접 댓글에 참여하며 새로운 프로젝트인 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 문서 기반 개발 방식으로 보인다는 의견. 문서 작성부터 시작했는지 궁금해 함.
