掘金 人工智能 06月01日 16:03
Milvus 向量数据库快速入门(人话版)
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

Milvus是一个专为向量相似度搜索设计的高性能数据库。它能够高效存储、管理和检索高维向量数据,通过快速的“模糊配对”实现对相似向量的查找。Milvus的核心优势在于其内核采用分桶/建图与局部暴力搜索相结合的策略,从而实现大规模数据的快速检索。此外,Milvus 2.x版本将数据落盘和分布式容灾功能外包给RocksDB、MinIO和etcd,简化了用户的使用和维护。文章详细介绍了Milvus的基本概念、核心功能、使用方法,以及在RAG等场景中的应用,并提供了优化建议和Python示例代码。

🔑 Milvus 的核心功能在于存储和检索高维向量,支持快速的相似度搜索,适用于处理各种向量数据。

🏗️ Milvus 的部署和使用相对简单,单机体验只需五步,小集群的搭建也仅需三步,用户可以快速上手。

⚙️ Milvus 的索引选择至关重要,针对不同数据规模和性能需求,提供了多种索引类型,如FLAT、IVF_FLAT和HNSW,并提供了索引调优口诀。

💡 Milvus 在RAG(Retrieval-Augmented Generation)等场景中发挥重要作用,能够与LangChain、LlamaIndex等工具集成,实现快速的RAG系统搭建。

💾 Milvus 本身采用RocksDB + MinIO存储数据,用户无需过多关注数据落盘问题,同时,文章还提供了内存和硬盘的粗略估算公式,方便用户进行资源规划。

Milvus 到底是干嘛的?

它是“给向量找对象”的超高速数据库——存向量、比相似、返回前 K 名。

Milvus 就是给「向量」找对象的数据库——它能帮你把一堆高维向量存好、管好、飞快地按“相似度”把最像的几条挑出来。

    和普通数据库比,Milvus天生会“模糊配对”,不是 exact match 而是“谁更像”。内核走的是“先分桶/建图,再局部暴力”,所以大规模也能搜得飞快。2.x 版本把「数据落盘」「分布式容灾」都外包给 RocksDB + MinIO + etcd——省了你很多心。

先认几个关键词

部署使用

五步跑通「单机体验」+ 三步升级「小集群」

单机 5 步

    拉镜像 docker run milvusdb/milvus:v2.4.3建楼 create_collection()——确定字段维度、主键、向量字段。搬人 insert() → flush()。装电梯 create_index();小数据直接 FLAT,大数据先 IVF,再视情况换 HNSW。开门找人 load() → search()/query();用完可 release().

变成 3 节点小集群

最常用的 5 步操作

    建楼:create collection,把字段都定义好搬人:insert,把向量和元信息塞进去;记得 flush() 真正落盘装电梯:create index,选对索引类型,未来搜索才快请保安开门:load,没 load 就像门锁着,啥也搜不到找人:search(可加条件 expr),或者只按字段 query

索引怎么挑?

索引调优口诀

    小样本先 FLAT 做 baseline——它慢但最准,方便肉眼看 Recall。百 万级优先 IVF_FLAT:调 nlist=√N 起步;提高 nprobe 越准越慢。千万级冲 HNSW:关键参 M (边数) 和 efConstruction (建图宽度),调高两倍能大幅增 Recall。超高并发记得“机+内存”一起扩——索引放内存,多副本才分摊 QPS。

别踩这些坑 💡

    向量维度要统一:128 就全 128,别混着来。插完别忘 flush:不 flush 就像东西放购物车没结账,搜索不到。没 load 就搜索:会报错,先 load()。内存不够全加载:用 Partition,分批 load()。精度不满意:调 nprobe(IVF)或换 HNSW 试试。

十大踩坑 + 急救方案

再进阶一点点

跟其它工具怎么配?

“到底需要多大机器?”——粗算公式

512G 内存看起来有点儿夸张,所以如果内存吃紧,可以参考以下方法进行优化:

Python 端到端 Demo (含增删改查)

from pymilvus import connections, Collection, utility, DataType, FieldSchema, CollectionSchemaimport numpy as npconnections.connect(host="localhost", port="19530")# 1. 建楼(如果已存在就删掉重建)if utility.has_collection("demo"): utility.drop_collection("demo")schema = CollectionSchema([    FieldSchema("id", DataType.INT64, is_primary=True, auto_id=True),    FieldSchema("title", DataType.VARCHAR, max_length=200),    FieldSchema("price", DataType.FLOAT),    FieldSchema("emb", DataType.FLOAT_VECTOR, dim=128)])col = Collection("demo", schema)# 2. 插 10 条数据titles = [f"商品{i}" for i in range(10)]prices = [i * 10.0 for i in range(10)]vecs   = np.random.random((10, 128)).tolist()col.insert([titles, prices, vecs]); col.flush()# 3. 建 IVF 索引 & 加载col.create_index("emb", {"index_type":"IVF_FLAT","metric_type":"L2","params":{"nlist":64}})col.load()# 4. 搜索 + 过滤价格 < 50qv = [np.random.random(128).tolist()]hits = col.search(qv, "emb", {"metric_type":"L2","params":{"nprobe":8}}, limit=5, expr="price < 50")print([(h.entity.get('title'), h.distance) for h in hits[0]])# 5. 删除一条,再查del_id = hits[0][0].idcol.delete(f"id in [{del_id}]"); col.flush()

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Milvus 向量数据库 相似度搜索
相关文章