开源的向量数据库Milvus

news2024/9/21 14:42:01

Milvus是一款开源的向量数据库,专为处理向量搜索任务而设计,尤其擅长处理大规模向量数据的相似度检索。

官网地址:https://milvus.io/

以下是关于Milvus的详细介绍:

一、基本概念

  • 向量数据库:Milvus是一款云原生向量数据库,它支持多种类型的向量,如浮点向量、二进制向量等,并且可以处理大规模的向量数据。向量在Milvus中作为基本数据单元,用于表示高维空间中的点,可以是图像、音频、文本等数据的特征表示。
  • 向量搜索:Milvus通过计算向量之间的距离来评估向量之间的相似度,支持高效的相似度搜索和向量索引功能。常见的距离度量包括欧氏距离和余弦相似度等。

二、系统架构与主要组件

Milvus的系统架构遵循数据流和控制流分离的原则,整体分为四个层次:

  1. 接入层(Access Layer):系统的门面,由一组无状态proxy组成,对外提供用户连接的endpoint,负责验证客户端请求并合并返回结果。
  2. 协调服务(Coordinator Service):系统的大脑,负责分配任务给执行节点。协调服务共有四种角色,分别为root coord、data coord、query coord和index coord。
  3. 执行节点(Worker Node):系统的四肢,负责完成协调服务下发的指令和proxy发起的数据操作语言(DML)命令。执行节点分为三种角色,分别为data node、query node和index node。
  4. 存储层(Storage):系统的骨骼,负责Milvus数据的持久化,分为元数据存储(meta store)、消息存储(log broker)和对象存储(object storage)三个部分。

三、核心功能

  1. 高效的向量搜索:Milvus支持在亿级向量中进行毫秒级的搜索,提供了快速的最近邻搜索(Nearest Neighbor Search, NNS)功能。
  2. 多种距离度量:支持多种距离度量方式,包括欧几里得距离(L2)、余弦相似度等,以适应不同的应用需求。
  3. 可扩展性:Milvus设计为分布式系统,可以水平扩展以处理大规模数据集。它支持在Kubernetes上部署,以获得最佳可用性和弹性。
  4. 兼容性:Milvus支持与多种机器学习框架集成,如TensorFlow、PyTorch和PaddlePaddle。
  5. 易用性:提供了简单易用的API,支持多种编程语言,如Python、Java和Go。

四、应用场景

Milvus因其高效的向量搜索能力,广泛应用于以下场景:

  1. 图像搜索:通过比较图像特征向量的相似度来实现图像搜索。
  2. 推荐系统:在推荐系统中,Milvus可以用来检索与用户兴趣向量最相似的商品或内容。
  3. 自然语言处理:Milvus可以用来检索与查询文本最相关的文档或句子。
  4. 音频处理:音频特征向量用于识别或分类音频片段。

五、优势与特点

  1. 高性能:性能高超,可对海量数据集进行向量相似度检索。
  2. 高可用、高可靠:支持在云上扩展,其容灾能力能够保证服务高可用。
  3. 混合查询:支持在向量相似度检索过程中进行标量字段过滤,实现混合查询。
  4. 开发者友好:支持多语言、多工具的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作为一款开源的向量数据库,在处理大规模向量搜索任务中表现出色,广泛应用于图像、音频、文本和推荐系统等领域。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2054711.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pyinstaller打包vnpy项目

因为我写的软件主要是自己用,很少有打包的习惯,直接源代码部署,导致打包,以下记录一下给一个朋友做的,对vnpy的改写,实现实时读取信号文件,发现文件中信号改变就做出相应的交易动作,…

离线安装 MySQL 数据库系统并实现远程登录

MySQL 5.7.25 的安装包,存放在 /opt/software 目录下 详细步骤 一、离线安装 MySQL 数据库系统1. 解压安装包2. 安装 MySQL 组件3. 登录 MySQL(1)初始化 MySQL 的数据库(2)启动 MySQL 服务(3)登…

书生大模型学习笔记9 - LMDeploy 量化部署

LMDeploy 量化部署 InternLM 2.5 20b量化前部署W4A16 模型量化量化模型部署streamlit web InternLM 2.5 20b量化前部署 lmdeploy serve api_server \/root/learning/InternLM/XTuner/merged_20b \--model-format hf \--quant-policy 0 \--cache-max-entry-count 0.01\--server…

创建干净虚拟环境对YOLOV8进行打包

背景 基于Yolov8写了一个视频检测小demo,考虑后续要到项目上使用,所以研究了一下打包流程。使用的工具是Pyinstaller,在原有的环境下面打包发现,大小有6个多G。所以想再弄一个干净的环境,只安装需要的模块&#xff0c…

前端基础4

本节内容: 1.CSS的弹性布局,也称Flex布局 2.Vue2的生命周期 一、Flex布局 弹性布局是前端页面布局最常用的方式之一,通常使用四个属性。 1.创建盒子 先创建一个盒子并为其添加一些样式可以更直观的体验弹性布局,代码如下&#…

xcode如何编译python

