news 2026/9/6 20:43:23

深入解析 Qdrant:Rust 编写的高性能向量数据库——从部署实操到核心特性与源码架构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入解析 Qdrant:Rust 编写的高性能向量数据库——从部署实操到核心特性与源码架构

深入解析 Qdrant:Rust 编写的高性能向量数据库——从部署实操到核心特性与源码架构

【免费下载链接】qdrantQdrant - High-performance, massive-scale Vector Database and Vector Search Engine for the next generation of AI. Also available in the cloud https://cloud.qdrant.io/项目地址: https://gitcode.com/GitHub_Trending/qd/qdrant

Qdrant 是一个用 Rust 编写的向量相似度搜索引擎与向量数据库,面向语义匹配、推荐、Faceted Search 等 AI 应用场景,提供存储、检索和管理"点(带 payload 的向量)"的生产级服务。本文以仓库根目录 README.md 为主线,结合 Cargo.toml、config/config.yaml、src/main.rs 等真实源码与配置,完整覆盖本地部署、客户端接入、Qdrant Edge 嵌入式用法、REST/gRPC 双接口、混合检索融合策略、量化与分布式配置等实战内容,帮助读者在跑通服务的同时理解其背后的实现结构。

一、Qdrant 是什么:定位与技术栈

README 对 Qdrant 的定义是:一个向量相似度搜索引擎 + 向量数据库,提供生产级服务与便捷 API,用于存储、搜索和管理"点"(point,即带附加 JSON payload 的向量),并针对**扩展过滤(extended filtering)**深度优化,适用于神经网络/语义匹配、Faceted Search 等应用。

从仓库可以确认几个关键实现事实:

  • 语言与版本:Cargo.toml 显示当前版本为1.18.3edition = "2024"rust-version = "1.97",许可证为 Apache-2.0(与 LICENSE 一致)。
  • 服务端框架:Cargo.toml 依赖actix-web(REST)与tonic(gRPC),并依赖tikv/raft-rsraft实现集群共识(Cargo.toml)。
  • 内存分配器:src/main.rs 在 x86_64/aarch64 上使用Jemalloc作为全局分配器。
  • 核心库分层:工作区由lib/下的一系列内部 crate 组成——segment(段与索引)、shard(分片)、collection(集合)、storage(存储与共识)、api(REST/gRPC 契约)、quantization(量化)、wal(预写日志)、gpu(GPU 加速索引)等,入口逻辑位于 src/main.rs。

二、快速开始:Client-Server 模式

README 给出的最简体验方式是直接运行容器(注意:该方式为无认证的明文部署,绑定所有网络接口,生产环境前必须参照官方安装与安全指南加固):

docker run -p 6333:6333 qdrant/qdrant

仓库内 tools/compose/docker-compose.yaml 提供了更完整的 compose 部署样例,可结合 tests/consensus_tests/docker-compose.yaml 观察多节点集群的编排方式。

启动后,用任意官方客户端连接,例如 Python:

from qdrant_client import QdrantClient client = QdrantClient(url="http://localhost:6333")

对应地,config/config.yaml 中的service段定义了服务默认行为:http_port: 6333grpc_port: 6334(置为null可禁用 gRPC)、host: 0.0.0.0max_request_size_mb: 32max_workers: 0(0 表示等于可用核心数)。

2.1 从源码运行:CLI 参数全解

Qdrant 的 CLI 由 src/main.rs 中的clap定义,常用参数如下:

