티스토리 뷰

DevOps/DB

벡터 DB 비교

brad.min 2024. 2. 21. 17:46
반응형

회사에서 챗봇에 적용할 RAG를 도입하기 위해 벡터 DB 중에 Postgresql에 PGvector를 사용했다. 선임 분이 PG 벡터를 사용하자고 했는데 성능적으로 조사해야할 필요가 있어 보였다. 글을 이것저것 찾아보다가 흥미로운 블로그가 있어 정리를 해보았다.

 

 

Comparing Vector Databases

If you are a developer interested in AI, there is a good chance that you may have started working with Large Language Models such as…

adamsblum.medium.com

 

1. 로드 시간 (3,680 개의 벡터 로드)

1) Pinecone:

- 벡터 로딩 시간: 15.83 초

- 평균 로딩 시간: 4.3 milliseconds per vector

 

2) Weaviate:

- 벡터 로딩 시간: Pinecone과 비슷

- 평균 로딩 시간: 5 milliseconds per vector

 

3) Milvus:

- 벡터 로딩 시간: 37.53 초

- 평균 로딩 시간: 1 milliseconds per vector

- 벡터 로딩에는 별도의 인덱스 생성 단계가 필요함.

 

4) pgvector:

- 벡터 로딩 시간: 351.49 초

- 인덱스 생성 시간: 0.28 초

- 평균 로딩 시간: 9.5 milliseconds per vector

로딩 성능 요약:

- 벡터 로딩 성능 면에서 Milvus가 압도적으로 우수함.

- Pinecone과 Weaviate는 벡터를 배치로 업로드할 수 있으며, 성능 면에서 비슷한 특성을 보임

- pgvector는 Postgres의 제약으로 인해 로딩 속도가 느림.

 

 
 

2. 검색 성능

유사도 기준 상위 열 개의 벡터를 검색하는 과정을 수행. 두 벡터간의 거리를 기준으로 유사도를 판단하는 Exact Nearest
Neighbor search를 사용했다. 이를 구현하기 위한 방법으로는 일반적으로 사용하는 코사인 유사도를 사용. Pgvector 는 코사인 유사도의 기능을 하는 옵션 두가지 (ANN, 나머지는 잘..) 가 있어 이를 사용했다.
 
- Pinecone의 평균 검색 시간은 0.88초이며, 검색 품질은 평균 0.03 (top k의 평균 유사도 스코어)
 
- Weaviate의 평균 검색 시간은 0.12초로 빠르며, 검색 품질은 평균 0.03
 
- Milvus의 검색 평균 시간은 0.95초, 검색 품질은 평균 0.028
 
- Postgres의 검색 시간은 0.9초로 Pinecone과 유사하며, 가장 높은 품질인 0.08을 보입니다.
 
 
 

3. 코드 경험

전반적으로 pgvector가 SQL을 확장하였기 때문에 개발자라면 pgvector가 사용하기 수월하다는 내용

 

 

4. 특징

특징도 내가 이해할 수 있는 수준에서 정리해보자면..

 

1) Weaviate:

- GraphQL 쿼리 언어 제공으로 복잡한 쿼리 및 데이터 검색 가능

- hybrid search 지원 (sparse 임베딩, LLM 임베딩 )

- 거리 기반 유사도는 제공하지 않는다.

 

2) Pinecone:

- 병렬 업서트 지원

- namespaced data? 데이터 지원

- 최근 하이브리드 검색 추가

- 오픈 소스가 아니다..

 

3) Milvus:

- 스케일 업이 가능해서 대규모 데이터를 다루는데 좋다.

- DiskANN 인덱싱 방법 지원

- 명시적으로 인덱스를 생성 해야함.

- 검색 품지이 다소 떨어짐.

 

4) Postgres:

- 단일 저장소로 모든 데이터, 벡터, 기타 데이터 저장 가능

- 검색 품질이 좋음.

- 로딩 시간이 느리고 검색이 느림

- 명시적으로 인덱스 생성 필요

 

 

결론적으로 시나리오가 많지 않은 챗봇 운영에 있어 응답률이 가장 높아야 하기 때문에 Postgres가 좋은 것 같다.

반응형

'DevOps > DB' 카테고리의 다른 글

[Redis] Docker-compose로 redis를 설치하기  (0) 2024.05.03
[mongoDB] 중복된 document 제거  (0) 2023.02.23
스칼라쿼리 원리  (0) 2021.02.06
[MySQL] show index from 테이블 해석  (0) 2021.01.22
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함