milvus insert api的数据结构源码分析

news2025/3/12 1:20:19

insert api的数据结构

一个完整的insert例子:

import numpy as np
from pymilvus import (
    connections,
    FieldSchema, CollectionSchema, DataType,
    Collection,
)

num_entities, dim = 10, 3

print("start connecting to Milvus")
connections.connect("default", host="192.168.230.71", port="19530")

fields = [
    FieldSchema(name="pk", dtype=DataType.INT64, is_primary=True, auto_id=True),
    FieldSchema(name="book_id", dtype=DataType.INT64),
    FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=dim)
]

schema = CollectionSchema(fields, "hello_milvus is the simplest demo to introduce the APIs")

print("Create collection `hello_milvus`")
hello_milvus = Collection("hello_milvus", schema, consistency_level="Eventually",shards_num=1)


print("Start inserting entities")
rng = np.random.default_rng(seed=19530)
entities = [
    [i for i in range(num_entities)],  # field book_id
    rng.random((num_entities, dim)),    # field embeddings
]

insert_result = hello_milvus.insert(entities)

hello_milvus.flush()

InsertRequest数据结构:

type InsertRequest struct {
	Base                 *commonpb.MsgBase
	DbName               string
	CollectionName       string
	PartitionName        string
	FieldsData           []*schemapb.FieldData
	HashKeys             []uint32
	NumRows              uint32
	XXX_NoUnkeyedLiteral struct{}
	XXX_unrecognized     []byte
	XXX_sizecache        int32
}

FieldsData是一个数组,如果insert有3列,则数组长度为3,按照插入顺序。

FieldData数据结构:

type FieldData struct {
	Type      DataType 
	FieldName string   
	// Types that are valid to be assigned to Field:
	//
	//	*FieldData_Scalars
	//	*FieldData_Vectors
	Field                isFieldData_Field
	FieldId              int64
	IsDynamic            bool
	XXX_NoUnkeyedLiteral struct{}
	XXX_unrecognized     []byte
	XXX_sizecache        int32
}

isFieldData_Field是一个接口:

type isFieldData_Field interface {
	isFieldData_Field()
}

它有2个实现:FieldData_Scalars和FieldData_Vectors。

type FieldData_Scalars struct {
	Scalars *ScalarField
}

type FieldData_Vectors struct {
	Vectors *VectorField
}

FieldData_Scalars存储标量数据,FieldData_Vectors存储向量数据。

ScalarField数据结构:

type ScalarField struct {
	// Types that are valid to be assigned to Data:
	//
	//	*ScalarField_BoolData
	//	*ScalarField_IntData
	//	*ScalarField_LongData
	//	*ScalarField_FloatData
	//	*ScalarField_DoubleData
	//	*ScalarField_StringData
	//	*ScalarField_BytesData
	//	*ScalarField_ArrayData
	//	*ScalarField_JsonData
	Data                 isScalarField_Data
	XXX_NoUnkeyedLiteral struct{}
	XXX_unrecognized     []byte
	XXX_sizecache        int32
}

isScalarField_Data是一个接口。

type isScalarField_Data interface {
	isScalarField_Data()
}

isScalarField_Data的实现有9个:

  • ScalarField_BoolData
  • ScalarField_IntData
  • ScalarField_LongData
  • ScalarField_FloatData
  • ScalarField_DoubleData
  • ScalarField_StringData
  • ScalarField_BytesData
  • ScalarField_ArrayData
  • ScalarField_JsonData

以ScalarField_LongData为例:

type ScalarField_LongData struct {
	LongData *LongArray
}

type LongArray struct {
	Data                 []int64
	XXX_NoUnkeyedLiteral struct{}
	XXX_unrecognized     []byte
	XXX_sizecache        int32
}

VectorField数据结构:

type VectorField struct {
	Dim int64
	// Types that are valid to be assigned to Data:
	//
	//	*VectorField_FloatVector
	//	*VectorField_BinaryVector
	//	*VectorField_Float16Vector
	Data                 isVectorField_Data
	XXX_NoUnkeyedLiteral struct{}
	XXX_unrecognized     []byte
	XXX_sizecache        int32
}

isVectorField_Data是一个接口。

