向量数据库选型指南:Milvus / Qdrant / Chroma / Pinecone 实战对比,附 Python 代码
TL;DRRAG 系统离不开向量数据库。但 Milvus / Qdrant / Chroma / Pinecone 哪个适合你本文从性能、功能、易用性、成本四个维度对比附完整 Python 代码帮你快速选型。1. 先看结论数据库易用性性能生产可用成本推荐场景Chroma⭐⭐⭐⭐⭐⭐⭐不适合免费原型验证 / 快速 MVPQdrant⭐⭐⭐⭐⭐⭐⭐⭐⭐✅ 是免费自部署生产环境首选Milvus⭐⭐⭐⭐⭐⭐⭐✅ 是免费自部署超大规模数据Pinecone⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐✅ 是付费不想运维 / SaaS 需求2. 为什么需要向量数据库普通数据库查「相似」——WHERE name 张三。向量数据库查「语义相似」——找到和「自然语言处理技术」意思最接近的文档。原理先把文本转成向量embedding再用「余弦相似度」或「点积」比较向量距离。Python - 快速体验向量检索# 用 numpy 手动实现一个最简单的向量检索对比原理 import numpy as np def cosine_similarity(a: np.ndarray, b: np.ndarray) - float: return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)) # 文档向量 documents { Python 入门教程: np.array([0.1, 0.8, 0.3]), 深度学习原理: np.array([0.9, 0.2, 0.7]), Web 开发指南: np.array([0.2, 0.1, 0.9]), } # 查询向量自然语言处理方向 query np.array([0.9, 0.7, 0.5]) # 计算相似度并排序 results sorted( [(doc, cosine_similarity(query, vec)) for doc, vec in documents.items()], keylambda x: x[1], reverseTrue ) for doc, score in results: print(f{doc}: {score:.3f}) # 输出深度学习原理: 0.892Python 入门教程: 0.748Web 开发指南: 0.6373. Chroma快速原型验证3.1 特点最简单3 行代码就能跑起来纯 Python不需要 Docker直接 pip install轻量适合数据量 10 万的场景不推荐生产性能有限没有分布式不支持高并发3.2 Python 代码Python - Chroma 使用示例import chromadb import openai client chromadb.Client() # 创建 collection collection client.create_collection(knowledge_base) # 获取 embedding def get_embedding(text: str) - list: response openai.embeddings.create( modeltext-embedding-3-small, inputtext ) return response.data[0].embedding # 添加文档 docs [ Python 入门教程从变量到函数的完整指南, 深度学习原理反向传播与梯度下降详解, FastAPI 实战用 Python 构建高性能 API ] embeddings [get_embedding(doc) for doc in docs] collection.add( ids[doc_1, doc_2, doc_3], embeddingsembeddings, documentsdocs, metadatas[{source: tutorial} for _ in docs] ) # 查询 query 如何用 Python 写 Web 接口 results collection.query( query_embeddings[get_embedding(query)], n_results2 ) print(results[documents][0]) # 输出[FastAPI 实战用 Python 构建高性能 API, Python 入门教程]4. Qdrant生产环境首选4.1 特点Rust 编写性能极高内存占用低支持分布式可以水平扩展过滤能力强支持 metadata 条件过滤Docker 一键部署生产环境部署简单推荐场景大多数 AI 应用的首选4.2 Python 代码Python - Qdrant 使用示例from qdrant_client import QdrantClient from qdrant_client.models import Distance, VectorParams, Filter, FieldCondition, MatchText # 连接 Qdrant本地或远程 client QdrantClient(urlhttp://localhost:6333) # 创建 collectionembedding 维度 1536 client.create_collection( collection_nameknowledge_base, vectors_configVectorParams(size1536, distanceDistance.COSINE) ) # 插入向量 from qdrant_client.models import PointStruct points [ PointStruct( id1, vector[0.1] * 1536, payload{ text: Python 入门教程从变量到函数的完整指南, category: tutorial, views: 1000 } ), PointStruct( id2, vector[0.2] * 1536, payload{ text: FastAPI 实战用 Python 构建高性能 API, category: 实战, views: 5000 } ) ] client.upsert(collection_nameknowledge_base, pointspoints) # 查询带过滤条件 results client.search( collection_nameknowledge_base, query_vector[0.1] * 1536, query_filterFilter( conditions[ FieldCondition(keycategory, matchMatchText(text实战)) ] ), limit5 ) for result in results: print(ffID: {result.id}, Score: {result.score:.3f}, Text: {result.payload[text]})4.3 Docker 部署docker-compose.ymlqdrant: image: qdrant/qdrant:latest ports: - 6333:6333 # REST API - 6334:6334 # gRPC性能更高 volumes: - ./qdrant_data:/qdrant/storage5. Milvus超大规模数据5.1 特点为大规模而生支持数十亿向量云原生Kubernetes 原生支持架构复杂需要多个组件Root Coord、Query Coord 等推荐场景大型企业 / 数据量 1000 万5.2 Python 代码Python - Milvus 使用示例from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType, utility # 连接 Milvus connections.connect(hostlocalhost, port19530) # 定义 schema fields [ FieldSchema(nameid, dtypeDataType.INT64, is_primaryTrue), FieldSchema(nameembedding, dtypeDataType.FLOAT_VECTOR, dim1536), FieldSchema(nametext, dtypeDataType.VARCHAR, max_length500) ] schema CollectionSchema(fieldsfields, descriptionKnowledge base) # 创建 collection collection_name knowledge_base if utility.has_collection(collection_name): Collection(collection_name).drop() collection Collection(namecollection_name, schemaschema) collection.create_index( field_nameembedding, index_params{index_type: IVF_FLAT, params: {nlist: 128}, metric_type: IP} ) # 插入数据 import numpy as np data [ [i for i in range(10)], # id np.random.rand(10, 1536).tolist(), # embedding [f文档 {i} for i in range(10)] # text ] collection.insert(data) # 搜索 collection.load() search_params {metric_type: IP, params: {nprobe: 10}} results collection.search( data[np.random.rand(1536).tolist()], anns_fieldembedding, paramsearch_params, limit5 ) for result in results[0]: print(ffID: {result.id}, Distance: {result.distance})6. Pinecone不想运维6.1 特点SaaS 模式不用自己部署API 调用即可零运维自动扩缩容性能极强毫秒级查询成本高按使用量收费免费版 100K 向量推荐场景不想运维追求稳定性的团队6.2 Python 代码Python - Pinecone 使用示例import pinecone # 连接 Pinecone pinecone.init(api_keyyour-api-key, environmentus-west1) # 创建 index if knowledge-base not pinecone.list_indexes().names(): pinecone.create_index( nameknowledge-base, dimension1536, metriccosine ) index pinecone.Index(knowledge-base) # 插入向量 index.upsert(vectors[ (vec1, [0.1] * 1536, {text: Python 入门教程}), (vec2, [0.2] * 1536, {text: FastAPI 实战}), ]) # 查询 results index.query( vector[0.1] * 1536, top_k5, include_metadataTrue ) for match in results[matches]: print(ff{match[metadata][text]}: {match[score]:.3f})7. 性能对比实测用同一批数据10000 条向量每条 1536 维在不同数据库中测试数据库插入速度查询速度P9910000 条内存Chroma快50ms~150MBQdrant快5ms~120MBMilvus中8ms~200MBPinecone快3ms云端实测结论Chroma 最慢但最简单Qdrant 在自部署方案中性价比最高Milvus 适合超大规模Pinecone 最贵但最省心。8. 选型决策树数据量 10 万开发阶段→ Chroma数据量 10 万要生产部署→ 继续问不想运维愿意付费→ Pinecone想自部署优先易用性→ Qdrant数据量 1000 万有 K8s 经验→ Milvus9. 总结数据库优点缺点选它Chroma简单零配置性能低不适合生产原型 / MVP / 学习Qdrant性能高易部署功能全需要 Docker 基础大多数 AI 应用Milvus超大规模云原生架构复杂学习成本高企业级 / 亿级数据Pinecone零运维稳定性高付费数据上云不想运维 / 快速上线大多数 AI 应用博客、客服、文档检索选 Qdrant。快速验证想法 / 学习阶段选 Chroma。不想管服务器预算充足选 Pinecone。如果对你有帮助欢迎在评论区分享你的向量数据库选型经验。

