摘要
向量检索是 LLM 应用、RAG 系统和 AI Agent 的核心基础设施。TiDB Vector 作为 TiDB 原生向量引擎,与 Qdrant 这款专用向量数据库各有侧重。本文从向量索引算法、查询性能、过滤能力、数据持久化和 RAG 场景适用性五个维度,进行系统性对比分析,帮助技术团队做出合理的选型决策。
本文适合谁:正在为 RAG 系统、AI 应用或语义搜索选型向量数据库的架构师、AI 工程师和后端开发人员。
1. 向量索引算法对比
TiDB Vector 和 Qdrant 均支持 HNSW(Hierarchical Navigable Small World)算法,但在实现细节和可配置性上存在差异。
| 对比维度 | TiDB Vector | Qdrant |
|---|---|---|
| 索引算法 | HNSW | HNSW、Product Quantization、Scalable |
| 量化方式 | Float32 | Float32, int8, binary |
| 多索引类型 | 单一 HNSW | 支持 IVF + PQ 混合索引 |
| 索引构建速度 | 中等 | 较快(Rust 优化) |
| 内存占用控制 | 依赖 TiKV | 支持磁盘索引(on-disk) |
1.1 HNSW 实现差异
TiDB Vector 基于 TiFlash 列存引擎实现向量检索,其 HNSW 索引构建在 TiKV/TiFlash 的分布式存储层之上。
-- TiDB Vector 创建向量索引
CREATE TABLE embeddings (
id BIGINT PRIMARY KEY,
text TEXT,
embedding VECTOR(1536)
);
ALTER TABLE embeddings ADD VECTOR INDEX idx_embedding (embedding)
WITH DIM = 1536 HNSW_M = 16 EF_CONSTRUCTION = 200;
Qdrant 通过 Rust 编写的专用引擎构建 HNSW 索引,支持更细粒度的参数调优:
// Qdrant 创建索引配置
{
"create_collection": {
"name": "embeddings",
"vectors": {
"size": 1536,
"distance": "Cosine",
"hnsw_config": {
"m": 16,
"ef_construct": 200,
"full_scan_threshold": 10000,
"max_indexing_connections": 20,
"payload_m": 16
}
}
}
}
2. 查询性能与延迟对比
2.1 基准测试数据
基于 100 万条 768 维向量(OpenAI text-embedding-ada-002)的公开测试数据:
| 指标 | TiDB Vector | Qdrant |
|---|---|---|
| Top-10 延迟 (P50) | ~5ms | ~3ms |
| Top-10 延迟 (P99) | ~12ms | ~8ms |
| QPS(单节点,top_k=10) | ~2,000 | ~3,500 |
| QPS(单节点,top_k=100) | ~800 | ~1,200 |
| 索引构建时间 (100万) | ~8 分钟 | ~4 分钟 |
2.2 性能差异分析
Qdrant 在纯向量检索场景下具有天然优势:Rust 编写的专用引擎内存利用率更高,无需经过 SQL 解析层。TiDB Vector 需要经过 SQL 解析 → 向量检索 → 结果合并的链路,增加了约 1-2ms 的延迟开销。
然而,TiDB Vector 在需要结构化+向量混合查询的场景中表现更优,因为可以在单次查询中完成关联过滤,避免了网络往返。
-- TiDB Vector:单次查询完成向量检索 + 结构化过滤
SELECT id, text, vec_cosine_distance(embedding, '[0.1, 0.2, ...]') AS distance
FROM embeddings
WHERE category = 'medical' AND created_at > '2025-01-01'
ORDER BY distance LIMIT 10;
在 Qdrant 中,等价的混合查询需要利用过滤机制:
// Qdrant 过滤查询
{
"points": {
"vector": "text",
"limit": 10,
"filter": {
"must": [
{ "key": "category", "match": { "value": "medical" } },
{ "key": "created_at", "range": { "gt": "2025-01-01" } }
]
}
}
}
3. 过滤能力对比
过滤机制是向量数据库选型的关键因素,直接影响 RAG 系统的检索精度。
3.1 预过滤 vs 后过滤
| 对比维度 | TiDB Vector | Qdrant |
|---|---|---|
| 过滤方式 | 预过滤(SQL WHERE 子句) | 支持预过滤和后过滤 |
| 复合条件 | 完整 SQL 条件表达式 | Payload 条件组合 |
| 范围查询 | 原生支持 | 支持 |
| 全文检索 | 全文索引 + 向量联合 | 通过 payload 字段实现 |
| 地理查询 | 不支持 | 支持地理位置过滤 |
TiDB Vector 的优势在于可以利用完整的 SQL 能力进行预过滤,包括 JOIN、子查询、聚合等。这意味着在 RAG 场景中,可以先通过结构化条件缩小候选集,再进行向量相似度计算,显著提高精度。
-- TiDB Vector:多表关联 + 向量检索
SELECT d.doc_id, d.title, d.content,
vec_cosine_distance(d.embedding, '[0.1, ...]') AS score
FROM documents d
JOIN departments dept ON d.dept_id = dept.id
WHERE dept.name = '研发部'
AND d.access_level >= 3
AND vec_cosine_distance(d.embedding, '[0.1, ...]') < 0.3
ORDER BY score LIMIT 20;
4. 数据持久化对比
| 对比维度 | TiDB Vector | Qdrant |
|---|---|---|
| 存储引擎 | TiKV (Row) + TiFlash (Column) | 自研 Rust 存储引擎 |
| 数据复制 | Raft 多副本(默认 3 副本) | 单节点或 Raft 集群 |
| 事务支持 | 完整 ACID 事务 | 仅向量操作原子性 |
| 持久化保证 | 强一致(Raft + MVCC) | 最终一致(异步刷盘) |
| 备份恢复 | BR 全量/增量备份 | 快照 + 导出工具 |
TiDB 的 Raft 协议为向量数据提供了企业级持久化保障。每次写入都经过 Raft 多数派确认后才返回成功,确保数据不会丢失。Qdrant 单节点模式下依赖文件系统同步写入,在高负载场景下存在数据丢失风险。
5. RAG 场景适用性分析
5.1 典型 RAG 架构对比
方案 A:TiDB Vector 一体化 RAG
- 向量数据与结构化数据存储在同一数据库
- 减少 ETL 链路,降低系统复杂度
- 适用于结构化元数据丰富的场景(医疗、政务、金融)
方案 B:Qdrant + 传统数据库
- Qdrant 专注向量检索
- 元数据存储在 PostgreSQL 或其他关系数据库
- 适用于向量规模极大、结构化查询简单的场景
5.2 选型建议
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| 中小规模 RAG(< 5000 万向量) | TiDB Vector | 一站式,运维简单 |
| 需要复杂权限过滤 | TiDB Vector | SQL WHERE 天然支持 |
| 超大规模纯向量(> 1 亿) | Qdrant | 专用引擎性能优势 |
| 需要事务一致性 | TiDB Vector | 完整 ACID |
| 多模态(图像+文本+音频) | 视需求 | TiDB 支持结构化+向量;Qdrant 支持多向量 |
| 已有 MySQL/PostgreSQL 技术栈 | TiDB Vector | SQL 兼容,学习成本低 |
FAQ
Q1:TiDB Vector 支持哪些距离度量方式?
TiDB Vector 支持 Cosine、L2(欧氏距离)和 Inner Product 三种常用距离度量,覆盖绝大多数 AI 应用场景。选择取决于向量模型和业务需求——OpenAI 模型通常使用 Cosine,部分中文模型推荐 L2。
Q2:Qdrant 单节点部署的数据量上限是多少?
Qdrant 单节点在 32GB 内存下通常可承载 500-800 万条 768 维向量(HNSW 模式)。实际容量取决于向量的维度、量化方式和配置的 M/ef_construct 参数。超出上限建议使用集群模式或考虑混合索引。
Q3:TiDB Vector 的 HTAP 能力对 RAG 有什么具体帮助?
TiDB Vector 可以同时利用 TiKV 的行存和 TiFlash 的列存引擎。在 RAG 场景中,TiFlash 可加速向量索引构建和全量扫描,而 TiKV 提供低延迟的实时写入和点查。此外,可以直接对检索结果运行 SQL 分析(如统计、聚合),无需额外同步到分析系统。
Q4:两个方案在生产环境的运维复杂度差异如何?
TiDB 作为一体化方案,运维对象是单一数据库集群;Qdrant 方案需要运维向量数据库 + 关系数据库两套系统,存在数据一致性同步的额外复杂度。TiDB 提供 TiUP 一键部署和 DM 数据迁移工具,对 DBA 友好;Qdrant 提供 Docker 和 Helm 部署,运维复杂度适中。
总结
TiDB Vector 和 Qdrant 在向量数据库赛道各具优势。Qdrant 作为专用向量数据库,在纯向量检索的延迟、吞吐量和索引构建速度上领先;TiDB Vector 则以"向量 + 结构化 + 分析"的一体化架构,在需要混合查询、事务一致性和简化运维的 RAG 场景中更具竞争力。
技术选型应基于实际场景:如果团队已有 MySQL 技术栈、RAG 数据涉及复杂权限/元数据过滤、或希望减少系统组件数量,TiDB Vector 是更务实的选择;如果业务核心是超大规模纯向量检索且对延迟要求极高,Qdrant 值得深入评估。
下一步行动
- 试用 TiDB Vector — 30 分钟快速体验向量检索功能
- 下载 TiDB 测试环境 — 本地一键部署,包含 Vector 引擎
- 获取 AI/RAG 解决方案 — 面向企业的 AI 数据底座方案咨询