↓ 본문으로 건너뛰기
Vector DB란 무엇일까? 그리고 어떤 Vector DB를 사용해야할까? (2)
  1. 글/

Vector DB란 무엇일까? 그리고 어떤 Vector DB를 사용해야할까? (2)

작성자
Kim Won Tae
고객의 현장에서 업무 구조와 환경, 그리고 잠재된 불편함을 분석하고, 사용자 경험을 개선할 수 있는 도메인 특화 AI 서비스 및 에이전트를 개발합니다.

이전 글에서는 Vector DB가 무엇인지와 Vector DB에서 데이터를 검색하기 위한 방법들에 대해서 알아보았다.

오늘은 Vector DB의 종류들과 특성, 장단점에 대해 분석해보려 한다.


3. 어떤 Vector DB를 사용해야할까?
#

VectorDB를 선택할때는 현재 진행하는 서비스 또는 프로젝트의 상황과 환경에 비추어 적절한 DB를 선택할 수 있어야 한다.

따라서, Vector DB의 여러 요소들을 살펴, 적합한 DB를 선택해야하는데, 아래 기준들을 면밀히 살펴봐야한다.


1) 성능과 속도

: 검색 속도

대규모 데이터셋에서 검색 속도는 가장 중요한 요소 중 하나이다. 검색 알고리즘의 효율성과 데이터 인덱싱 방법이 검색 속도에 큰 영향을 미치게 된다.

: 삽입 및 업데이트 속도

데이터의  삽입과 업데이트 속도 또한 벡터 데이터베이스의 성능을 결정하는데 중요하게 고려해야할 요소에 해당된다.


2) 확장성

: 수평 확장성

데이터베이스가 물리적으로 다른 서버에 데이터를 분산하여 저장하고 처리할 수 있는 능력을 의미하는데,

데이터의 양이 증가함에 따라 데이터베이스 시스템을 쉽게 확장할 수 있는지를 확인해야한다.

: 수직 확장성

하드웨어의 업그레이드를 통해 성능을 향상 시킬 수 있는 능력을 의미한다.

이는 초기 비용은 적지만 ,장기적으로는 한계가 있을 수 있기 때문에 중요한 고려요소에 해당한다.


3) 지원하는 검색 알고리즘 및 기능

: ANN(근사 최근접 이웃 검색)

대부분의 Vector DB는 ANN 검색을 지원한다.

다양한 ANN 알고리즘 중에서 특정 데이터베이스가 어떤 알고리즘을 지원하고있는지가 매우 중요하다.

: 고급 인덱싱 기법

데이터 인덱싱은 검색 성능에 큰 영향을 미친다. 

예를들어, HNSW, IVF, PQ와 같은 인덱싱 기법을 빠짐없이 지원하는지는 매우 중요한 요소가 된다.


4) 용이성 및 관리 편의성

: 설치 및 설정

데이터 베이스의 설치와 설치 과정이 간단하고 문서화가 잘 되어 있는지 확인해야한다.

: 관리 도구 및 인터페이스

관리자 및 개발자가 데이터베이스를 쉽게 관리하고 사용할 수 있는 도구와 인터페이스를 지원하는지 확인해야한다.


5) 지원 및 커뮤니티

: 공식문서

충분하고 명확한 공식 문서가 있는지 살펴본다

: 커뮤니티 및 지원

활발한 커뮤니티 지원과 개발자 지원이 있는지 확인한다.

커뮤니티의 크기와 활동성은 문제 해결에 도움이 될 수 있고, 지속적인 개선이 가능한지를 판단할 수 있는 잣대가 된다.


6) 비용

: 라이선스 비용

오픈소스인지 상용 라이선스가 필요한지, 그리고 비용이 어떻게 구성되는지를 확인해야한다.

: 운영비용

클라우드 기반 서비스를  사용할 경우 발생할 수 있는 운영 비용도 고려해야 한다.


자, 이제 어떤 요소들을 중점적으로 판단해야하는지 확인했으므로,

아래 테이블을 통해 각 Vector DB들의 특징들을 자세히 살펴보고 현재 진행하려는 프로젝트의 환경과 목적에 부합하는