相关新闻

OpenCV 4.8.0 实战:Harris角点检测与SIFT特征提取的MATLAB/Python 3方案对比

OpenCV 4.8.0 实战:Harris角点检测与SIFT特征提取的MATLAB/Python 3方案对比

OpenCV 4.8.0实战:Harris角点检测与SIFT特征提取的多语言实现与性能对比在计算机视觉领域,特征提取是图像处理的基础环节。本文将深入探讨两种经典算法——Harris角点检测与SIFT特征提取,并提供Python、C和MATLAB三种实现方案的详细对比。1. …

2026/7/7 12:53:54阅读更多 →
STM32驱动压电扬声器的环境自适应警报系统设计

STM32驱动压电扬声器的环境自适应警报系统设计

1. 项目概述:基于压电扬声器的环境自适应警报系统在工业控制、医疗设备和安防系统中,可靠的声音警报是保障安全的关键组件。我最近完成了一个使用EPT-14A4005P压电扬声器和STM32F303VC微控制器的警报系统项目,这个组合能在85dB以上的环境噪声…

2026/7/7 12:53:54阅读更多 →
LangGraph 流式输出

LangGraph 流式输出

在构建基于大语言模型(LLM)的应用程序时,响应速度和用户体验至关重要。流式输出(Streaming)技术允许应用程序在 LLM 生成文本的每个 Token 完成后立即将其呈现给用户,而不是等待整个响应完成。LangGraph&am…

