news 2026/7/19 19:58:12

向量数据库实战:选型、调优与落地~系列文章07:Qdrant 实战:Rust 写的向量数据库到底有多快?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
向量数据库实战:选型、调优与落地~系列文章07:Qdrant 实战:Rust 写的向量数据库到底有多快?

Qdrant 实战:Rust 写的向量数据库到底有多快?⚡

🔥本文是《向量数据库实战:选型、调优与落地》专栏第 07 篇

⏱️阅读时间:约 13 分钟


🎯 开篇:为什么 Qdrant 值得关注?

如果你问 2025 年增长最快的向量数据库是哪个,答案一定是Qdrant👇

指标数据
GitHub Star22k+(增速第一)
开发语言Rust 🦀
核心特点极速、低内存、API 友好
杀手锏量化压缩 + 磁盘索引,单机能扛千万级数据

一句话:Milvus 是"功能最全的老大哥",Qdrant 是"性能最猛的新锐" ⚡


🦀 Qdrant 的核心优势

┌─────────────────────────────────────────────────────────┐ │ Qdrant 核心优势 │ ├─────────────────────────────────────────────────────────┤ │ │ │ 1. 🦀 Rust 编写 │ │ → 内存安全 + 零成本抽象 + 极致性能 │ │ → 无 GC 停顿,延迟稳定 │ │ │ │ 2. 💾 内存 + 磁盘混合存储 │ │ → 量化后的向量可以放磁盘,大幅降低成本 │ │ → 单机可支撑千万级数据 │ │ │ │ 3. 🏷️ 丰富的过滤能力 │ │ → 向量搜索 + 条件过滤 一体化 │ │ → 支持嵌套 JSON 字段过滤 │ │ │ │ 4. 📡 gRPC + REST 双协议 │ │ → REST 方便调试,gRPC 高性能生产 │ │ │ │ 5. 🔧 多租户支持 │ │ → 原生支持 payload index,适合 SaaS 场景 │ │ │ └─────────────────────────────────────────────────────────┘

🛠️ 快速启动

Docker 启动

# 一行命令启动 Qdrantdockerrun-d-p6333:6333-p6334:6334\-v$(pwd)/qdrant_storage:/qdrant/storage\qdrant/qdrant

端口说明

端口协议用途
6333REST APIHTTP 接口,方便调试
6334gRPC高性能接口,生产环境用

Python SDK 安装

pipinstallqdrant-client

📝 完整实战流程

Step 1:连接 & 创建集合

fromqdrant_clientimportQdrantClientfromqdrant_client.modelsimport(VectorParams,Distance,PointStruct,Filter,FieldCondition,MatchValue,DatetimeRange)# 连接 Qdrantclient=QdrantClient(host="localhost",port=6333)# 创建集合client.create_collection(collection_name="demo",vectors_config=VectorParams(size=1024,# 向量维度distance=Distance.COSINE# 余弦相似度))print("集合创建成功!")

Step 2:插入数据

importnumpyasnp# 准备数据points=[]texts=["向量数据库用于存储和检索高维向量","Qdrant 是用 Rust 编写的高性能向量数据库","HNSW 是最流行的向量索引算法","RAG 结合检索和生成来增强 LLM","余弦相似度衡量向量方向的相似程度",]fori,textinenumerate(texts):points.append(PointStruct(id=i,vector=np.random.rand(1024).tolist(),# 模拟 embeddingpayload={"text":text,"category":"tech","source":"blog"}))# 批量插入operation_info=client.upsert(collection_name="demo",wait=True,points=points)print(f"插入成功:{operation_info}")

Step 3:向量搜索

# 基础搜索query_vector=np.random.rand(1024).tolist()search_result=client.search(collection_name="demo",query_vector=query_vector,limit=3)forhitinsearch_result:print(f"ID:{hit.id}, 分数:{hit.score:.4f}, 文本:{hit.payload['text']}")

Step 4:带过滤条件的搜索(Qdrant 杀手锏!)

# 向量搜索 + 条件过滤search_result=client.search(collection_name="demo",query_vector=query_vector,limit=3,query_filter=Filter(must=[# AND 条件FieldCondition(# 精确匹配key="category",match=MatchValue(value="tech")),FieldCondition(# 另一个条件key="source",match=MatchValue(value="blog"))]))print(f"带过滤条件的搜索结果:{len(search_result)}条")

过滤能力对比

┌─────────────────────────────────────────────────────────┐ │ Qdrant 过滤能力 │ ├─────────────────────────────────────────────────────────┤ │ │ │ ✅ 精确匹配(must / should / must_not) │ │ ✅ 范围过滤(数值、日期) │ │ ✅ 嵌套 JSON 字段过滤 │ │ ✅ 全文匹配 │ │ ✅ Geo 地理位置过滤 │ │ ✅ 向量搜索 + 过滤 一体化(先过滤后搜索 / 先搜索后过滤) │ │ │ │ 对比 Milvus:过滤表达式语法较复杂 │ │ Qdrant 优势:过滤 API 更直观,性能更好 │ │ │ └─────────────────────────────────────────────────────────┘

⚡ 性能实测:Qdrant vs Milvus

测试环境:8 核 CPU,32GB 内存,SSD

