Milvus数据实体的插入、修改、删除

  本节介绍如何通过客户端向 Milvus 中插入数据。您还可以使用 MilvusDM 将数据迁移到 Milvus,MilvusDM 是一款专门用于使用 Milvus 导入和导出数据的开源工具。
  Milvus 2.1 支持标量字段上的 VARCHAR 数据类型。为VARCHAR类型标量字段构建索引时,默认索引类型为字典树。
  以下示例插入 2,000 行随机生成的数据作为示例数据(Milvus CLI 示例使用包含类似数据的预构建远程 CSV 文件)。实际应用程序可能会使用比示例更高维的向量。您可以准备自己的数据来替换示例。

一、新增数据

  官方文档:https://milvus.io/docs/insert_data.md
  首先,准备要插入的数据。要插入的数据的数据类型必须与集合的模式匹配,否则 Milvus 将引发异常。
  Milvus 支持标量字段的默认值,不包括主键字段。这表明在数据插入或更新插入期间某些字段可以留空。
  有关更多信息,请参阅创建集合(https://milvus.io/docs/create_collection.md)。
  启用动态架构后,您可以在数据中附加动态字段。有关详细信息,请参阅Dynamic Schema。
  示例:

import random
from pymilvus import Collection# 数据构造
data = [[i for i in range(2000)],[str(i) for i in range(2000)],[i for i in range(10000, 12000)],[[random.random() for _ in range(2)] for _ in range(2000)],# use `default_value` for a field[], # orNone,# or just omit the field
]data.append([str("dy"*i) for i in range(2000)])# 插入数据
# 通过指定partition_name,您可以选择决定将数据插入到哪个分区
collection = Collection("book")      # Get an existing collection.
mr = collection.insert(data)

  注意:
  将实体插入到之前已建立索引的集合中后,无需重新索引该集合,因为 Milvus 会自动为新插入的数据创建索引。
  如果之前已经通过 create_index() 为集合建立了索引,Milvus 会自动为后续插入的向量建立索引。然而,直到新插入的向量填满整个段并且新创建的索引文件与前一个索引文件分开时,Milvus 才会构建索引。

  当数据插入 Milvus 时,它是分段存储的。段必须达到一定的大小才能被密封和索引。未密封的段将被强力搜索。如果插入后需要立即查找数据,可以在插入数据后调用flush()方法。此方法密封所有剩余的段并将其发送以进行索引。仅在插入会话结束时调用此方法非常重要。过于频繁地调用它会导致数据碎片化,需要稍后进行清理。
  Milvus 会自动触发flush()操作。在大多数情况下,不需要手动调用此操作。
  插入数据维度限制32,768。

二、更新数据

  官方文档:https://milvus.io/docs/upsert_entities.md
  本主题介绍如何在 Milvus 中更新插入实体。更新插入是插入和删除操作的组合。
  在 Milvus 矢量数据库的上下文中,upsert 是一种数据级操作,如果集合中已存在指定字段,则该操作将覆盖现有实体;如果指定值尚不存在,则插入新实体。以下示例更新插入 3,000 行随机生成的数据作为示例数据。
  执行更新插入操作时,请务必注意该操作可能会影响性能。这是因为该操作在执行过程中涉及到删除数据
  示例:

import random# 准备数据
nb = 3000
dim = 8
vectors = [[random.random() for _ in range(dim)] for _ in range(nb)]
data = [[i for i in range(nb)],[str(i) for i in range(nb)],[i for i in range(10000, 10000+nb)],vectors,[str("dy"*i) for i in range(nb)]
]# 更新数据
from pymilvus import Collection
collection = Collection("book") # Get an existing collection.
mr = collection.upsert(data) # 

  注意:将实体更新插入到之前已建立索引的集合中后,您无需重新索引该集合,因为 Milvus 会自动为新更新插入的数据创建索引。详细信息,请参阅插入向量后能否创建索引?
  当数据更新插入 Milvus 时,它会被更新并插入到段中。段必须达到一定的大小才能被密封和索引。未密封的段将被强力搜索。为了避免任何剩余数据出现这种情况,最好调用flush()。 lush() 调用将密封所有剩余的段并将其发送以进行索引。仅在 upsert 会话结束时调用此方法非常重要。过于频繁地调用它会导致数据碎片化,需要稍后清理。
  upsert() 不支持更新主键字段。
  upsert() 不适用,如果主键字段的 autoID 设置为 True,则可能会发生错误。

三、删除数据

  官方文档:https://milvus.io/docs/delete_data.md
  本节介绍如何在 Milvus 中删除实体。
  Milvus 支持通过主键或复杂布尔表达式删除实体。通过主键删除实体比通过复杂的布尔表达式删除实体更快、更轻松。这是因为 Milvus 在通过复杂的布尔表达式删除数据时会先执行查询。

  • 如果一致性级别设置为低于“强”,则删除后的实体仍然可以立即检索。
  • 超出预先指定的时间范围而删除的实体将无法再次检索。
  • 频繁的删除操作会影响系统性能。
  • 在通过 comlpex 布尔表达式删除实体之前,请确保集合已加载。
  • 通过复杂的布尔表达式删除实体不是原子操作。因此,如果中途失败,仍然可能会删除一些数据。
  • 仅当一致性设置为Bounded时,才支持通过复杂布尔表达式删除实体。有关详细信息,请参阅一致性(https://milvus.io/docs/consistency.md)。

  示例代码:

# 删除条件表达式
expr = "word_count >= 11000"
# expr = "book_name != Unknown"
# expr = "book_id > 5 && word_count <= 9999"# 调用delete删除
from pymilvus import Collection
collection = Collection("book")      # Get an existing collection.
collection.delete(expr)

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

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

相关文章

MySQL 多表查询与事务的操作

一,多表联查 有些数据我们已经拆分成多个表,他们之间通过外键进行连接.当我们要查询两个表的数据,各取其中的一列或者多列. 这时候就需要使用多表联查. 数据准备: # 创建部门表 create table dept(id int primary key auto_increment,name varchar(20) ) insert into dept (n…

DevEco Studio 项目创建

安装DevEco Studio后开始使用&#xff0c;双击桌面DevEco Studio 快捷方式弹出界面&#xff1a; 选择Application —> Empty Ability&#xff0c;点击Next 项目配置 Project name&#xff1a;工程的名称&#xff0c;可以自定义&#xff0c;由大小写字母、数字和下划线组成。…

vscode搜索总是搜到修改记录文件如何处理

如图每次搜索出来的结果总是有好多编辑记录中的文件&#xff0c;给自己找文件及提交代码时带来很大困扰&#xff0c;每次都得删特别麻烦。 解决办法&#xff1a; 如上图在插件里找到 local history 点击 ”禁用“ 即可。以后再编辑代码就不会产生修改记录文件了。 如果直接搜索…

深入浅出前端本地储存

引言 2021 年&#xff0c;如果你的前端应用&#xff0c;需要在浏览器上保存数据&#xff0c;有三个主流方案&#xff1a; CookieWeb Storage (LocalStorage)IndexedDB 这些方案就是如今应用最广、浏览器兼容性最高的三种前端储存方案 今天这篇文章就聊一聊这三种方案的历史…

前端Prettier 插件的使用配置(详细)

各个参数代表的意思:printWidth&#xff1a;每行代码的最大长度限制。 tabWidth&#xff1a;选项用于控制制表符的宽度。 useTabs&#xff1a;指定是否使用制表符代替空格。 semi&#xff1a;指定是否在语句的末尾添加分号。 singleQuote&#xff1a;指定是否使用单引号或双引号…

【Java程序员福音】每个 Java 开发人员都应该知道的 10 个基本工具

我试图在代码库,项目规划,构建和部署,测试自动化和基础设施自动化中包含工具。作为负责端到端管理项目的高级 Java 开发人员,这些工具将帮助您更有效地完成工作。 让我们看到 Java 程序员的一些基本工具 1、Git 我认为 Git 和 Github 应该是所有 Java 程序员应该学习和掌…

如何使用vue插件Konva实现图片的缩放

前提问题&#xff1a;要完成数据标注的第一步&#xff0c;使用vue插件Konva实现图片的缩放 解决过程&#xff1a;首先安装插件Konva&#xff0c;再进行初始化&#xff0c;嵌入图片&#xff0c;Konva官网地址 解决结果&#xff1a; 1.安装Konva npm install vue-konva konva …

②免费AI软件开发工具测评:通义灵码 VS 码上飞

前言 我又双叒叕来测评了&#xff01;上次给大家带来的是iFlyCode和CodeFlying两款产品的测评&#xff0c;受到了大家的一致好评~ 今天咱就继续来聊聊&#xff0c;这次我们选的的对象是通义灵码和码上飞&#xff0c;从名字上也能看到出来这两款产品一定是跟软件开发有关系的&…

Zerotier 异地组网方案初探

前言 我之前想要异地组网的话&#xff0c;一般都采用内网穿透的方法&#xff0c;但是这个内网穿透有弊端就是都是要通过公网服务器转发流量&#xff0c;对于大流量的传输就比较不方便&#xff0c;我发现了Zerotier 这个工具非常的好用&#xff0c;是基于p2p的 这是一个类似于…

C++初阶:初识模板

在之前的C与C编程中&#xff0c;针对实现同样类型功能的函数我们学会使用了函数重载&#xff0c;终于可以不用记忆多个功能相同但是函数名不同的函数了喵。但是在实现的时候仍然显得有点不太方便&#xff0c;有些冗余。世界是懒人的世界&#xff0c;为了方便懒人的使用&#xf…

YOLOv8 服务器与本地tensorboard映射

TensorBoard: Start with ‘tensorboard --logdir runs/detect/train12’, view at http://localhost:6006/ 服务器端输入后本地一直打不开&#xff0c;无法访问。 解决方法&#xff1a;对服务器6006端口与本地端口进行映射&#xff0c;从而完成本地查看TensorBoard 本地cmd输…

多个OncePerRequestFilter过滤器实现的使用及顺序

多个OncePerRequestFilter过滤器实现的使用及顺序 作用 在一次外部请求中只过滤一次, 对于服务器内部之间的forward等请求&#xff0c;不会再次执行过滤方法可以定义多个实现类, 各自处理各自的过滤工作, 并指定过滤顺序 使用场景 token校验有效性Xss处理敏感词汇过滤 … …

驶向高效巅峰:Nginx高并发性能优化实战指南与场景案例拆解

身处瞬息万变的互联网世界&#xff0c;高并发场景下服务器的性能优化尤为重要&#xff0c;而Nginx正是这一领域的超级舵手。本文将深入浅出地揭示Nginx在高并发环境下的性能优化之道&#xff0c;并通过具体场景配置案例&#xff0c;助你掌握这一关键技术&#xff0c;提升服务器…

静态网络配置

一、查看网络命令 1.命令行查看网络配置 1、查看ip\硬件设备-网卡 ifconfig -a ifconfig ens160 网卡名称 ip addr show ip addr show ens160 nmcli device show ens160 nmcli con up ens160 2、主机名称 hostname hostname hfj.huaxia.com 3、查看路由和网关 rou…

慎投!共10本「On Hold」期刊被剔除,2本中科院TOP仍在调查中!

2024年3月18日&#xff0c;科睿唯安本年度第三次更新了Web of Science核心期刊目录。 此次SCIE/SSCI期刊目录共8本期刊发生变动&#xff0c;情况如下&#xff1a; 经小编查询&#xff0c;此次更新后&#xff0c;共有7本“On Hold”期刊被数据库剔除&#xff0c;其中还包括2024年…

Winsock编程入门和枚举协议

Winsock的初始化和清除代码类似如下; if ((ret = WSAStartup(MAKEWORD(2,2), &wsadata)) != 0) { wsprintf(buf,TEXT("winsock初始化失败,错误:%d"), ret); ...... return 0; } 。。。。。。 if (WSACleanup() == SOCKET_ERRO…

手撕算法-最长公共子序列(二)

最长公共子序列(二) 分析&#xff1a;典型的动态规划&#xff0c;直接看代码了。 代码&#xff1a; import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** longest common sub…

VS+QT Debug正常但Release无法识别头文件

&#xff01;&#xff01;&#xff01;&#xff0c;这个问题一般是在第一次编译的时候遇见的&#xff0c;包括之前使用debug也是 在Qt Installation一定要修改成自己版本的编译器&#xff0c;修改一次以后基本是不用再修改的

【机器学习】TinyML的介绍以及在运动健康领域的应用

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

将图像根据注释文件划分

import os import json import shutil# 完整图像文件夹路径 img_dir data\sodaa\datasets# 注释文件夹路径 train_ann_dir data\sodaa\Annotations\\train val_ann_dir data\sodaa\Annotations\\val test_ann_dir data\sodaa\Annotations\\test# 输出文件夹路径 output_dir…