ToB企服应用市场:ToB评测及商务社交产业平台
标题:
开源的向量数据库Milvus
[打印本页]
作者:
南七星之家
时间:
7 天前
标题:
开源的向量数据库Milvus
Milvus是一款开源的向量数据库,专为处理处罚向量搜刮任务而设计,尤其善于处理处罚大规模向量数据的相似度检索。
官网地点:https://milvus.io/
以下是关于Milvus的详细介绍:
一、基本概念
向量数据库
:Milvus是一款云原生向量数据库,它支持多种类型的向量,如浮点向量、二进制向量等,并且可以处理处罚大规模的向量数据。向量在Milvus中作为基本数据单元,用于表现高维空间中的点,可以是图像、音频、文本等数据的特征表现。
向量搜刮
:Milvus通过盘算向量之间的距离来评估向量之间的相似度,支持高效的相似度搜刮和向量索引功能。常见的距离度量包罗欧氏距离和余弦相似度等。
二、体系架构与重要组件
Milvus的体系架构遵照数据流和控制流分离的原则,团体分为四个层次:
接入层(Access Layer)
:体系的门面,由一组无状态proxy组成,对外提供用户连接的endpoint,负责验证客户端请求并归并返回效果。
和谐服务(Coordinator Service)
:体系的大脑,负责分配任务给执行节点。和谐服务共有四种角色,分别为root coord、data coord、query coord和index coord。
执行节点(Worker Node)
:体系的四肢,负责完成和谐服务下发的指令和proxy发起的数据操作语言(DML)命令。执行节点分为三种角色,分别为data node、query node和index node。
存储层(Storage)
:体系的骨骼,负责Milvus数据的持久化,分为元数据存储(meta store)、消息存储(log broker)和对象存储(object storage)三个部门。
三、核心功能
高效的向量搜刮
:Milvus支持在亿级向量中进行毫秒级的搜刮,提供了快速的最近邻搜刮(Nearest Neighbor Search, NNS)功能。
多种距离度量
:支持多种距离度量方式,包罗欧几里得距离(L2)、余弦相似度等,以顺应不同的应用需求。
可扩展性
:Milvus设计为分布式体系,可以水平扩展以处理处罚大规模数据集。它支持在Kubernetes上部署,以获得最佳可用性和弹性。
兼容性
:Milvus支持与多种呆板学习框架集成,如TensorFlow、PyTorch和PaddlePaddle。
易用性
:提供了简朴易用的API,支持多种编程语言,如Python、Java和Go。
四、应用场景
Milvus因其高效的向量搜刮能力,广泛应用于以下场景:
图像搜刮
:通过比较图像特征向量的相似度来实现图像搜刮。
保举体系
:在保举体系中,Milvus可以用来检索与用户兴趣向量最相似的商品或内容。
自然语言处理处罚
:Milvus可以用来检索与查询文本最相关的文档或句子。
音频处理处罚
:音频特征向量用于辨认或分类音频片段。
五、上风与特点
高性能
:性能高超,可对海量数据集进行向量相似度检索。
高可用、高可靠
:支持在云上扩展,其容灾能力能够保证服务高可用。
混淆查询
:支持在向量相似度检索过程中进行标量字段过滤,实现混淆查询。
开发者友爱
:支持多语言、多工具的Milvus生态体系。
六、开发示例
使用Python联合Milvus实现相似性搜刮通常涉及几个关键步骤:安装Milvus和相应的Python客户端库、连接到Milvus服务器、创建集合(Collection)、插入向量数据、构建索引以及执行相似性搜刮。以下是一个基本的流程示例:
1. 安装Milvus和Python客户端
起首,确保你已经安装了Milvus服务器,并且它正在运行。然后,安装Milvus的Python客户端库pymilvus。
pip install pymilvus
复制代码
2. 连接到Milvus服务器
使用pymilvus客户端连接到你的Milvus服务器。
from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType
# 连接到Milvus服务器
connections.connect(host='localhost', port='19530')
复制代码
3. 创建集合
在Milvus中创建一个新的集合,用于存储向量数据。
# 定义字段模式
dim = 128 # 向量的维度
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=dim)
]
# 定义集合模式
schema = CollectionSchema(fields=fields, description="Test collection")
# 创建集合
collection = Collection("test_collection", schema=schema)
复制代码
4. 插入向量数据
向集合中插入一些向量数据。
import numpy as np
# 生成一些随机向量数据
vectors = [np.random.random(dim).astype(np.float32) for _ in range(100)]
# 插入数据
collection.insert([{"id": None, "embedding": vec.tolist()} for vec in vectors])
collection.flush() # 确保数据被写入存储
复制代码
5. 构建索引
为了加快相似性搜刮,可以在向量字段上构建索引。
# 假设使用IVF_FLAT索引
index_params = {"nlist": 16384}
collection.create_index("embedding", "IVF_FLAT", index_params)
复制代码
6. 执行相似性搜刮
现在,你可以使用一个查询向量来执行相似性搜刮。
# 定义一个查询向量
query_vec = np.random.random(dim).astype(np.float32)
# 执行搜索
top_k = 10 # 返回最相似的10个结果
search_params = {"metric_type": "L2", "params": {"nprobe": 16}}
results = collection.search("embedding", [query_vec.tolist()], top_k, search_params)
# 打印结果
for result in results[0]:
print(f"ID: {result.id}, Distance: {result.distance}")
复制代码
7. 清算
完成操作后,可以删除集合或关闭与Milvus的连接。
# 删除集合
collection.drop()
# 关闭连接
connections.disconnect()
复制代码
综上所述,Milvus作为一款开源的向量数据库,在处理处罚大规模向量搜刮任务中表现出色,广泛应用于图像、音频、文本和保举体系等范畴。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4