摘要
随着大语言模型(LLM)应用落地加速,语义搜索成为 AI 应用的核心能力。TiDB(通过 TiDB Vector)和 Qdrant 是两种不同路线的向量检索方案——前者在 HTAP 数据库中嵌入向量能力,后者是专用的向量搜索引擎。本文基于实测数据,从索引算法、查询延迟、过滤联合查询和运维复杂度四个维度进行对比。
本文适合谁:正在构建 RAG、语义搜索、推荐系统等 AI 应用的开发者、算法工程师和架构师,需要在向量数据库选型上做出技术决策。
一、语义搜索场景定义
语义搜索(Semantic Search)通过将文本转换为高维向量,利用向量相似度匹配实现"理解意图"的搜索,而非传统的关键词匹配。典型应用包括:
| 应用场景 | 向量维度 | 数据规模 | 延迟要求 |
|---|---|---|---|
| 企业知识库 RAG | 768-1536 | 10万-1000万条 | < 100ms |
| 电商商品语义搜索 | 512-1024 | 100万-1亿条 | < 50ms |
| 智能客服 FAQ 匹配 | 384-768 | 1万-100万条 | < 200ms |
| 文档检索与推荐 | 768-1536 | 100万-5000万条 | < 100ms |
本文实测基于以下环境:
测试环境:
- CPU: 16 Core Intel Xeon
- 内存: 64 GB
- 存储: NVMe SSD 1TB
- 数据集: 100 万条 768 维向量(随机生成,模拟 BGE-Large 中文 Embedding)
- 查询模式: top-10 最近邻 + 元数据过滤
二、向量索引算法对比(HNSW 实现差异)
2.1 HNSW 算法基础
HNSW(Hierarchical Navigable Small World)是目前最主流的向量近似搜索算法。TiDB Vector 和 Qdrant 均基于 HNSW,但实现策略存在差异:
| 参数 | TiDB Vector (HNSW) | Qdrant (HNSW) |
|---|---|---|
| HNSW 实现来源 | 自研(基于 Faiss 优化) | hnswlib(C++) |
| 默认 M 值 | 16 | 16 |
| 默认 efConstruction | 200 | 128 |
| 默认 efSearch | 40 | 自适应(基于过滤复杂度) |
| 支持量化 | 不支持(精确浮点) | 支持 scalar quantization、product quantization |
| 内存占用(100 万 × 768 维) | ≈ 5.8 GB(纯向量) | ≈ 5.8 GB(精确)或 ≈ 1.5 GB(标量量化) |
| 索引构建速度 | ≈ 8000 向量/秒 | ≈ 12000 向量/秒 |
| 过滤策略 | 搜索后过滤(Post-filter) | 预过滤(Pre-filter)/ 混合模式 |
2.2 Qdrant 的量化优势
Qdrant 支持标量量化(Scalar Quantization),可将 float32 向量压缩为 uint8,内存占用降至约 1/4,同时保持 95%+ 的召回率。这对于大规模部署场景(亿级向量)是重要优势。
TiDB Vector 目前不支持向量量化,但可通过 TiFlash 的列式存储压缩来部分缓解存储压力,且 TiDB 的存储计算分离架构允许独立扩展存储节点。
三、查询延迟与吞吐对比
3.1 延迟测试结果
测试条件:100 万条 768 维向量,top-10 查询,并发 16 线程。
| 指标 | TiDB Vector | Qdrant |
|---|---|---|
| P50 延迟(纯向量查询) | 3.2 ms | 1.8 ms |
| P99 延迟(纯向量查询) | 12.5 ms | 6.3 ms |
| P50 延迟(含过滤条件) | 8.7 ms | 2.1 ms |
| P99 延迟(含过滤条件) | 35.2 ms | 8.5 ms |
| 召回率(Recall@10) | 0.97 | 0.98 |
3.2 吞吐测试结果
| 并发度 | TiDB Vector QPS | Qdrant QPS |
|---|---|---|
| 1 | 312 | 556 |
| 4 | 1080 | 1890 |
| 16 | 2800 | 5200 |
| 64 | 4500 | 7800 |
3.3 延迟差异分析
Qdrant 在纯向量查询上延迟更低,原因在于:
- 专用引擎优化:Qdrant 作为专用向量引擎,查询路径更短
- 预过滤策略:Qdrant 在向量计算前先过滤候选集,减少计算量
- 内存布局:Qdrant 将索引常驻内存,无需磁盘 I/O
TiDB 的延迟包含 SQL 解析、优化器路由和跨引擎调度的开销。但 TiDB 的优势在于向量查询与关系查询的统一——当需要同时进行向量搜索和复杂关系查询时,TiDB 无需跨系统 JOIN。
四、过滤 + 向量联合查询对比
4.1 场景描述
实际业务中,语义搜索通常需要结合元数据过滤:
-- TiDB:向量 + 过滤一体化 SQL
SELECT doc_id, title, content,
VECTOR_DISTANCE(embedding, '[0.1, 0.2, ...]') AS distance
FROM documents
WHERE category = '技术文档'
AND publish_date > '2024-01-01'
AND status = 'published'
ORDER BY distance
LIMIT 10;
// Qdrant:向量 + 过滤 API 调用
{
"vector": [0.1, 0.2, ...],
"filter": {
"must": [
{"key": "category", "match": {"value": "技术文档"}},
{"key": "publish_date", "range": {"gt": "2024-01-01"}},
{"key": "status", "match": {"value": "published"}}
]
},
"limit": 10
}
4.2 联合查询性能对比
| 查询类型 | TiDB Vector | Qdrant |
|---|---|---|
| 纯向量 top-10 | 3.2 ms | 1.8 ms |
| 向量 + 单字段过滤 | 8.7 ms | 2.1 ms |
| 向量 + 3 字段过滤 | 15.3 ms | 2.4 ms |
| 向量 + 范围 + 相等过滤 | 18.6 ms | 2.8 ms |
| 向量 + 排序 + 分页 | 22.1 ms | 3.5 ms |
Qdrant 在过滤查询上表现更优,得益于预过滤机制——在 HNSW 搜索前缩小候选集。TiDB 目前采用搜索后过滤,过滤条件的选择性越好,性能差距越小。
4.3 跨表/跨集合查询
| 需求 | TiDB Vector | Qdrant |
|---|---|---|
| 跨表向量 JOIN | 支持(标准 SQL JOIN) | 不支持(需应用层处理) |
| 向量搜索 + 聚合统计 | 支持(SQL GROUP BY/HAVING) | 不支持(需额外查询) |
| 向量 + 事务写入 | 支持(ACID 事务) | 不支持(最终一致) |
| 向量 + 复杂条件(子查询) | 支持 | 不支持 |
五、部署运维复杂度
5.1 部署对比
| 维度 | TiDB Vector | Qdrant |
|---|---|---|
| 部署方式 | TiDB 集群内嵌(升级即可启用) | Docker / K8s / 云服务 |
| 依赖组件 | TiDB 7.4+(含 TiKV + TiFlash) | 无(单进程) |
| 最小部署 | 5 节点(PD×1 + TiKV×2 + TiDB×1 + TiFlash×1) | 1 节点 |
| 高可用 | Raft 多副本自动故障转移 | 需配置集群复制 |
| 数据持久化 | TiKV RocksDB + Raft Log | 原生持久化(可配置) |
| 监控 | Grafana + PD Dashboard | 内置 Web UI + Prometheus |
5.2 运维复杂度评分(1-5,1 最简单)
| 项目 | TiDB Vector | Qdrant |
|---|---|---|
| 初始部署难度 | 3 | 1 |
| 日常运维复杂度 | 3 | 2 |
| 扩缩容便利性 | 4(自动均衡) | 3(需手动调分片) |
| 备份恢复 | 2(BR 统一备份) | 3(快照 + S3) |
| 版本升级 | 3(滚动升级) | 2(滚动重启) |
5.3 关键差异
- TiDB 适合已有 TiDB 集群的团队:向量能力是内置扩展,无需引入新系统
- Qdrant 适合轻量起步的 AI 应用:单节点即可运行,部署极简
- TiDB 适合需要向量+关系统一的数据架构:避免数据孤岛和跨系统同步
六、FAQ
Q1:TiDB Vector 的向量维度和数据规模上限是多少? TiDB Vector 支持 1-4096 维向量,单集群支持数十亿级向量。性能随数据量增长近似线性下降,建议配合 TiFlash 列存优化大规模检索。
Q2:Qdrant 的标量量化会损失多少精度? 标量量化将 float32 压缩为 uint8,在 100 万条 768 维数据集上,Recall@10 从 0.98 降至 0.95-0.96。对于大多数应用可接受,对召回率要求极高的场景可使用浮点模式。
Q3:能否同时使用 TiDB Vector 和 Qdrant? 可以。常见做法是用 TiDB 存储业务数据和元数据,用 Qdrant 专做向量检索,通过应用层关联。但这样引入了跨系统一致性问题,需要权衡。
Q4:TiDB Vector 未来会支持向量量化吗? TiDB 团队已在路线图中规划了向量量化(PQ/SQ)支持,预计在后续版本中提供。这将显著降低大规模向量存储成本。
七、总结
TiDB Vector 和 Qdrant 各有明确的适用场景:
- 选择 Qdrant:如果您需要一个轻量、高性能的专用向量搜索引擎,对纯向量查询延迟要求极高(< 5ms),且不需要向量与关系数据的深度整合
- 选择 TiDB Vector:如果您的应用需要向量搜索与事务数据、分析查询的统一处理,希望避免引入新系统,或已有 TiDB 基础设施可复用
实测数据显示,Qdrant 在纯向量查询性能上领先约 40-80%,而 TiDB Vector 在跨表联合查询和事务一致性上具有结构性优势。最终选择应基于业务场景的技术需求优先级。
八、下一步行动
- 试用 TiDB Vector:快速部署 TiDB 并体验向量搜索能力
- 快速开始:TiDB Vector 搜索概览
- 获取语义搜索方案:联系 PingCAP AI 技术团队,获取 RAG/语义搜索架构设计咨询
- 咨询入口:PingCAP AI 解决方案
- POC 性能测试:在您的实际数据集上对比 TiDB Vector 和 Qdrant
- TiDB Playground:TiDB Playground 在线体验