Vector DB를 선택할 수 있다.

Vector DB오픈소스 유무지원언어지원 검색 알고리즘특징
WeaviateOPython, GO, Java, JSCustom HNSW- NLU기능 내장을 통해 텍스트 데이터에 대한 시맨틱 검색 강화 - GraphQL API 지원을 통해 간편한 질의 가능
MilvusOPython, GO, C++ANN, HNSW, ANNOY- 대규모 데이터셋에 강점 - 다양한 인덱싱 알고리즘 지원 - 높은 확장성 및 검색 성능 - K8s 를 통한 클라우드 배포 가능
VespaOJava, C++HNSW(graph)- 실시간 인덱싱과 데이터처리에 최적화 - 자동화된 스케일링 - 설정과 관리방법은 다소 복잡 - 대규모 프로젝트에만 초점이 맞춰짐
ValdOGoNGT- K8s 기반의 자동화된 운영 및 확장성 - 설정과 운영 복잡
ChromaOPython, JSHNSW- 사용법 간단 - http방식, 디스크저장방식, 인메모리 방식을 선택할 수 있음
QdrantORustHNSW(graph)- Json기반의 REST API와 함께 직관적인 필터링(조회조건 설정) - 사용 난이도 낮음, 빠른검색
PineconeX-복합으로 사용하며, 독점 상태- 클라우드 기반(비용 발생) - 데이터양에 따른 오토 스케일링 가능 - 간단한 API 사용법 - 사용 난이도 낮음
ElasticSearchX-Neural hashing / Hamming distance- 커뮤니티 - 전문 vector DB에 비해 벡터 검색기능의 제한 - 설정 및 관리 복잡

마치며
#

결국, 어떤 Vector DB를 도입해야할지에 대해 고민할때는, 적용에 앞서 Vector DB가 꼭 필요한지와 적합성에 대해서 꼭 고민이 필요하다.

Vector DB가 모든 사례에서 긍정적인 효과를 기대할 수 있는것은 아니며, 아래의 경우에 해당한다면

도입효과는 반감되거나 오히려 추후에 서비스를 제공함에 있어 리스크로 작용할 수 있다.

먼저, 다루고자 하는 데이터가 모두 vector data인지 검토해야한다.

만약 vector data뿐아니라 다양한 정형데이터도 함께 관리되어야하며 이미 사용중인 DB가 있을 경우에는

위의 전문 Vector DB가 적합하지 않을 수 있고, ANN, NN을 지원해주는 기존의 DB를 활용하는것도 방법이다.

postgres의 pgvector과 같은 대안들을 고려해볼 수 있는것이다.

또한, 저장된 데이터의 Embedding의 dimension이 클 경우, 검색 알고리즘의 정확도가 낮아질 수 있기 때문에

embedding size를 고려하여 다른 방법을 강구하는것이 더 좋은 방향일 수도 있다.

그리고, 데이터베이스에 수록할 데이터가 매우 클 경우에도 데이터를 임베딩하고 인덱싱하는 작업 자체에, 많은 시간과 리소스가 필요하게 되므로, 지속적인 데이터베이스 업데이트와 인덱싱이 이뤄져야할 경우 문제가 될 수 있다.

주어진 쿼리에 대해 데이터베이스 내 데이터들과 유사도를 계산함에 있어서도, batch로 처리할지 realtime으로 처리할지에 대한

고민 또한 필요하기 때문에 고려할 부분이 많아진다.

따라서, Vector DB를 적용하기 전에, 먼저 복합적인 문제 요소를 다각도로 분석하여, Vector DB가 꼭 필요한지,

충분히 적합한지에 대한 검토가 깊게 이루어지는 것이 선행되어야 하겠다.

Reference
#

https://hotorch.tistory.com/406

https://www.ethanrosenthal.com/2023/04/10/nn-vs-ann/

https://medium.com/thirdai-blog/understanding-the-fundamental-limitations-of-vector-based-retrieval-for-building-llm-powered-48bb7b5a57b3