벡터 데이터베이스 가이드

최근에 서비스에 벡터 DB를 도입하게 되면서 조사를 이래저래 좀 해봤다.

근데 벡터DB 자체가 뜬지 오래지 않아서인지, 신뢰할만한 벤치마크 정보도 별로 없고, 정신없이 난립만 하는 느낌이 좀 있다. 게다가 기술 베이스에 대해 전체적으로 잘 정리된 자료도 잘 없는거같아서 조금 헤맸다.

헤매는 나그네들에게 지침이 될수 있게끔 정리를 한번 해본다.



기반 지식

다음 내용들은 미리 알아두는 것이 좋다.
그래야 벡터 DB의 사용 구조나, 기술 판단에 최소한의 길을 잡을 수 있을 것이다.

  1. 벡터 검색의 일반적인 사용 구조와, 유사도 알고리즘
    https://blog.naver.com/sssang97/223790220320

  2. 벡터 DB의 일반적인 인덱스 구조: HNSW
    https://blog.naver.com/sssang97/223845582324

  3. 벡터 압축 매커니즘: 양자화
    https://blog.naver.com/sssang97/223848217468




DB 평가 및 선택 기준

AI로 크게 hype이 생긴만큼 벡터 DB들은 꽤 많고, 선택지도 많다.
하지만 각자 장점으로 삼는 부분들이 다르고 제약도 다르기 때문에 성격을 잘 파악하고 고르는 것이 중요하다.
내가 파악한 각 벡터 DB들이 가진 장단점이나 선택할만한 근거들을 나열해보겠다.

비-전문 벡터 DB로서 벡터 DB를 부가기능으로 제공하는 것은 Elasticsearch, PostgreSQL(pgvector), Redis, MongoDB(Atlas), AWS Opensearch 등이 있다.
그리고 전문 벡터 DB로 유명한 것들은 Qdrant, Pinecone, Milvus 정도가 있다.

이 중 클라우드로만 지원되는 VectorDB인 Pinecone, AWS Opensearch, MongoDB Vector Search는 대상에서 제외했다. 비용 최적화가 필요한 수준에 이른다면 직접 Self-Host로 구성하는 것도 고려해야 하기 때문이다.

그리고 인메모리라 데이터 확장에 큰 한계가 있는 Redis는 바로 걸러졌다. 내 생각에 이건 프로토타이핑 이상의 가치는 없을듯하다.

사전 필터링(pre-filtering) 지원 여부도 선택의 주요 근거 중 하나가 될 수 있다.
대표적으로 pgvector는 사전 필터링을 지원하지 않는다. Elasticsearch, Qdrant, milvus는 사전 필터링을 지원한다. 하지만 사전 필터링 구현 방식도 각각 다 달라서 성능/정확도에 차이가 있다.

아무튼 나는 결과적으로 pgvector, elasticsearch, milvus, qdrant 정도만 후보로 두고 부하테스트를 해봤다.
공통적으로 메모리 8GB, 1cpu 사양을 주고, 길이 256짜리 벡터를 1000만개 정도만 넣고 갈궜다. 의도적으로 각박한 환경을 조성했다.

pgvector

elasticsearch

milvus

qdrant

결론적으로 나는 사용성과 성능, 비용이 가장 균형잡혔다고 판단한 qdrant를 선택했다.
qdrant Cloud도 경쟁이 많아서인지 그렇게 비싸진 않았고, Self-Host 관리 용이성도 가장 나아보였다.

하지만 나는 내 상황에 맞는 것을 선택했을 뿐이다. 무엇을 고를지는 당신의 선택에 달렸다.



벤치마크 참조


https://blog.naver.com/sssang97/223840387576


https://blog.naver.com/sssang97/223848053614