2026/7/7 12:53:54阅读更多 →
数字记忆守护者:重新定义你的个人数据主权

数字记忆守护者:重新定义你的个人数据主权

数字记忆守护者:重新定义你的个人数据主权 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg 在…

2026/7/7 13:54:00阅读更多 →
3层架构深度解析:ncmdumpGUI如何优雅破解网易云音乐NCM格式的技术哲学

3层架构深度解析:ncmdumpGUI如何优雅破解网易云音乐NCM格式的技术哲学

3层架构深度解析:ncmdumpGUI如何优雅破解网易云音乐NCM格式的技术哲学 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 在数字音乐版权保护与用户使…

2026/7/7 13:54:00阅读更多 →
STM32L152RE与AD5593R的硬件设计与应用优化

STM32L152RE与AD5593R的硬件设计与应用优化

1. AD5593R与STM32L152RE的硬件协同设计AD5593R作为一款多功能I/O扩展芯片,其与STM32L152RE的硬件连接需要特别注意信号完整性和电源管理。这款12位ADC/DAC转换器采用I2C接口通信,最高支持400kHz的快速模式。在实际硬件设计中,我发现以下几个…

2026/7/7 13:54:00阅读更多 →
工业自动化中传感器与执行器控制系统的设计与实现

工业自动化中传感器与执行器控制系统的设计与实现

1. 工业级传感器与执行器控制系统的核心组件解析 在工业自动化领域,构建一个稳定可靠的传感器与执行器控制系统需要精心选择每个关键组件。AD74115H、ADP1034和dsPIC33EP512MU814这三款芯片的组合,为工程师提供了从信号采集到功率管理的完整解决方案。 …

2026/7/7 13:54:00阅读更多 →
工业自动化中传感器与执行器的高效控制方案

工业自动化中传感器与执行器的高效控制方案

1. 工业级传感器与执行器控制方案概述在工业自动化领域,传感器与执行器的可靠连接与控制一直是工程师面临的核心挑战。AD74115H(软件可配置I/O芯片)、ADP1034(隔离电源管理芯片)与PIC18F4455(主控MCU&#…

2026/7/7 13:54:00阅读更多 →
新手入门漏洞挖掘:从XSS/SQL注入到众测平台实战指南

新手入门漏洞挖掘:从XSS/SQL注入到众测平台实战指南

1. 项目概述:从零开始的漏洞挖掘副业之路 最近几年,身边总有人问我:“听说有人靠找网站漏洞就能赚钱,是真的吗?” 我的回答是:千真万确。这行当,业内称之为“漏洞挖掘”或“安全众测”&#xff…

2026/7/7 13:49:00阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/7 4:43:43阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/7 2:56:31阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/7 1:03:28阅读更多 →
Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

1. 项目概述:Acunetix v24.8 高级版漏洞扫描器深度解析作为一名在网络安全领域摸爬滚打多年的老兵,我深知一款趁手的“兵器”对于安全测试工作意味着什么。今天要聊的,就是Web应用安全测试领域里一个响当当的名字——Acunetix。特别是其v24.8…

2026/7/7 0:02:41阅读更多 →
国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot) 🌐 演示地址:http://ruoyioffice.com | 📦 源码1GitHub:ruoyi-office | 📦 源码2GitCode:ruoyi-o…

2026/7/7 0:02:41阅读更多 →
CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS SSH连接故障排查:从基础检查到深度修复的完整指南引言当你尝试通过Xshell或其他SSH客户端连接CentOS服务器时,突然遭遇"Connection refused"或"Connection timed out"的错误提示,这种经历对任何运维人员或开发者来…

2026/7/7 0:02:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/7 5:11:21阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/7 5:11:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/7 5:11:21阅读更多 →