Picking a vector database: a comparison and guide for 2023
PostgreSQL과 함께 Supabase의 벡터 데이터베이스 사용하기
생성적 AI가 전통적인 데이터베이스를 뒤집는 10가지 방법
세맨틱 검색(Semantic search)과 검색 증강 생성(Retrieval-augmented generation, RAG)이 온라인 상호 작용을 재정의하는 시대에, 이런 발전의 기반이 되는 핵심 구성요소인 벡터 데이터베이스는 종종 간과됩니다. 대규모 언어 모델, RAG 또는 세맨틱 검색을 활용하는 어떤 플랫폼을 찾고 계신다면 이 글이 도움이 될 것입니다.
벡터 데이터베이스를 선택하는 것은 어려울 수 있습니다. 확장성(scalability), 지연 시간(latency), 비용(cost), 심지어 규정 준수(compliance) 문제까지 이 선택에 좌우됩니다. 이러한 고민을 하는 분들을 위해, 주요 벡터 데이터베이스를 비교하고 분석하기 시작했습니다. 비교에는 Pinecone, Weviate, Milvus, Qdrant, Chroma, Elasticsearch 및 PGvector와 같은 벡터 데이터베이스를 포함시켰습니다. 비교에 사용된 데이터는 ANN Benchmarks, 각 벡터 데이터베이스의 문서와 내부 벤치마크, 그리고 오픈 소스 GitHub 저장소에서의 조사에서 출처를 얻었습니다.
주요 벡터 데이터베이스의 비교
Pinecone | Weaviate | Milvus | Qdrant | Chroma | Elasticsearch | ||
---|---|---|---|---|---|---|---|
오픈소스 | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅(PGvector) |
자체 호스팅 | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
클라우드 관리 | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | (✔️) |
벡터 전용 | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
개발자 경험 | 👍👍👍 | 👍👍 | 👍👍 | 👍👍 | 👍👍 | 👍 | 👍 |
커뮤니티 | Community page & events | 8k☆ github, 4k slack | 23k☆ github, 4k slack | 13k☆ github, 3k discord | 9k☆ github, 6k discord | 23k slack | 6k☆ github |
초당 쿼리 수 (using text nytimes-256-angular) | 150 *for p2, but more pods can be added | 791 | 2406 | 326 | ? | 700-100 *from various reports | 141 |
지연 시간, ms (Recall/Percentile 95 (millis), nytimes-256-angular) | 1 *batched search, 0.99 recall, 200k SBERT | 2 | 1 | 4 | ? | ? | 8 |
지원하는 인덱스 종류 | ? | HNSW | Multiple (11 total) | HNSW | HNSW | HNSW | HNSW/IVFFlat |
하이브리드 검색 (i.e. scalar filtering) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
디스크 인덱스 지원 | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
역할기반 접근 제어 | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ |
동적 세그먼트 배치 vs. 정적 데이터 샤딩 | ? | Static sharding | Dynamic segment placement | Static sharding | Dynamic segment placement | Static sharding | – |
무료 호스팅 티어 | ✅ | ✅ | ✅ | (free self-hosted) | (free self-hosted) | (free self-hosted) | (varies) |
가격 (50k vectors @1536) | $70 | fr. $25 | fr. $65 | est. $9 | Varies | $95 | Varies |
가격 (20M vectors, 20M req. @768) | $227 ($2074 for high performance) | $1536 | fr. $309 ($2291 for high performance) | fr. $281 ($820 for high performance) | Varies | est. $1225 | Varies |
2023년 벡터 데이터베이스를 살펴보면 각각의 다양한 요구사항에 부응하는 다양한 옵션들이 있습니다. 비교 표는 명확한 그림을 제시하고 있지만, 결정을 도울 수 있는 간결한 요약을 다시 제공하겠습니다:
오픈소스 및 호스팅된 클라우드: 오픈소스 방식을 선호한다면 Weviate, Milvus, 그리고 Chroma가 주요 후보로 떠오릅니다. Pinecone은 오픈소스는 아니지만, 개발자 경험과 풍부하게 호스팅되는 솔루션에서 주목을 받습니다.
성능: 초당 쿼리에서 Milvus가 선두를 차지하며 Weviate와 Qdrant가 바로 뒤따릅니다. 그러나 지연시간에서 Pinecone과 Milvus는 2ms 미만의 놀라운 결과를 보여줍니다. Pinecone에 추가 파드를 활용하면 QPS는 더욱 향상됩니다.
커뮤니티 강도: Milvus는 가장 큰 커뮤니티를 보유하고 있으며 Weviate와 Elasticsearch가 뒤를 잇습니다. 활발한 커뮤니티는 더 나은 지원, 향상된 기능, 그리고 버그 수정으로 연결됩니다.
확장성, 고급 기능, 그리고 보안: 많은 기업 애플리케이션에서 중요하게 여겨지는 역할 기반 접근 제어는 Pinecone, Milvus, 그리고 Elasticsearch에서 발견됩니다. 확장성 측면에서 Milvus와 Chroma는 동적 세그먼트 배치를 제공하며, 이는 지속적으로 변화하는 데이터셋에 적합합니다. 여러 인덱스 유형을 제공하는 데이터베이스가 필요한 경우 Milvus는 11가지 다양한 유형으로 독보적입니다. 하이브리드 검색은 대체로 잘 지원되고 있지만, Elasticsearch는 디스크 인덱스 지원 측면에서 약간 부족합니다.
가격: 예산이 제한된 프로젝트나 스타트업의 경우 Qdrant의 50k 벡터에 대한 $9의 추정 가격은 매우 경쟁력이 있습니다. 반면, 더 큰 규모의 프로젝트와 높은 성능이 필요한 경우 Pinecone과 Milvus는 경쟁력 있는 가격대를 제공합니다.
결론적으로 벡터 데이터베이스에 관해서는 모든 상황에 적합한 단 하나의 선택지는 없습니다. 이상적인 선택은 특정 프로젝트의 요구사항, 예산 제약, 그리고 개인의 선호도에 따라 다르게 됩니다. 이 가이드는 2023년 주요 벡터 데이터베이스를 종합적으로 살펴보기 위한 방법을 제공하여 개발자들의 결정 과정을 단순화하는 데 도움을 주기를 바랍니다. 제 선택은? 나는 주로 높은 성능, Milvus의 강력한 커뮤니티, 그리고 규모에 따른 가격 유연성 때문에 Pinecone과 Milvus를 실제 환경에서 테스트하고 있습니다.
벡터 데이터베이스는 고차원 벡터를 저장하고 검색하는 데 필요하며, 특히 의미론적 검색, 추천 시스템, 그리고 기계 학습과 같은 응용 프로그램에서 중요합니다. 2022년을 기준으로 주요 벡터 데이터베이스의 비교를 아래에 제공합니다.
1. Faiss (Facebook AI Similarity Search)
- 장점:
- 대규모 유사성 검색에 매우 효율적입니다.
- 더 빠른 처리를 위해 GPU를 지원합니다.
- Facebook AI에 의해 활발하게 관리됩니다.
- 대규모 유사성 검색에 매우 효율적입니다.
- 단점:
- 초보자에게 학습 곡선이 다소 가파를 수 있습니다.
2. Annoy (Approximate Nearest Neighbors Oh Yeah)
- 장점:
- Spotify에서 개발되었으며, 품질과 성능을 보장합니다.
- 메모리 사용량과 속도 사이에 효율적인 균형을 제공합니다.
- 단점:
- 증분 업데이트를 지원하지 않으며 인덱스 재구축이 필요합니다.
3. Milvus
- 장점:
- 오픈소스이며 클라우드 네이티브입니다.
- 분산 검색 및 저장을 지원합니다.
- 인기 있는 딥러닝 프레임워크와 통합됩니다.
- 단점:
- 다른 것들에 비해 상대적으로 새로운 프로젝트이지만 빠르게 성장하고 있습니다.
4. Elasticsearch with Vector Fields (HNSW 플러그인 사용)
- 장점:
- 큰 사용자 커뮤니티를 가진 성숙한 플랫폼입니다.
- 풀 텍스트 검색과 벡터 검색을 결합합니다.
- 높은 확장성을 가집니다.
- 단점:
- 매우 큰 규모의 고차원 데이터에 대해서는 특화된 벡터 데이터베이스만큼 효율적이지 않을 수 있습니다.
5. Pinecone
- 장점:
- 벡터 검색을 위한 관리 서비스를 제공하여 설치와 유지 보수를 용이하게 합니다.
- 클라우드 네이티브입니다.
- 단점:
- 오픈 소스가 아닙니다.
- 서비스 제공자에 의존합니다.
6. Weviate
- 장점:
- 기계 학습을 통한 의미론적 검색에 중점을 둡니다.
- GraphQL API를 지원합니다.
- 단점:
- 그 특정 아키텍처에 익숙하지 않은 사용자에게는 복잡할 수 있습니다.
7. Qdrant
- 장점:
- 오픈소스입니다.
- 대규모 벡터 데이터를 저장하고 검색하기 위해 설계되었습니다.
- 단점:
- 다른 것들에 비해 알려지지 않아 커뮤니티 지원에 영향을 줄 수 있습니다.
8. Chroma
- 장점:
- 효율적이고 빠릅니다.
- 여러 유사성 척도를 지원합니다.
- 단점:
- 2022년을 기준으로 문서화가 제한적입니다.
9. PGvector
- 장점:
- PostgreSQL과 통합되며, 그 성숙한 생태계의 혜택을 누릴 수 있습니다.
- 관계형 데이터베이스에 익숙한 사람들을 위한 SQL 인터페이스를 제공합니다.
- 단점:
- 특정 작업에 대해 전용 벡터 데이터베이스만큼 효율적이지 않을 수 있습니다.
벡터 데이터베이스를 선택할 때 고려해야 할 주요 요소:
- 규모: 얼마나 많은 데이터를 예상하십니까? 일부 데이터베이스는 매우 큰 데이터셋에 최적화되어 있습니다.
- 통합: 다른 도구나 프레임워크와 잘 호환되기를 원하십니까?
- 비용: 오픈소스와 관리 서비스는 비용 면에서 크게 다를 수 있습니다.
- 지원 및 커뮤니티: 크고 활발한 커뮤니티는 문제 해결과 모범 사례를 위해 매우 중요할 수 있습니다.
이 비교는 2022년의 벡터 데이터베이스 상황을 나타내는 스냅샷을 제공합니다. 특정한 필요에 맞게 선택을 하실 때는 최근의 리뷰, 벤치마크 및 업데이트를 항상 확인하시기 바랍니다.
동적 세그먼트 배치 vs. 정적 데이터 샤딩
Dynamic Segment Placement와 Static Data Sharding는 데이터 분산 및 관리 방식에 있어 다른 접근 방식을 사용합니다. 두 기술을 비교하여 이해를 돕기 위해 간략한 설명 및 비교를 제공하겠습니다.
Dynamic Segment Placement (동적 세그먼트 배치)
- 정의: 동적 세그먼트 배치는 데이터 세그먼트를 클러스터의 다양한 노드에 유동적으로 할당하고 재배치하는 방식입니다.
- 장점:
- 유연성: 데이터베이스의 크기나 작업 부하에 따라 세그먼트를 동적으로 재배치할 수 있습니다.
- 자동 최적화: 시스템은 데이터 액세스 패턴, 노드의 작업 부하 등을 기반으로 세그먼트의 최적 위치를 자동으로 결정할 수 있습니다.
- 고장 복구: 노드가 실패할 경우 해당 노드의 세그먼트를 다른 노드로 빠르게 이동시킬 수 있습니다.
- 단점:
- 복잡성: 동적 세그먼트 배치 로직은 복잡할 수 있으며, 시스템 성능에 영향을 미칠 수 있습니다.
Static Data Sharding (정적 데이터 샤딩)
- 정의: 정적 데이터 샤딩은 데이터를 여러 샤드(분할)로 나누고, 각 샤드를 클러스터의 특정 노드에 고정적으로 할당하는 방식입니다.
- 장점:
- 예측 가능성: 샤드의 위치와 데이터 분포가 고정되어 있어 시스템의 동작이 예측 가능합니다.
- 간단함: 정적 샤딩 방식은 동적 세그먼트 배치보다 구현이 간단합니다.
- 높은 성능: 노드 간의 데이터 이동이 적기 때문에 일관된 성능을 제공할 수 있습니다.
- 단점:
- 유연성 부족: 데이터 또는 쿼리의 패턴이 변경될 경우, 샤드 재배치가 어려울 수 있습니다.
- 데이터 불균형: 시간이 지남에 따라 일부 샤드에 데이터가 불균형하게 분포될 수 있습니다.
결론
동적 세그먼트 배치와 정적 데이터 샤딩은 각각의 장단점을 가지고 있습니다. 선택하는 방식은 사용 사례, 성능 요구 사항, 유연성, 시스템 복잡성 등 여러 요인을 고려하여 결정해야 합니다.
무료 호스팅 티어
“Free hosted tier”는 일반적으로 클라우드 또는 SaaS (Software as a Service) 제공자들이 사용자에게 서비스의 제한된 버전을 무료로 사용하게 해주는 서비스 수준을 가리킵니다. 이 무료 티어는 사용자가 서비스를 시도하고, 기능을 이해하고, 유료 플랜을 결정하기 전에 서비스의 능력을 평가할 수 있도록 의도되어 있습니다.
특성:
- 자원 제한: 저장소, 대역폭, 계산 또는 요청 수 등에 종종 제한이 있습니다.
- 시간 제약: 일부 제공자는 예를 들어 처음 12개월 동안만 무료 티어를 제공합니다.
- 기능 감소: 유료 버전에서 사용 가능한 모든 기능이 무료 티어에서 사용 가능하지 않을 수 있습니다.
- 자원 공유: 무료 티어는 성능에 영향을 줄 수 있는 전용 리소스를 제공하지 않을 수 있습니다.
장점:
- 비용 없음: 개별 개발자, 스타트업 또는 학생들이 초기 투자 없이 시작하는 데 이상적입니다.
- 학습 기회: 사용자는 플랫폼, 도구 또는 서비스를 익힐 수 있습니다.
- 프로토타이핑: 사용자가 비용을 발생시키지 않고 아이디어를 프로토타이핑하거나 테스트할 수 있습니다.
단점:
- 성능: 리소스 공유로 인해 성능이 일관되지 않거나 최적이 아닐 수 있습니다.
- 확장성 문제: 한계에 도달하면 업그레이드하거나 서비스가 중단될 수 있습니다.
- 생산 용도로는 부적합: 위에서 언급한 이유로, 무료 티어는 일반적으로 생산 수준의 응용 프로그램에는 권장되지 않습니다.
예제:
많은 클라우드 서비스 제공자들이 무료 호스팅 티어를 제공합니다:
- Amazon Web Services (AWS): AWS 무료 티어는 EC2, S3, RDS와 같은 서비스의 제한된 사용을 12개월 동안 제공하며, 일정한 제한 내에서 항상 무료인 몇몇 서비스도 있습니다.
- Google Cloud Platform (GCP): GCP의 항상 무료 티어는 Google Compute Engine, Cloud Storage 등 일반 서비스에 제한된 접근을 제공합니다.
- Microsoft Azure: Azure의 무료 티어는 제한된 월간 사용료와 12개월 동안 무료 서비스의 하위 집합에 대한 접근을 제공합니다.
- Heroku: 애플리케이션을 호스팅하기 위한 무료 dyno(컨테이너)를 제공합니다. 그러나 무료 dyno는 30분 동안 비활성 상태가 되면 잠듭니다.
- MongoDB Atlas: 512MB의 저장소와 공유 RAM을 제공하는 무료 티어를 제공합니다.
무료 호스팅 티어를 사용할 때는 항상 서비스 약관을 검토하고, 제한 사항을 이해하며, 확장할 때 발생할 수 있는 잠재적인 미래의 비용을 계획해야 합니다.