type isVectorField_Data interface {
	isVectorField_Data()
}

isVectorField_Data有3种实现:

  • VectorField_FloatVector
  • VectorField_BinaryVector
  • VectorField_Float16Vector

以VectorField_FloatVector为例:

type VectorField_FloatVector struct {
	FloatVector *FloatArray
}

type FloatArray struct {
	Data                 []float32
	XXX_NoUnkeyedLiteral struct{}
	XXX_unrecognized     []byte
	XXX_sizecache        int32
}

案例

向hello_milvus插入10个3维向量。

num_entities, dim = 10, 3
rng = np.random.default_rng(seed=19530)
entities = [
    [i for i in range(num_entities)],
    rng.random((num_entities, dim)), 
]
insert_result = hello_milvus.insert(entities)

在这里插入图片描述

在这里插入图片描述

FloatVector是一个长度为30的float32数组,插入的是10个3维向量,1个向量是3个float32,在这里展开了。

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

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

相关文章

基于51单片机的智能台灯的设计与实现

摘 要:针对青少年因坐姿不正确、灯光亮度不合适、用眼过度等原因易导致的近视问题,文中提出使用51单片机作为主控制单元,选用红外检测、光敏检测、蓝牙通信、蜂鸣器和模数转换等模块,设计了一款智能台灯。该智能台灯具有节能、预防近视等功能。经测试,该台灯具有保护视力的…

DS Wannabe之5-AM Project: DS 30day int prep day20

Q1. Do you have any idea about Event2Mind in NLP? Yes, it is based on NLP research paper to understand the common-sense inference from sentences. Event2Mind: Common-sense Inference on Events, Intents, and Reactions The study of “Commonsense Reasoning”…

openAI的视频技术Sora背后:奥特曼清单法

hello家人们...本人熟悉PS、Xd、Ai、Sketch、Figma、墨刀、即时设计、mastergo、Pixso等行业设计软件以及前端开发等技能,拥有10年的UI经验,我们可以通过关注评论私信交流以帮助到您解决UI工作中的烦恼!谢谢 OpenAI的视频技术Sora背后&#x…

小型洗衣机哪个牌子质量好?小型洗衣机十大排名

清洗内衣内裤这些贴身衣物确实是一件比较头疼的事,有的小伙子由于工作的劳累通常在洗完澡后并不喜欢直接清洗内衣内裤,会存上几天再扔到洗衣机里,这样做是很不可取的,因为穿过的内裤很久不洗就会滋生细菌,另外&#xf…

Linux基础IO【文件系统】

