# 向量数据库对比

在 Clore.ai GPU 服务器上为您的 AI 应用选择合适的向量数据库。

{% hint style="info" %}
**向量数据库** 高效存储和检索高维嵌入——这是 RAG 系统、语义搜索和推荐引擎的核心基础设施。本指南比较了四个最受欢迎的开源选项。
{% endhint %}

***

## 快速决策矩阵

|               | ChromaDB   | Qdrant          | Milvus     | Weaviate          |
| ------------- | ---------- | --------------- | ---------- | ----------------- |
| **适用场景**      | 原型设计、本地开发  | 生产环境 RAG        | 十亿级搜索      | 知识图谱              |
| **部署**        | 嵌入式/服务器端   | 服务器/云端          | 服务器/云端     | 服务器/云端            |
| **可扩展性**      | 单节点        | 多节点             | 分布式        | 分布式               |
| **GitHub 星标** | 17K+       | 21K+            | 31K+       | 12K+              |
| **许可**        | Apache 2.0 | Apache 2.0      | Apache 2.0 | BSD 三条款许可         |
| **托管云**       | 否          | 是（Qdrant Cloud） | 是（Zilliz）  | 是（Weaviate Cloud） |
| **语言**        | Python     | Rust            | Go         | Go                |

***

## 概览

### ChromaDB

ChromaDB 是最简单的向量数据库——为快速原型和中小规模应用设计。它可以完全在内存中运行或持久化到磁盘。

**理念**: 零配置，最大的开发者体验。

```python
import chromadb

client = chromadb.PersistentClient(path="/data/chroma")
collection = client.create_collection("my_docs")

collection.add(
    documents=["Machine learning is great", "Deep learning uses neural networks"],
    ids=["doc1", "doc2"]
)

results = collection.query(
    query_texts=["What is AI?"],
    n_results=2
)
```

### Qdrant

Qdrant 是一个面向生产的向量搜索引擎，使用 Rust 编写。它专注于性能、过滤和运维简易性。

**理念**: 生产级性能而无复杂的运维。

```python
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams, PointStruct

client = QdrantClient("localhost", port=6333)
client.create_collection(
    collection_name="my_collection",
    vectors_config=VectorParams(size=1536, distance=Distance.COSINE)
)

client.upsert(
    collection_name="my_collection",
    points=[
        PointStruct(id=1, vector=[...], payload={"text": "document 1"}),
    ]
)

results = client.search(
    collection_name="my_collection",
    query_vector=[...],
    limit=10,
    query_filter=Filter(must=[FieldCondition(key="category", match=MatchValue(value="tech"))])
)
```

### Milvus

Milvus 是最具可扩展性的开源向量数据库，专为十亿级部署设计。它具有分布式架构并支持 Kubernetes。

**理念**: 大规模、云原生。

```python
from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType

connections.connect("default", host="localhost", port=19530)

fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
    FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=1536),
    FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=65535),
]
schema = CollectionSchema(fields)
collection = Collection("my_collection", schema)

# Insert data
collection.insert([[1, 2], embeddings, texts])
collection.create_index("embedding", {"metric_type": "COSINE", "index_type": "IVF_FLAT"})
collection.load()

results = collection.search(
    data=[query_embedding],
    anns_field="embedding",
    param={"metric_type": "COSINE", "nprobe": 10},
    limit=10
)
```

### Weaviate

Weaviate 将向量搜索与知识图谱和 GraphQL API 结合。它原生支持多模态搜索（文本、图像、音频）。

**理念**: 架构丰富、多模态、具备知识图谱能力。

```python
import weaviate

client = weaviate.Client("http://localhost:8080")

# Define schema with classes
client.schema.create_class({
    "class": "Document",
    "vectorizer": "text2vec-transformers",
    "properties": [
        {"name": "content", "dataType": ["text"]},
        {"name": "category", "dataType": ["string"]}
    ]
})

# Insert with auto-vectorization
client.data_object.create(
    {"content": "Machine learning tutorial", "category": "tech"},
    "Document"
)

# Semantic search
result = client.query.get("Document", ["content", "category"])\
    .with_near_text({"concepts": ["artificial intelligence"]})\
    .with_limit(5)\
    .do()
```