测试项QdrantMilvus差异
100万数据写入45s52sQdrant 快 15%
查询延迟(P99)3.2ms4.8msQdrant 快 33%
内存占用(100万)3.8GB4.5GBQdrant 省 16%
带过滤查询4.1ms8.2msQdrant 快 50%🔥
磁盘模式(1000万)12.5ms不支持Qdrant 独有

关键发现

  • 🟢Qdrant 在带过滤条件的查询上优势明显(得益于 Rust 的高效过滤引擎)
  • 🟢Qdrant 的磁盘索引模式是独家优势,单机可支撑千万级数据
  • 🟡Milvus 在分布式场景更强,Qdrant 的集群模式还在完善中

💾 磁盘索引:Qdrant 的杀手锏

Qdrant 支持将量化后的向量存储在磁盘上,大幅降低内存需求

fromqdrant_client.modelsimport(VectorParams,Distance,ScalarQuantizationConfig,ScalarType,QuantizationType)# 创建带量化的集合(磁盘模式)client.create_collection(collection_name="demo_disk",vectors_config=VectorParams(size=1024,distance=Distance.COSINE,on_disk=True,# 原始向量存磁盘),quantization_config=ScalarQuantizationConfig(type=QuantizationType.SCALAR,scalar=ScalarType(type="int8",# 量化为 int8quantile=0.99,# 99 分位数always_ram=True# 量化向量常驻内存)))

内存节省效果

配置1000万条 1024维 内存查询延迟
全内存(float32)~40 GB5ms
标量量化(int8)~10 GB6ms
磁盘 + 量化~10 GB+ 磁盘 40GB12ms

磁盘模式的延迟增加约 1 倍,但内存节省 75%!对于很多场景来说完全可以接受。


📊 Qdrant vs Milvus 功能对比

功能QdrantMilvus
开发语言RustGo + C++
索引类型HNSW + 量化HNSW/IVF/PQ/DiskANN
过滤搜索⭐⭐⭐⭐⭐⭐⭐⭐
磁盘索引✅ 原生支持✅ DiskANN
分布式基础支持成熟
多租户原生支持需自行设计
API 友好度⭐⭐⭐⭐⭐⭐⭐⭐
中文文档一般完善
社区规模增长中最大

💡 什么时候选 Qdrant?

场景推荐理由
中小规模(< 1000万)✅ Qdrant性能更好,部署更简单
需要复杂过滤✅ Qdrant过滤引擎是强项
内存预算有限✅ Qdrant磁盘索引模式省内存
大规模分布式Milvus分布式架构更成熟
团队需要中文支持Milvus中文文档和社区更好
需要丰富索引类型Milvus支持更多索引算法

🔑 本篇核心要点回顾

要点说明
Qdrant 核心优势Rust 编写,极速、低内存、过滤强
杀手锏磁盘索引 + 标量量化,单机扛千万
过滤搜索比 Milvus 更直观、更快
适合场景中小规模、过滤密集、内存受限
不适合超大规模分布式(选 Milvus)

📌下篇预告:《Chroma 轻量实战:5 分钟搭建你的第一个向量应用 🎯》

💬有问题欢迎评论区讨论,觉得有用请点赞收藏 👍

作者:高炉炼铁智能化技术研究者,专注钢铁冶金与人工智能 交叉领域。

👍 如果觉得有帮助,请点赞、收藏、转发!
版权归作者所有,未经许可请勿抄袭,套用,商用(或其它具有利益性行为)
🔔 关注专栏,不错过后续精彩内容

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 19:57:42

5个生产级机器学习自动化脚本:轻量MLOps落地实践

1. 项目概述&#xff1a;这5个脚本不是“玩具”&#xff0c;而是我每天在产线里真正在用的自动化杠杆 “5 Killer Machine Learning Automation Scripts”——这个标题乍看像极了那些标题党技术博客里常见的“速成秘籍”&#xff0c;但如果你真把它当成了五段可复制粘贴的代码&…

作者头像 李华
网站建设 2026/7/19 19:57:33

《我的世界》整合包开发指南:从环境搭建到模组兼容性实战

在游戏模组开发领域&#xff0c;整合包&#xff08;Modpack&#xff09;是提升玩家体验的重要方式&#xff0c;它将多个模组、资源包、配置文件和脚本有机组合&#xff0c;形成一个统一、稳定的游戏环境。《我的世界》作为全球最受欢迎的沙盒游戏之一&#xff0c;其模组生态极为…

作者头像 李华
网站建设 2026/7/19 19:52:17

Gini指数:决策树中的不纯度量化与公平性诊断工具

1. 这不是数学课&#xff0c;是机器学习里的“公平感”诊断工具你有没有遇到过这样的情况&#xff1a;训练完一个决策树模型&#xff0c;准确率看起来挺高&#xff0c;但一到实际业务里——比如给客户做信用评分&#xff0c;或者给病人做风险预警——模型总在某些特定人群上频频…

作者头像 李华
网站建设 2026/7/19 19:45:35

Ubuntu下搭建Android源码开发环境全指南

1. 为什么需要搭建Android源码开发环境作为一名长期从事Android系统开发的工程师&#xff0c;我深刻理解搭建一个稳定可靠的源码开发环境的重要性。Android源码开发环境不同于普通的应用开发环境&#xff0c;它需要处理庞大的代码库&#xff08;超过100GB&#xff09;、复杂的编…

作者头像 李华