目录 1.磁盘文件 2.磁盘概念 2.1基本结构 2.2数据存储 3磁盘信息 3.1块组信息 4.文件操作 4.1文件创建 4.2文件访问 4.3对文件增删查改 4.4大文件存储 总结: 1.磁盘文件 在计算机中,没有被打开的文件都是静静的躺在外存(磁盘…

《富爸爸:巴比伦最富有的人》读书笔记

目录 作者简介 感悟 经典摘录 观点: 支付给自己(理解是投资自己) 观点:源源不断地放入金币 观点: 把收入的一部分留给我自己 观点: 从专业的人士得到建议 观点:一旦为自己规定了任务,就一定要完成 …

如何修复Microsoft Edge不能以全屏模式打开​?这里提供几个故障排除方法

随着越来越多的Windows 10用户将Edge设置为默认浏览器,各种错误和小故障层出不穷。例如,许多用户抱怨他们无法在全屏模式下启动Edge。如果你正在寻找解决方案来解决这个恼人的问题,请按照下面的故障排除步骤进行操作。 修复Microsoft Edge不…

[Flink01] 了解Flink

Flink入门系列文章主要是为了给想学习Flink的你建立一个大体上的框架,助力快速上手Flink。学习Flink最有效的方式是先入门了解框架和概念,然后边写代码边实践,然后再把官网看一遍。 Flink入门分为四篇,第一篇是《了解Flink》&…

SaaS系统介绍

本文系个人学习笔记,内容来源于资料整合及个人理解。 1. 概念介绍 SaaS系统英文全称为Software as a Service(软件即服务),通俗来讲就是提供固定功能的在线软件。从宏观上看,SaaS有三大特点: 1. 用户无需…

【Java程序员面试专栏 Java领域】Java并发 核心面试指引

关于Java 并发部分的核心知识进行一网打尽,主要包括Java为什么会有并发问题,并发问题的解决方案,到最后的锁和JUC包的解决方案,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 基础概念 关于并发与并行,Java的内存模型,以及并发编程…

VScode主题推荐-个人使用

在介绍主题之前,先看一下怎么在 VS Code 中切换主题。VS Code 提供了便捷的快捷命令面板,里边各种常用的主题都可以搜索到,包括更换主题。打开快捷命令面板的快捷键是: Command/Ctrl shift p 下载安装主题需要打开VScode&…

MyBatisPlus - 润物无声、效率至上、丰富功能

目录 一、简介 1.1、为什么要使用 MybatisPlus 二、使用指南 2.1、依赖 2.2、配置 2.3、常用注解 2.4、BaseMapper 的使用 2.4.1、定义 Mapper 接口 2.4.2、基于 QueryWrapper 的查询(不推荐) 2.4.3、基于 UpdateWrapper 的修改(不…

VTK Python PyQt 监听键盘 控制 Actor 移动 变色

KeyPressInteractorStyle 在vtk 中有时我们需要监听 键盘或鼠标做一些事; 1. 创建 Actor; Sphere vtk.vtkSphereSource() Sphere.SetRadius(10)mapper vtk.vtkPolyDataMapper() mapper.SetInputConnection(Sphere.GetOutputPort()) actor vtk.vtkAc…

【Redis篇】详解布隆过滤器(原理 | 操作 | 代码)

文章目录 🍔简述布隆过滤器🌺原理🛸存入过程🛸查询过程 🏳️‍🌈优缺点⭐优点⭐缺点 🌹代码实现(本地)🌹代码实现(分布式) &#x1f3…

【鸿蒙系统学习笔记】TypeScript开发语言

一、背景 HarmonyOS 应用的主要开发语言是 ArkTS,它由 TypeScript(简称TS)扩展而来,在继承TypeScript语法的基础上进行了一系列优化,使开发者能够以更简洁、更自然的方式开发应用。值得注意的是,TypeScrip…

第二篇【传奇开心果系列】Python的文本和语音相互转换库技术点案例示例:深度解读pyttsx3支持多种语音引擎

传奇开心果短博文系列 系列短博文目录Python的文本和语音相互转换库技术点案例示例系列 短博文目录前言一、三种语音引擎支持介绍和示例代码二、SAPI5引擎适用场景介绍和示例代码三、nsss引擎适用场景介绍和示例代码四、eSpeak适用场景介绍和示例代码五、归纳总结 系列短博文目…

【STM32 CubeMX】SPI_Flash_W25Q64的操作方法

文章目录 前言一、W25Q64操作方法基本概念1.1 读数据1.2 写使能1.3 读状态1.4 擦除扇区1.5 烧写页 总结 前言 在嵌入式系统开发中,使用外部 SPI Flash 存储器可以为 STM32 微控制器提供额外的存储空间,以存储程序代码、配置数据等。W25Q64 是一款常见的…

说说对BOM的理解(常见的BOM对象了解哪些)

文章目录 一、是什么二、window三、location四、navigator五、screen六、history 一、是什么 BOM (Browser Object Model),浏览器对象模型,提供了独立于内容与浏览器窗口进行交互的对象 其作用就是跟浏览器做一些交互效果,比如如何进行页面的后退&…

数据库小技能:事务隔离级别

文章目录 引言I 数据库1.1 事务的隔离级别1.2 报表业务场景:可重复读1.3 高并发场景:读已提交1.4 读写分离1.5 分表规范1.6 分析数据库死锁引言 事务隔离级别的选择: 报表业务场景:可重复读报表业务场景需要同一时间维度进行统计,反应数据趋势,进行查询的时候需要使用re…

基于springboot车辆充电桩管理系统源码和论文

随着信息化时代的到来,管理系统都趋向于智能化、系统化,车辆充电桩管理系统也不例外,但目前国内仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人工管理显然已无法应对时代的变化,…