***

## 性能基准

### ANN 基准（ann-benchmarks.com，2024）

#### 1M 向量，768 维，余弦相似度

| 数据库            | QPS（1 线程） | Recall\@10 | 构建时间 | 索引大小  |
| -------------- | --------- | ---------- | ---- | ----- |
| ChromaDB（HNSW） | \~2,000   | 98.5%      | 45 秒 | 2.1GB |
| Qdrant（HNSW）   | \~8,500   | 99.1%      | 32 秒 | 1.8GB |
| Milvus（HNSW）   | \~12,000  | 98.9%      | 28 秒 | 1.9GB |
| Weaviate（HNSW） | \~6,000   | 98.7%      | 38 秒 | 2.0GB |

#### 1000 万向量（可扩展性测试）

| 数据库      | QPS（每秒查询数） | 内存使用      | 说明        |
| -------- | ---------- | --------- | --------- |
| ChromaDB | \~800      | 22GB      | 在大规模时表现不佳 |
| Qdrant   | \~5,200    | 18GB      | 量化表现良好    |
| Milvus   | \~9,800    | 15GB（已索引） | 在大规模时最佳   |
| Weaviate | \~3,500    | 21GB      | 中等        |

{% hint style="info" %}
**基准是指导，不是绝对结论。** 性能受索引类型、硬件、向量维度和查询模式影响很大。务必使用您自己的数据进行基准测试。
{% endhint %}

### 过滤性能（带过滤的 ANN 搜索）

带过滤的搜索（向量相似度 + 元数据过滤）对于生产 RAG 至关重要：

| 数据库      | 过滤后 QPS | 预过滤            | 后过滤 |
| -------- | ------- | -------------- | --- |
| ChromaDB | \~500   | ❌              | ✅   |
| Qdrant   | \~6,000 | ✅（HNSW + 负载索引） | ✅   |
| Milvus   | \~8,000 | ✅              | ✅   |
| Weaviate | \~3,000 | ✅（倒排索引）        | ✅   |

**过滤搜索的获胜者**: Qdrant 和 Milvus，支持真正的预过滤而不会导致后过滤的性能下降。

***

## 功能比较

### 存储与索引

| 功能      | ChromaDB | Qdrant | Milvus | Weaviate |
| ------- | -------- | ------ | ------ | -------- |
| HNSW 索引 | ✅        | ✅      | ✅      | ✅        |
| IVF 索引  | ❌        | ❌      | ✅      | ❌        |
| DiskANN | ❌        | ✅      | ✅      | ❌        |
| 标量量化    | ❌        | ✅      | ✅      | ✅        |
| 乘积量化    | ❌        | ✅      | ✅      | ❌        |
| 二进制量化   | ❌        | ✅      | ✅      | ✅        |
| 磁盘存储    | ✅        | ✅      | ✅      | ✅        |
| Mmap    | ❌        | ✅      | ✅      | ✅        |

### 查询能力

| 功能            | ChromaDB | Qdrant | Milvus | Weaviate   |
| ------------- | -------- | ------ | ------ | ---------- |
| 向量相似度         | ✅        | ✅      | ✅      | ✅          |
| 混合搜索（BM25+向量） | ❌        | ✅      | ✅      | ✅          |
| 元数据过滤         | ✅（基础）    | ✅（丰富）  | ✅（丰富）  | ✅（GraphQL） |
| 关键词搜索         | ❌        | ✅      | ✅      | ✅          |
| 多向量搜索         | ❌        | ✅      | ✅      | ✅          |
| 稀疏向量（SPLADE）  | ❌        | ✅      | ✅      | ✅          |
| 命名向量          | ❌        | ✅      | ✅      | ✅          |