1、找到Python位置: 终端输入:which python 获取python的安装位置,一般为/usr/bin/python。获取到这个路径方便使用它来搭建python的编译环境。 2、在Xcode中创建python程序 打开Xcode,新建工程(ShiftCommandN&…

前端基础知识(一些基本标签的用法)

前端:html,css,javascript html:超文本结构化标记语言 使用角度 1、供显示的元素 2、供收集信息的元素 css层叠联样式单 选择器(给谁做样式) 盒子模型(了解html元素内部结构) 布局(把元素进行摆布&a…

C语言 | Leetcode C语言题解之第352题将数据流变为多个不想交区间

题目: 题解: typedef struct SummaryRanges{int left,right;struct SummaryRanges *pre,*next; } SummaryRanges;/** Initialize your data structure here. */SummaryRanges* summaryRangesCreate() {SummaryRanges *head malloc(sizeof(SummaryRange…

nlohmann json库的使用Demo

目录 1 简介 2 构建 JSON 对象 2.1 集合 2.2 字典 2.3 组合 3 解析 JSON 对象 4 演示Demo 4.1 开发环境 4.2 功能介绍 4.3 下载地址 1 简介 nlohmann/json 是一个方便易用的 C JSON 库,可以实现将 JSON 数据与 C 对象相互转换的功能,支持常见的…

Linux驱动开发—设备模型框架 kset和 kobject 详解

文章目录 什么是设备模型?设备模型的主要组成部分设备模型的关键功能设备模型的实现结构设备模型的重要性 kset和 kobject介绍1. kobject2. kset3. kobject 和 kset 的关系4. 应用场景 kobject中parent概念1. parent 字段的作用2. parent 字段的使用示例3. sysfs 中…

算法的学习笔记—对称的二叉树(牛客JZ28)

😀前言 在算法的世界中,二叉树是一个极其重要的数据结构。它不仅广泛应用于各种算法的设计中,也是面试中常见的考察点之一。今天,我们将深入探讨一个经典的二叉树问题——对称的二叉树,并且会展示如何通过Java代码来解…

stripe Element 如何使用

这里要准备好几个东西: 一个支付成功过后的回调 还有一个下单的接口 一旦进入这个下单界面,就要去调下单的接口的,用 post, 这个 接口你自己写,可以写在后端中,也可以放到 nextjs 的 api 中。 首先说的是这个下单…

去中心化的新时代:Web3技术的全球影响

随着技术的不断演进,Web3正引领互联网的去中心化新时代。相较于传统的Web1和Web2,Web3通过去中心化、区块链和智能合约等技术,正在重塑网络的运作方式。这一变革不仅提升了网络的安全性和透明度,也对全球经济、社会和文化产生了深…

品牌出海新策略:携手TikTok达人,合作孵化IP实现双赢

在当今数字化时代,TikTok达人的IP孵化作为一种创新的合作模式,正逐渐成为品牌出海的新兴策略。通过与有潜力的TikTok达人合作,共同孵化新的IP,品牌不仅能够突破传统营销的局限,还能实现与达人共同成长的双赢局面。本文…

物流抓取机器人整体设计方案

一、功能简介 1、运行环境:巡线行驶(7路数字循迹,麦克纳姆轮车底盘) 2、目标识别:颜色识别(Maix-II Dock 视觉模块) 3、目标定位:视觉测距(Maix-II Dock 视觉模块&#x…

海外直播对网络的要求有哪些?

在全球化的大潮中,海外直播已成为越来越多企业、个人和机构展示自身、拓展市场、与全球用户互动的重要渠道。然而,在进行海外直播时,网络环境的搭建往往成为制约其成功与否的关键因素。那么,究竟什么样的网络环境才能满足海外直播…

Python使用Selenium进行Web自动化测试详解

目录 引言 一、Selenium简介 Selenium的核心组件 二、环境搭建 1. 安装Python 2. 安装Selenium库 3. 下载并配置浏览器驱动 三、基础用法 1. 启动浏览器 2. 定位页面元素 3. 元素操作 4. 等待元素加载 1. 测试目的 2. 测试步骤与代码实现 3. 注意事项 结论 引言…

学习方法[2]:如何有效地检索及选择学习资料?(致在自学之路仍在坚持的人)

有效地检索及选择学习资料 前言一、如何进行有效检索资料?(以bing为例)1.1 基础搜索1.2 高级搜索1.2.1 高级搜索关键字1.2.2 高级搜索选项 二、如何选择学习资料?(以编程为例)2.1 源代码2.2 官方文档2.3 英…

Quartz - 定时任务框架集成

参考了若依框架,将quartz定时任务框架集成到自己的项目当中。 目录 一、Quartz概述二、库表创建1.Quartz关键表(11张)表SQL 2.自定义业务表(2张)表SQL 三、代码示例1.依赖引入2.类文件1)定时任务配置类2&am…

优优嗨聚集团:餐饮合作新未来引领美食产业新风尚

在快速变化的21世纪,餐饮行业作为民生消费的重要组成部分,正经历着前所未有的变革与挑战。随着消费者需求的多元化、个性化以及科技的不断进步,餐饮合作的新模式正悄然兴起,为行业带来了前所未有的发展机遇与活力。本文将探讨餐饮…