벡터 데이터베이스(Vector Database)는 벡터 형식으로 저장된 데이터(고차원 임베딩 데이터)를 관리하고, 유사도 기반 검색 및 작업을 최적화하도록 설계된 데이터베이스이다.
| 구분 | 벡터DB | RDB (관계형 DB) |
|---|---|---|
| 데이터 구조 | 고차원 벡터 (수치 데이터) | 테이블 (행 & 열 구조) |
| 검색 방식 | 유사도 검색 (최근접 이웃, ANN) | 정확한 검색 (SQL 기반 검색) |
| 주요 용도 | - RAG (검색 증강 생성) - 추천 시스템 - 이미지/음성/텍스트 유사 검색 | - 전통적인 CRUD 시스템 - 금융, ERP, 재고 관리, 사용자 데이터 관리 |
| 데이터 저장 형식 | (ID, 벡터, 메타데이터) | (ID, 속성 값, 관계) |
| 검색 속도 | 대규모 데이터에서도 빠름 (ANN 사용) | 복잡한 조인 연산 시 속도 저하 |
| 확장성 | 고차원 데이터에 최적화 | 정형 데이터 저장에 최적화 |
| 예제 DB 엔진 | FAISS, Pinecone, Weaviate, ChromaDB | MySQL, PostgreSQL, Oracle |
(1) 벡터DB 검색 방식 (유사도 검색)
# 예제 (FAISS)
query_vector = model.encode("고대 유물에 대해 알고 싶어").astype("float32")
D, I = index.search(np.array([query_vector]), k=3) # 가장 가까운 3개 찾기
(2) RDB 검색 방식 (정확한 검색)
# 예제 (MySQL)
SELECT * FROM museum_data WHERE location = '국립중앙박물관';
| 비교 항목 | FAISS | Pinecone | ChromaDB |
|---|---|---|---|
| 운영 방식 | 로컬(오프라인) | 클라우드(온라인) | 로컬 + 클라우드 |
| 검색 방식 | ANN(Approximate Nearest Neighbor) | ANN + 메타데이터 필터링 | ANN + 메타데이터 |
| 확장성 | 제한적 (로컬 메모리 사용) | 클라우드 확장 가능 | 로컬 + 경량 클라우드 |
| 설치 방식 | Python 패키지 (faiss) | API 사용 (유료) | Python 패키지 (chromadb) |
| 속도 | 빠름 | 빠름 (대량 데이터 최적화) | 보통 |
| 데이터 저장 | 인덱스 파일 저장 | 클라우드 저장 | 로컬 DB (duckdb 기반) |
| 메타데이터 지원 | ❌ 제한적 | ✅ 지원 | ✅ 지원 |
Chroma DB와 FAISS의 차이점이 잘 와닿지 않아서 '벡터DB를 사용하게 된다면 어떤 기준으로 선택해야할까' 를 고민하며 두 벡터DB를 비교한 자료를 찾아보았다. 아래 이미지는 50개의 질문을 활용하여 단일 문서 검색, 3개 문서 검색, 6개 문서를 검색할 때, 각각의 정밀도와 재현율, 검색 시간 등을 비교한 실험의 결과이다.

The same table also highlights FAISS’s superiority over Chroma in both context precision and recall. FAISS is also faster in terms of similarity search, taking only 1.81 seconds to retrieve 50 contexts from 50 questions, while Chroma lags behind with 2.18 seconds.
...원문과 이미지 출처: https://medium.com/@stepkurniawan/comparing-faiss-with-chroma-vector-stores