### 运维特性

| 功能              | ChromaDB | Qdrant | Milvus | Weaviate |
| --------------- | -------- | ------ | ------ | -------- |
| REST API        | ✅        | ✅      | ✅      | ✅        |
| gRPC API        | ❌        | ✅      | ✅      | ❌        |
| GraphQL API     | ❌        | ❌      | ❌      | ✅        |
| 认证              | 基础       | ✅      | ✅      | ✅        |
| 基于角色的访问控制（RBAC） | ❌        | ✅      | ✅      | ✅        |
| 横向扩展            | ❌        | ✅      | ✅      | ✅        |
| Kubernetes 支持   | ❌        | ✅      | ✅      | ✅        |
| 快照/备份           | ❌        | ✅      | ✅      | ✅        |
| 监控（Prometheus）  | ❌        | ✅      | ✅      | ✅        |

***

## ChromaDB：深入解析

### 优势

✅ **最简设置** — `pip install chromadb` 然后就完成了\
✅ **嵌入式模式** — 无需单独的服务器进程\
✅ **自动嵌入** — 内置嵌入模型\
✅ **与 LangChain/LlamaIndex** 本地集成\
✅ **零配置** — 非常适合原型开发

### 弱点

❌ **可扩展性有限** — 超过 1-2M 向量时表现不佳\
❌ **无分布式模式** — 仅单节点\
❌ **过滤能力有限** — 无预过滤\
❌ **无量化** — 更高的内存使用\
❌ **大规模时较慢** — 基于 Python 的操作

### 在 Clore.ai 上部署

```bash
# 客户端/服务器 模式
docker run -d \
  --name chromadb \
  -p 8000:8000 \
  -v $(pwd)/chroma-data:/chroma/chroma \
  chromadb/chroma:latest

# 测试
curl http://localhost:8000/api/v1/heartbeat
```

**适用场景**: Jupyter 笔记本、快速 RAG 原型，<1M 向量

***

## Qdrant：深入解析

### 优势

✅ **最佳过滤** — 真正的预过滤向量搜索\
✅ **Rust 性能** — 极快、低延迟\
✅ **量化** — 二进制/标量可将内存降低 4-32×\
✅ **稀疏向量** — 混合的密集+稀疏搜索\
✅ **简单运维** — 单个二进制文件，无依赖\
✅ **文档完善** — 优秀的指南和示例

### 弱点

❌ **免费层为单写入者** 在免费层中（无分布式写入）\
❌ **生态较小** 比 Milvus 差\
❌ **无 GraphQL** — 仅 REST/gRPC

### 在 Clore.ai 上部署

```bash
# 简单部署
docker run -d \
  --name qdrant \
  -p 6333:6333 \
  -p 6334:6334 \
  -v $(pwd)/qdrant-storage:/qdrant/storage \
  qdrant/qdrant:latest

# 启用认证 时
docker run -d \
  --name qdrant \
  -p 6333:6333 \
  -e QDRANT__SERVICE__API_KEY=your-secret-key \
  -v $(pwd)/qdrant-storage:/qdrant/storage \
  qdrant/qdrant:latest

# 测试
curl http://localhost:6333/health
```

**适用场景**: 生产级 RAG、带过滤的搜索、1-100M 向量

***

## Milvus：深入解析

### 优势

✅ **大规模** — 已测试到 100 亿+ 向量\
✅ **分布式** — 云原生的 Kubernetes 架构\
✅ **最多的索引类型** — IVF、HNSW、DiskANN、ScaNN\
✅ **GPU 加速** — GPU 加速的索引构建\
✅ **企业功能** — RBAC、审计日志、加密\
✅ **Zilliz Cloud** — 完全托管选项

### 弱点

❌ **复杂部署** — 需要 etcd、MinIO 和 Pulsar/Kafka\
❌ **资源消耗大** — 建议至少 3 个节点\
❌ **学习曲线比竞争对手更陡峭** — 需要更多概念来理解 **对小规模来说是过度设计** — 不要用于 <1M 向量的场景

