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

Milvus向量数据库DML操作实战教程

导读:在向量数据库技术快速发展的今天,Milvus作为开源向量数据库的代表,正成为AI应用开发中不可或缺的基础设施。然而,许多开发者在初次接触Milvus时,往往对其数据操作语言(DML)的使用存在困惑,特别是在集合创建、数据管理和索引配置等核心环节。
本文将通过详实的代码示例和实战演练,系统性地解析Milvus向量数据库的四大核心DML操作。从集合的Schema设计到数据的增删改查,每个操作都配备了完整的代码实现和关键参数解释。特别值得关注的是,文中深入探讨了auto_id自动主键生成机制、动态字段扩展功能,以及IVF_FLAT索引类型的性能优化策略。
文章还揭示了一个重要的技术细节:由于Milvus架构特性,数据更新操作需要通过"删除-插入"的组合方式实现,这种设计背后的原理是什么?如何在高并发场景下保证数据一致性?
通过学习本教程,开发者将能够熟练掌握Milvus的基础操作技能,为构建高性能的向量检索系统打下坚实基础。无论您是初次接触向量数据库,还是希望深化Milvus实践经验,本文都将为您提供清晰的技术指导和最佳实践建议。

前言

本教程将深入介绍Milvus向量数据库的核心DML(数据操作语言)操作,包括集合创建、数据插入、删除和更新等关键功能的实际应用。通过实战代码示例,帮助开发者掌握Milvus向量数据库的基本操作技能。

核心DML操作详解

1. 创建集合(Collection)

集合是Milvus中数据存储的基本单位,在创建时需要明确定义字段结构和索引配置。创建集合时需要注意以下关键配置:

  • 当设置auto_id=True时,系统将自动生成主键,无需手动指定
  • 启用动态字段功能(enable_dynamic_field=True)允许在运行时灵活扩展非预定义字段
集合创建代码实现
# 导入MilvusClient和DataType模块,用于连接Milvus服务器并操作数据类型
from pymilvus import MilvusClient, DataType# 实例化MilvusClient以连接到指定的Milvus服务器
client = MilvusClient(uri="http://47.119.128.20:19530"
)# 定义Schema结构
schema = client.create_schema(auto_id=False, enable_dynamic_field=True)
schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="vector", datatype=DataType.FLOAT_VECTOR, dim=128)
schema.verify()  # 验证Schema配置# 定义索引参数配置
index_params = client.prepare_index_params()
index_params.add_index(field_name="vector",index_type="IVF_FLAT",  # 量化索引类型,平衡检索速度与精度metric_type="L2",  # 相似性度量标准(欧几里得距离)params={"nlist": 1024}  # 聚类中心数量
)# 创建集合
client.create_collection(collection_name="my_collection",schema=schema,index_params=index_params
)

2. 数据插入操作(Insert)

Milvus支持单条记录插入和批量数据插入两种模式。需要注意的是,在使用可视化管理工具进行查询等操作时,集合必须处于加载状态才能正常执行。

数据插入代码示例
# 准备待插入的数据
data = [{"id": 1, "vector": [0.1]*128, "text": "Sample text 1"},{"id": 2, "vector": [0.2]*128, "text": "Sample text 2"}
]# 执行数据插入操作
insert_result = client.insert(collection_name="my_collection",data=data 
)print("插入记录的ID列表:", insert_result["ids"])  # 输出返回的主键ID列表

3. 数据删除操作(Delete)

Milvus提供了两种数据删除方式:基于主键的精确删除和基于条件表达式的批量删除。

按主键删除数据
client.delete(collection_name="my_collection",ids=[1, 2]  # 指定要删除记录的主键列表
)
按条件删除数据
# 删除text字段为空字符串的所有记录
client.delete(collection_name="my_collection",filter="text == ''"
)

4. 数据更新操作(Update)

由于Milvus本身不支持直接的数据更新操作,因此需要通过"删除旧数据 + 插入新数据"的组合方式来实现数据更新功能。

数据更新实现方案
# 第一步:删除需要更新的旧数据
client.delete(collection_name="my_collection", ids=[3]  # 指定要更新记录的主键
)# 第二步:插入更新后的新数据
client.insert(collection_name="my_collection",data=[{"id": 3, "vector": [0.3]*128, "text": "Updated text"}]
)

操作注意事项

在进行Milvus DML操作时,需要特别注意以下几个重要事项:

集合状态管理:使用可视化管理工具进行数据查询、检索等操作时,目标集合必须处于加载状态。如果集合未加载,相关操作将无法正常执行。

数据一致性:在执行删除和插入操作时,需要确保数据的一致性,特别是在高并发环境下进行数据更新操作时。

索引优化:合理选择索引类型和参数配置对查询性能具有重要影响。IVF_FLAT索引类型适合大多数应用场景,能够在检索速度和精度之间取得良好平衡。

向量维度:在定义向量字段时,必须明确指定向量的维度大小,所有插入的向量数据都必须符合预定义的维度要求。

通过掌握这些核心DML操作,开发者可以有效地管理Milvus向量数据库中的数据,为后续的向量检索和相似性搜索功能奠定坚实基础。

相关文章:

  • uniapp-商城-72-shop(5-商品列表,步进器添加商品到的购物车实现)
  • 动态防御新纪元:AI如何重构DDoS攻防成本格局
  • 【教程】给Apache服务器装上轻量级的防DDoS模块
  • 【自用资源分享】Protocol Buffers 构建脚本: 支持生成 ​C++、Go、Python、Java 的 Protobuf 和 gRPC 代码
  • 计算机视觉---YOLOv3
  • Jenkins实践(8):服务器A通过SSH调用服务器B执行Python自动化脚本
  • Rust编程环境安装
  • 工业控制系统的神经网络:TSN交换机是如何改变自动化通信的?
  • 【Docker】存储卷
  • Rust 学习笔记:迭代器
  • 第十一节:第一部分:正则表达式:应用案例、爬取信息、搜索替换
  • 【Java开发日记】说一说序列化与反序列化中存在的问题
  • Apache DolphinScheduler存储系统详解| AI生成技术文档系列
  • Sql Server TLSv1 协议问题
  • Linux --进度条小程序更新
  • Mysql之用户管理
  • 机器学习-决策树
  • 《数据结构初阶》【番外篇:快速排序的前世今生】
  • 大型三甲医院更换HIS系统全流程分析与经验考察(下)
  • 2025 年江西研究生数学建模竞赛题C题基于大雾背景视频学习的能见度回归建模完整思路 模型代码 结果 成品分享
  • 南汇整站seo十大排名/武汉整站优化
  • 昆山设计网站的公司/mac蜜桃923色号
  • 深圳住房与建设部网站/搜索引擎优化的方式
  • 嵊州网站设计/今日重大新闻事件
  • html制作一个个人主页网站/免费sem工具
  • 网站建设项目分期/seo外包 靠谱