当前位置: 首页 > article >正文

向量数据库Milvus详解

向量数据库Milvus详解

在这里插入图片描述

0. 什么是向量数据库?

在现实世界中,并非所有数据都可以整齐地放到行和列中。在处理图像、视频和自然语言等复杂的非结构化数据时尤其如此。这就是向量数据库的用武之地。

向量数据库是一种以高维向量的形式来存储数据的数据库,这些向量本质上是表示一个对象的特征或特性的数字列表或者叫数组。每个向量对应一个唯一的实体,例如一段文本、一张图像或一段视频。

但为什么要使用向量呢?神奇之处在于它们捕捉语义和相似性的能力。通过将数据表示为向量,我们可以在数学计算的层面比较它们并确定它们的相似或不不相似的程度。这使我们能够执行复杂的查询,例如“找到与这张图相似的图片”或“检索与此文本语义相关的文档”。

1. 环境要求

python>=3.9

pip install pymilvus

2. 向量数据库罗列

2.1 FAISS : Meta开源的向量检索引擎

2.2 Chroma:开源向量数据库,同时有云服务

2.3 Pinecone:商用向量数据库,同时有云服务

2.4 Milvus: 开源向量数据库,同时有云服务

2.5 Weaviate: 开源向量数据库,同时有云服务

2.6 Qdrant: 开源向量数据库,同时有云服务

2.7 PGVector: Postgress的开源向量检索引擎

2.8 RediSearch: Redis的开源向量检索引擎

2.9 ElasticSearch: 也支持向量检索

3. Milvus API 详解与封装

3.0 with 的用法和底层原理

with 语句本质上依赖于 Python 的上下文管理协议。上下文管理协议包括两个方法:

__enter__():当 with 语句开始执行时,__enter__() 方法会被调用。它负责初始化资源,通常会返回资源对象本身,或者某种资源管理对象。

__exit__():当 with 语句结束时(无论是否发生异常),__exit__() 方法会被调用。它负责清理资源,例如关闭文件、释放锁、关闭数据库连接等。


__exit__() 方法可以处理异常,决定是否将异常继续抛出或被吞掉。
在 Python 中,__exit__ 方法用于定义与上下文管理器(如使用 with 语句时)的退出行为。__exit__ 方法接收四个参数:

exc_type:如果在 with 语句块中发生异常,这个参数会包含异常的类型(例如,ZeroDivisionError、FileNotFoundError 等)。如果没有异常发生,exc_type 将是 None。

exc_val:这是异常的实例对象,包含了异常的详细信息。对于异常类型 exc_type,exc_val 通常包含相关的错误消息。若无异常,exc_val 也是 None。

exc_tb:这是一个 traceback 对象,包含异常发生时的堆栈跟踪信息。如果没有异常,exc_tb 会是 None。

这些参数允许你在退出时处理异常,或者执行一些清理工作(如关闭文件、释放资源等)。
class FileManager:
    def __init__(self, file_name, mode="r", encoding=None):
        self.file_name = file_name
        self.mode = mode
        self.encoding = encoding

    def __enter__(self):
        self.file = open(self.file_name, self.mode, encoding=self.encoding)
        return self.file

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("Exception Type:", exc_type)
        print("Exception Value:", exc_val)
        print("Exception Traceback:", exc_tb)
        self.file.close()


# 使用例子
with FileManager("test.txt", "r") as f:
    content = f.read()
    raise ValueError("Something went wrong!")  # 人为抛出异常

3.1 全部的milvus操作封装在Milvus类中

milvus_op.py:

from pymilvus import (
    db,
    connections,<

http://www.kler.cn/a/505979.html

相关文章:

  • 以太网实战AD采集上传上位机——FPGA学习笔记27
  • 深度学习-87-大模型训练之预训练和微调所用的数据样式
  • ros2笔记-6.2 使用urdf创建机器人模型
  • Java SpringBoot + Vue + Uniapp 集成JustAuth 最快实现多端三方登录!(QQ登录、微信登录、支付宝登录……)
  • 我这不需要保留本地修改, 只需要拉取远程更改
  • 关于linux的ld.so.conf.d
  • day_2_排序算法和树
  • IOS工程师
  • 隧道网络:为数据传输开辟安全通道
  • HttpClient和HttpGet实现音频数据的高效爬取与分析
  • Unity中实现倒计时结束后干一些事情
  • Leetcode 72. 编辑距离 动态规划
  • ASP.NET Core - 配置系统之自定义配置提供程序
  • pytorch小记(六):pytorch中的clone和detach操作:克隆/复制数据 vs 共享相同数据但 与计算图断开联系
  • 【Vue】父组件向子组件传递参数;子组件向父组件触发自定义事件
  • iOS手势shouldBeRequiredToFailByGestureRecognizer 机制
  • vue3 uniapp封装一个瀑布流组件
  • Web开发(二)CSS3基础与进阶
  • Redis从0到1详解(SpringBoot)
  • 面试之《web安全问题》
  • http://noi.openjudge.cn/——4.7算法之搜索——13:Sticks
  • 计算机数据提取与固定
  • Java+Maven+GDAL
  • 图像识别opencv翻转
  • MacOS删除多余的Windows启动项
  • 性能测试工具Jmeter影响负载的X因素有哪些?