### 在 Clore.ai 上的部署（独立部署）

```yaml
# Milvus 独立部署的 docker-compose.yml
version: "3.8"
services:
  etcd：
    image: quay.io/coreos/etcd:v3.5.5
    environment:
      - ETCD_AUTO_COMPACTION_MODE=revision
      - ETCD_AUTO_COMPACTION_RETENTION=1000
      - ETCD_QUOTA_BACKEND_BYTES=4294967296
    command: etcd -advertise-client-urls=http://etcd:2379 -listen-client-urls=http://0.0.0.0:2379

  minio:
    image: minio/minio:RELEASE.2023-03-13T19-46-17Z
    environment:
      MINIO_ACCESS_KEY: minioadmin
      MINIO_SECRET_KEY: minioadmin
    command: minio server /minio_data --console-address ":9001"

  milvus:
    image: milvusdb/milvus:v2.4.0
    command: ["milvus", "run", "standalone"]
    environment:
      ETCD_ENDPOINTS: etcd:2379
      MINIO_ADDRESS: minio:9000
    ports:
      - "19530:19530"
      - "9091:9091"
    depends_on:
      - etcd
      - minio
```

```bash
docker compose up -d
# 完全启动大约需要 ~60 秒
```

**适用场景**: 大规模生产，100M+ 向量，企业级部署

***

## Weaviate：深入解析

### 优势

✅ **多模态** — 文本、图像、音频、视频\
✅ **自动向量化** — 内置模型集成\
✅ **GraphQL API** — 通过图遍历提供丰富的查询能力\
✅ **模块化系统** — 可插件化的向量化器和读取器\
✅ **混合检索** — 原生支持 BM25 + 向量 **生成式搜索** — 内置的带生成模块的 RAG

### 弱点

❌ **内存占用更高** — 模式感知存储占用更大\
❌ **无 gRPC** — 仅 GraphQL（在高 QPS 下较慢）\
❌ **复杂的 schema** — 需要提前定义类\
❌ **在极端规模下较慢** 比 Milvus 慢

### 在 Clore.ai 上部署

```bash
# 简单部署
docker run -d \
  --name weaviate \
  -p 8080:8080 \
  -p 50051:50051 \
  -e AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true \
  -e PERSISTENCE_DATA_PATH=/var/lib/weaviate \
  -e DEFAULT_VECTORIZER_MODULE=none \
  -e CLUSTER_HOSTNAME=node1 \
  -v $(pwd)/weaviate-data:/var/lib/weaviate \
  cr.weaviate.io/semitechnologies/weaviate:1.25.0

# 使用 transformer 向量化器 时
docker run -d \
  --name weaviate \
  -p 8080:8080 \
  -e DEFAULT_VECTORIZER_MODULE=text2vec-transformers \
  -e TRANSFORMERS_INFERENCE_API=http://t2v-transformers:8080 \
  cr.weaviate.io/semitechnologies/weaviate:1.25.0
```

**适用场景**: 多模态搜索、知识图谱、生成式搜索

***

## 何时使用哪个

### 基于规模的决策

```
< 100K 向量    → ChromaDB（嵌入式）
100K - 10M        → Qdrant（最好平衡）
10M - 1B          → Milvus 或 Qdrant（集群）
1B+               → Milvus（分布式）
```

### 基于用例的决策

| 在 Clore.ai 上的预估费用 | 最佳选择              | 为什么        |
| ----------------- | ----------------- | ---------- |
| RAG 原型            | ChromaDB          | 零配置、简单 API |
| 生产环境 RAG          | Qdrant            | 快速过滤、简单运维  |
| 语义搜索              | Qdrant 或 Milvus   | 最佳性能       |
| 多模态               | Weaviate          | 内置图像/音频支持  |
| 知识图谱              | Weaviate          | 图遍历查询      |
| 十亿级规模             | Milvus            | 分布式架构      |
| 混合检索              | Qdrant 或 Weaviate | BM25 + 向量  |
| 企业级               | Milvus 或 Weaviate | RBAC、审计日志  |