参数环境变量说明
--bootstrap <URI>QDRANT_BOOTSTRAP多节点部署时,从哪个 peer 引导;不填则本节点视为全新部署的首节点
--uri <URI>QDRANT_URI本 peer 对外地址;首节点必填,后续节点可省略(自动推导)
--snapshot <PATH:NAME>从快照恢复集合,格式<snapshot_file_path>:<target_collection_name>;已有分布式集群中请改用/collections/<name>/snapshots/recoverAPI
--storage-snapshot <PATH>恢复整个存储(多集合)快照
-f, --force-snapshot强制用快照覆盖已有集合
--config-path <PATH>指定配置文件,默认config/config.yaml
--disable-telemetry关闭使用统计上报(对应 config.yaml 的telemetry_disabled
--stacktrace运行栈追踪收集器,调试用
--reinit重置共识状态(行为取决于是否带 bootstrap URI)

config/config.yaml 定义了数据落盘路径:storage.storage_path: ./storagestorage.snapshots_path: ./snapshots,临时快照目录默认在storage/snapshots_temp/

三、客户端生态

README 列出以下客户端,可集成到应用栈中(各客户端为独立仓库,此处仅列名称):

  • 官方:Python、Rust、Go、JavaScript/TypeScript、Java、.NET/C# 客户端
  • 社区:Kotlin(Kdrant)、PHP 客户端

接入形态上,客户端统一走 REST(OpenAPI 3.0)或 gRPC 两种接口,见下一节。

四、Qdrant Edge:进程内的轻量向量引擎

README 中的 Qdrant Edge 章节介绍了一个与 Server 形态互补的组件:它运行在应用进程内而非客户端-服务器架构,数据本地存储与查询,并可与 Qdrant Server 同步;面向边缘设备与资源受限环境,提供与客户端-服务器版相同的向量检索能力,但体积更小、延迟更低、可离线。

仓库中 Edge 的 Python 绑定位于 lib/edge/python,核心实现位于 lib/edge/src(EdgeShardedge_shardread_view等模块),其 lib/edge/python/README.md 明确定位为"面向嵌入式设备、自主系统与移动 agent 的进程内向量搜索引擎"。README 中的最小示例:

from qdrant_edge import Distance, EdgeConfig, EdgeVectorParams, EdgeShard, Point, UpdateOperation shard = EdgeShard.create("./shard", EdgeConfig( vectors={"my-vector": EdgeVectorParams(size=4, distance=Distance.Cosine)} )) shard.update(UpdateOperation.upsert_points([ Point(id=1, vector={"my-vector": [0.1, 0.2, 0.3, 0.4]}, payload={"color": "red"}) ]))

EdgeShard暴露的数据管理、查询与快照恢复方法与 Server 的 collection 操作语义对齐;lib/edge/python/examples/下还有 13 个可运行示例,例如混合检索(含 DBSF 融合)的 hybrid_search_dbsf.py。

五、API:REST 与 gRPC 双接口

5.1 REST(OpenAPI 3.0)

Qdrant 提供 REST API 及 OpenAPI 3.0 规范,支持为几乎任何语言/框架生成客户端。仓库内可直接查阅:

  • 完整的 OpenAPI JSON 定义:docs/redoc/master/openapi.json(docs/redoc/下还保留了 v0.4.2 至 v1.18.x 各历史版本的规范,便于对比 API 演进)
  • OpenAPI 源由 openapi/ 目录下的 ytt 模板(openapi-main.ytt.yamlopenapi-points.ytt.yamlopenapi-cluster.ytt.yaml等)维护
  • REST 契约类型定义在 lib/api/src/rest,例如查询参数中的融合策略枚举 lib/api/src/rest/schema.rs

5.2 gRPC

面向更快、生产级检索场景,Qdrant 同时提供 gRPC 接口。gRPC 契约位于 lib/api/src/grpc,含 17 个.proto文件(points.protocollections.protoqdrant.proto等),其中points.proto定义了包括Fusion在内的查询相关消息。Cargo.toml 中的tonictonic-reflection依赖对应这一运行时,gRPC 端口默认6334(见 config/config.yaml)。

六、核心特性深度解析

6.1 稠密、稀疏与多向量检索

README 声明 Qdrant 同时支持三类向量:稠密向量(语义相似度)、稀疏向量(全文检索)、多向量(late interaction 模型如 ColBERT 或一个对象多组嵌入)。仓库佐证:

  • 稀疏向量独立成 crate:lib/sparse(含indexsearch_scratch模块与tests/openapi/test_sparse_vector_large.py等大文件集成测试)
  • 稀疏向量存储、倒排类结构还可参见 lib/posting_list(builder.rsiterator.rsview.rs
  • 稠密向量主检索走 HNSW 图索引,实现位于 lib/segment/src/index,相关基准测试在 lib/segment/benches(hnsw_search_graph.rsvector_search.rs等)
  • BM25 全文分词器位于 lib/bm25,对应测试 tests/openapi/test_bm25.py

6.2 Payload 过滤

任意 JSON payload 可附加在向量上,并支持关键词匹配、全文、数值范围、地理位置等条件组合,配合should/must/must_not布尔子句。仓库中过滤能力有专门的测试与基准:tests/openapi/test_filter.py、lib/segment/benches/boolean_filtering.rs、lib/segment/benches/range_filtering.rs,过滤查询的执行计划优化(Query Planning)利用已建 payload 索引选择最优检索路径(lib/segment/src/index内的 payload 索引与 lib/collection/src/collection 的读路径)。

6.3 混合检索与融合策略(RRF / DBSF)

README 的 Hybrid Search 一节指出:可在单次查询中组合多路向量(prefetch),结果通过可配置的融合策略合并,明确点名Reciprocal Rank Fusion (RRF)Distribution-Based Score Fusion (DBSF)

源码层面,REST 契约中直接定义了该枚举(lib/api/src/rest/schema.rs):

/// * `rrf` - Reciprocal Rank Fusion (with default parameters) /// * `dbsf` - Distribution-Based Score Fusion pub enum Fusion { Rrf, Dbsf, }

其中Rrf结构体还支持可选的k参数与每路 prefetch 的weights权重。gRPC 侧的对应枚举见 lib/api/src/grpc/proto/points.proto 中的Fusion。融合后的重排与聚合在 lib/collection/src/collection/query.rs 与分片层 lib/shard/src/query 中完成;端到端验证可看 tests/openapi/test_query.py(其中包含 RRF/DBSF 的融合用例),Edge 侧同样内置 hybrid_search_dbsf.py 示例。

6.4 向量量化与磁盘存储

README 声明"内置量化最多可削减 97% 的 RAM 占用,并可在检索速度与精度之间调节"。仓库的量化实现集中于 lib/quantization,从源码文件名可确认覆盖四种编码形态:

  • encoded_vectors_binary.rs:二进制量化
  • encoded_vectors_pq.rs:乘积量化(PQ)
  • encoded_vectors_u8.rs:标量(u8)量化
  • encoded_vectors_tq.rs 与 turboquant/:TurboQuant 量化

配套基准在 lib/quantization/benches(pq.rsbinary.rsencode.rs等),端到端测试见 tests/openapi/test_turboquant.py 与 tests/openapi/test_turbo4_storage.py。磁盘侧存储方面,config/config.yaml 的on_disk_payload: true(默认)与hnsw_index.memory: cached/cold等"内存放置"参数共同决定数据驻留策略。

6.5 分布式部署

README 列出"分片与副本实现水平扩展、集合可零停机扩缩"。实现依据:

  • 共识基于 Raft:Cargo.toml 引入tikv/raft-rsraftraft-proto;共识状态管理位于 lib/storage/src/content_manager,入口装配在 src/main.rs(ConsensusConsensusManagerTableOfContent等)
  • 集群配置集中在 config/config.yaml:cluster.enabled: false(单机默认)、cluster.p2p.port: 6335(节点间 gRPC,可开 TLS)、cluster.consensus.tick_period_ms: 100(心跳周期,官方注释明确"除非确知后果否则不要修改")、compact_wal_entries: 128(共识 WAL 压缩阈值,让新节点经快照快速加入)
  • 集合默认replication_factor: 1write_consistency_factor: 1(config/config.yaml)
  • 分片传输方法可全局指定:shard_transfer_method支持stream_records/snapshot/wal_delta(config/config.yaml)
  • 多节点行为有大量集成测试:tests/consensus_tests 下 80+ 个场景(副本迁移、resharding、快照恢复、共识压缩等)

6.6 其他高亮特性(README Features 与源码对照)

README 特性仓库佐证
Faceting(按 payload 值聚合)lib/shard/src/facet.rs、lib/segment/benches/facets.rs
Recommendation(正/负样本推荐)lib/collection/src/recommendations.rs、tests/openapi/test_recommend.py
Discovery(向量空间区域约束检索)lib/collection/src/discovery.rs、tests/openapi/test_discover.py
MMR / Relevance Feedback 调优tests/openapi/test_query_formula.py、tests/openapi/test_relevance_feedback.py
多租户(Multitenancy)多租户数据分区实践见 tests/consensus_tests/test_tenant_promotion.py
可观测性(指标/遥测/审计)prometheus依赖(Cargo.toml)、src/common/telemetry.rs、lib/storage/src/audit.rs 与 config.yaml 的audit
SIMD 硬件加速(x86/x64、Neon)lib/segment/src/spaces(距离计算内核)、lib/quantization/cpp(avx2.cneon.csse.c
GPU 加速索引(NVIDIA/AMD)lib/gpu(Vulkan 设备/管线/着色器封装),以 Cargo featuregpu开启(Cargo.toml)
异步 I/O(io_uringconfig/config.yaml 的async_scorer/io_uring参数;集成测试 tests/consensus_tests/test_io_uring_eintr.rs
预写日志(WAL)lib/wal crate,storage.wal.wal_capacity_mb: 32wal_segments_ahead: 0(config/config.yaml)

README 同时指出 Web UI 提供可视化交互(浏览集合、管理数据、直接操作 REST API)。Web 界面静态资源由 tools/sync-web-ui.sh 同步,服务路由位于 src/actix/web_ui.rs(仓库内无该界面的截图素材,故本文不配图)。

七、核心配置文件解读(config/config.yaml)

config/config.yaml 是单文件覆盖几乎所有生产参数的权威参考,按段说明关键项:

storage 段(数据与吞吐)

  • storage_path/snapshots_path/temp_path:数据、快照与临时文件位置
  • on_disk_payload(默认true):payload 不落内存,按需从磁盘读取,省 RAM 换轻微延迟;参与过滤且已索引的字段仍驻留 RAM
  • low_memory_mode:启动期内存恢复旋钮,disabled/no_resident/no_populate三档,用于节点 OOM 崩溃循环时的降级加载
  • update_concurrency:分片副本并发更新上限(null为最大并发)
  • node_typeNormal(正常节点)或Listener(只接收更新、不答查询的备份节点)

storage.performance 段

  • max_search_threads: 0(0=自动)、optimizer_cpu_budget: 0(优化作业 CPU 预算)、update_rate_limit(防分布式模式下高并发更新 DDoS)
  • async_scorer/io_uring:Linux 下用 io_uring 做异步打分与磁盘读
  • 集合/分片/段的并发加载上限(max_concurrent_*_loads

storage.optimizers 段(段优化器)

  • deleted_threshold: 0.2:删除比例达到 0.2 才触发段优化
  • vacuum_min_vector_number: 1000default_segment_number: 0(按 CPU 自动选择,建议设为搜索线程数的因子)
  • max_segment_size_kb(索引速度 vs 段大小的权衡)、indexing_threshold_kb: 10000(超过该体积建索引,设 0 禁用)、flush_interval_sec: 5max_optimization_threads
  • optimizers_overwrite:全局强制覆盖所有集合的优化参数

storage.hnsw_index 段

  • m: 16(图每节点边数,越大越准越占空间)、ef_construct: 100(建图时考虑邻居数)、full_scan_threshold_kb: 10000(低于阈值的全量扫描优先于 HNSW 走查)、max_indexing_threads: 0(0=自动,官方建议 8~16 之间)、on_disk/memory: cached|cold|pinned(内存放置)、payload_m(payload 索引专用 M)

service 段(服务与安全)

  • 端口与 worker:http_port: 6333grpc_port: 6334null禁用)、max_workers
  • 安全:enable_tlsverify_https_client_certificateapi_key/read_only_api_key(启用 API key 必须同时启用 TLS)、jwt_rbac(细粒度 RBAC)、enforce_internal_auth(升级期间保持关闭以便旧 peer 兼容)、enable_snapshot_url_recovery(禁用远程 URL 恢复可缓解 SSRF 风险)

quotas 段(集群级资源配额)

  • max_resident_memory_percent/max_disk_usage_percent:进程内存与存储文件系统使用率上限,超限拒绝更新
  • release_margin_percent(默认 5):回落到上限以下 5 个百分点才重新接单,避免在噪声区间反复进出服务
  • 配置仅在首次启动写入种子,之后以存储目录中的quota.json为准,经共识在集群同步,并可由PUT /quotasAPI 修改(对应 lib/storage/src/quota.rs 与 tests/openapi/test_global... 相关端到端测试 tests/consensus_tests/test_global_quota.py)

cluster / tls / audit 段

  • 如前所述:p2p 端口 6335、共识 tick 100ms、WAL 压缩 128 条
  • TLS 证书三件套(cert/key/ca_cert)与cert_ttl: 3600(HTTPS 端点的证书热轮换,不支持 gRPC 集群内通信)
  • audit:结构化 JSON 审计日志,按日轮转,trust_forwarded_headers仅在可信反代后开启(防止客户端伪造 IP)

另有 config/development.yaml、config/production.yaml、config/deb.yaml 三种环境预设,可对照差异调整。

八、仓库结构速览与集成测试入口

围绕 README 的能力宣称,仓库目录可这样对应理解:

  • src/:进程入口与 HTTP/gRPC 装配(actix/REST 路由、tonic/gRPC、consensus.rssettings.rsstartup.rssnapshots.rs),以及wal_inspector/segment_inspector/wal_pop等诊断子命令入口
  • lib/segment:最底层——向量存储、HNSW/payload 索引、ID 跟踪、距离空间实现
  • lib/shard:分片抽象(更新、查询、优化器、代理段、快照、配额)
  • lib/collection:集合层——副本集、分片路由、查询聚合(含融合)、遥测
  • lib/storage:Table of Contents、共识内容管理、RBAC、审计
  • lib/api:REST/gRPC 契约与 proto
  • tests/openapi:基于 OpenAPI 的 90+ 端到端 API 测试(conftest.py统一起服务),是验证 README 所列特性行为的最直接依据
  • tests/consensus_tests:分布式/共识场景的黑盒集成测试
  • tests/e2e_tests:快照、TLS、低资源、配额等更重的端到端场景

九、贡献与生态提示

  • 开发前请阅读 docs/CONTRIBUTING.md;README 特别强调:开发分支是dev而非master,fork 后从dev拉分支并向dev提 PR
  • 开发环境可用 Nix(shell.nix、tools/nix),本地开发配置见 config/development.yaml
  • 遥测默认开启(config/config.yamltelemetry_disabled: false),可用--disable-telemetry或配置项关闭
  • 路线图文档位于 docs/roadmap/(2022–2024 各年度版本)

十、小结

以 README.md 为骨架可以完整勾勒 Qdrant 的产品面:Docker 一条命令起步、多语言官方客户端、进程内轻量版 Edge、REST/gRPC 双接口、稠密/稀疏/多向量检索、丰富 payload 过滤、RRF/DBSF 混合融合、最高 97% 的量化内存削减、分片副本的分布式部署,以及 Faceting、推荐、发现、多租户、GPU/SIMD 加速、io_uring 异步 I/O 与 WAL 持久化等工程特性。而 config/config.yaml 与lib/src/下的实现代码则给出了每一项特性可核对的落点:从 HNSW 参数、优化器阈值到共识与配额配置,读者可以按本文给出的文件路径逐一深入,形成"配置—实现—测试"三层闭环的理解。

【免费下载链接】qdrantQdrant - High-performance, massive-scale Vector Database and Vector Search Engine for the next generation of AI. Also available in the cloud https://cloud.qdrant.io/项目地址: https://gitcode.com/GitHub_Trending/qd/qdrant

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

GNSS-R技术复现:基于CYGNSS数据的鄱阳湖水域面积动态监测

简介&#xff1a;一份针对基于星载GNSS-R技术的鄱阳湖水域面积动态监测的论文复现资料&#xff0c;主要面向从事遥感技术研究、水资源管理与灾害防控的专业人员&#xff0c;也适合对GNSS-R方法感兴趣的科研工作者。资料以PDF格式呈现&#xff0c;共1个文件&#xff0c;约871KB&…

作者头像 李华
网站建设 2026/9/6 20:40:41

35KV变电站施工组织设计方案编制要点与现场执行细节

简介&#xff1a;这是一份面向35kV变电站新建或改扩建工程的施工组织设计方案文档&#xff0c;内容涵盖编制依据、工程概况、工期目标、电气安装与调试工序、安全质量及文明施工管理等环节&#xff0c;适合电力工程建设单位、施工项目部、电气安装与调试人员参考使用。文档为1个…

作者头像 李华
网站建设 2026/9/6 20:33:48

三菱FX5U与温湿度变送器MODBUS RTU通信实战

简介&#xff1a;三菱FX5U系列PLC与温湿度变送器实现MODBUS RTU通信的编程示例文档&#xff0c;面向工业自动化现场工程师与PLC编程初学者&#xff0c;重点解决FX5U作为主站通过485串口读取温湿度变送器数据的问题。资源为单个docx格式文档&#xff0c;压缩包共1个文件&#xf…

作者头像 李华
网站建设 2026/9/6 20:33:05

MaxKB 部署教程:10 分钟跑通你的第一个知识库问答

MaxKB 部署教程&#xff1a;10 分钟跑通你的第一个知识库问答 【免费下载链接】MaxKB &#x1f525; MaxKB is an open-source platform for building enterprise-grade agents. 强大易用的开源企业级智能体平台。 项目地址: https://gitcode.com/GitHub_Trending/ma/MaxKB …

作者头像 李华