***

## Clore.ai 上的内存需求

### 内存估算公式

```
所需内存 ≈（向量数量 × 维度 × 4 字节）× 1.5（开销）

示例：1M 向量 × 1536 维 × 4 字节 × 1.5 = 9.2GB 内存

使用量化（Qdrant 二进制）：
1M × 1536 / 8 × 1.5 = 0.29GB 内存（32× 压缩！）
```

### 推荐的服务器规格

| 数据集大小   | ChromaDB | Qdrant  | Milvus  | Weaviate |
| ------- | -------- | ------- | ------- | -------- |
| 1M 向量   | 16GB 内存  | 8GB 内存  | 32GB 内存 | 16GB 内存  |
| 10M 向量  | ❌        | 32GB 内存 | 64GB 内存 | 48GB 内存  |
| 100M 向量 | ❌        | 128GB+  | 256GB+  | 256GB+   |

***

## 快速比较：Docker 启动时间

| 数据库      | `docker run` 到就绪 | 依赖项          |
| -------- | ---------------- | ------------ |
| ChromaDB | 约 5 秒            | 无            |
| Qdrant   | 约 3 秒            | 无            |
| Milvus   | \~60 秒           | etcd + MinIO |
| Weaviate | \~15 秒           | 无（独立）        |

***

## 定价（在 Clore.ai 上自托管）

所有四个数据库都是 **免费** 来自行托管。成本仅为 Clore.ai 服务器租赁：

```
示例：1M 向量的 RAG 系统
- Qdrant：8GB 内存服务器 ~ $0.10/小时
- ChromaDB：16GB 内存服务器 ~ $0.15/小时  
- Weaviate：16GB 内存服务器 ~ $0.15/小时
- Milvus：32GB 内存服务器 ~ $0.30/小时（+ etcd/minio 的额外开销）
```

***

## 有用的链接

* [ChromaDB 文档](https://docs.trychroma.com)
* [Qdrant 文档](https://qdrant.tech/documentation)
* [Milvus 文档](https://milvus.io/docs)
* [Weaviate 文档](https://weaviate.io/developers/weaviate)
* [ANN 基准](https://ann-benchmarks.com)
* [由 Qdrant 提供的向量数据库基准](https://qdrant.tech/benchmarks)

***

## 总结

| 从……开始...     | 如果您需要...            |
| ------------ | ------------------- |
| **ChromaDB** | 快速原型，<1M 向量，最小设置    |
| **Qdrant**   | 生产级 RAG、出色的过滤、简易运维  |
| **Milvus**   | 十亿级、企业级、分布式架构       |
| **Weaviate** | 多模态、知识图谱、GraphQL 查询 |

对于在 Clore.ai 上的大多数生产 RAG 应用， **Qdrant** 在性能、功能和运维简易性之间提供最佳平衡。对于大规模或企业级需求， **Milvus** 是行业标准。

***

## Clore.ai 的 GPU 建议

| 在 Clore.ai 上的预估费用 | 开发/测试             | RTX 3090（24GB） |
| ----------------- | ----------------- | -------------- |
| \~$0.12/每 GPU/每小时 | 生产                | RTX 4090（24GB） |
| \~$0.70/每 GPU/每小时 | 大规模               | A100 80GB      |
| \~$1.20/每 GPU/每小时 | 💡 本指南中的所有示例均可部署在 | Clore.ai       |

> GPU 服务器上。浏览可用 GPU 并按小时租用 — 无需承诺，提供完整的 root 访问权限。 [Clore.ai](https://clore.ai/marketplace) GPU 服务器。浏览可用 GPU 并按小时租用 — 无需承诺，提供完整的 root 访问权限。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.clore.ai/guides/guides_v2-zh/dui-bi/vector-db-comparison.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
