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

insert api的数据结构

一个完整的insert例子:

import numpy as np
from pymilvus import (connections,FieldSchema, CollectionSchema, DataType,Collection,
)num_entities, dim = 10, 3print("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_idrng.random((num_entities, dim)),    # field embeddings
]insert_result = hello_milvus.insert(entities)hello_milvus.flush()

InsertRequest数据结构:

type InsertRequest struct {Base                 *commonpb.MsgBaseDbName               stringCollectionName       stringPartitionName        stringFieldsData           []*schemapb.FieldDataHashKeys             []uint32NumRows              uint32XXX_NoUnkeyedLiteral struct{}XXX_unrecognized     []byteXXX_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_VectorsField                isFieldData_FieldFieldId              int64IsDynamic            boolXXX_NoUnkeyedLiteral struct{}XXX_unrecognized     []byteXXX_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_JsonDataData                 isScalarField_DataXXX_NoUnkeyedLiteral struct{}XXX_unrecognized     []byteXXX_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                 []int64XXX_NoUnkeyedLiteral struct{}XXX_unrecognized     []byteXXX_sizecache        int32
}

VectorField数据结构:

type VectorField struct {Dim int64// Types that are valid to be assigned to Data:////	*VectorField_FloatVector//	*VectorField_BinaryVector//	*VectorField_Float16VectorData                 isVectorField_DataXXX_NoUnkeyedLiteral struct{}XXX_unrecognized     []byteXXX_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                 []float32XXX_NoUnkeyedLiteral struct{}XXX_unrecognized     []byteXXX_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.hqwc.cn/news/475350.html

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

相关文章

CSS概述 | CSS的引入方式 | 选择器

文章目录 1.CSS概述2.CSS的引入方式2.1.内部样式表2.2.行内样式表2.3.外部样式表 3.选择器 1.CSS概述 CSS,全称Cascading Style Sheets(层叠样式表),是一种用来设置HTML(或XML等)文档样式的语言。CSS的主要…

全网超全的测试类型详解,再也不怕面试答不出来了!

在软件测试工作过程中或者在面试过程中经常会被问到一些看起来简单但是总是有些回答不上的问题,比如你说说“黑盒测试和白盒测试的区别?”,“你们公司做灰度测试么?", ”α测试和β测试有什么不一样?“&#xff0…

基于JAVA(springboot)后台微信外出务工人员信息管理小程序系统设计与实现

博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

python 基础知识点(蓝桥杯python科目个人复习计划44)

今日复习内容:做真题 复习动态规划 完全背包问题是背包问题的一个重要变体。 1.问题描述 给定一个背包,容量为C,一组物品,每个物品有自己的重量wi和价值vi,完全背包问题要求在不超过背包容量的情况下,放…

基于51/STM32单片机的智能药盒 物联网定时吃药 药品分类

功能介绍 以51/STM32单片机作为主控系统; LCD1602液晶显示当前时间、温湿度、药品重量 3次吃药时间、药品类目和药品数量 HX711压力采集当前药品重量 红外感应当前药盒是否打开 DS1302时钟芯片显示当前年月日、时分秒、星期 DHT11采集当前环境温度和湿度 …

反射的作用

获取一个类里面所有的信息,获取到了之后,再执行其他的业务逻辑结合配置文件,动态的创建对象并调用方法 练习1: public class MyTest {public static void main(String[] args) throws IllegalAccessException, IOException {Stude…

SQL25 查找山东大学或者性别为男生的信息(union用法)

代码 select device_id , gender , age , gpa from user_profile where university 山东大学 UNION ALL select device_id , gender , age , gpa from user_profile where gender male知识点 在使用 Union 时,如果不需要删除重复行,或者结果集中的重…

EXCEL中不错的xlookup函数

excel中一般要经常用vlookup函数,但其实经常麻烦要正序,从左边到右边,还要数列,挺麻烦的,xlookup的函数还不错,有个不错的一套视频介绍,B站的,地址是:XLOOKUP函数基础用法&#xff0…

【OpenAI Sora】怎么启用:详细教程与使用指南(OpenAI Sora怎么启用)

OpenAI Sora的启用方法:详细教程与使用指南 OpenAI Sora是一种新的AI大模型,可以根据简单的文本提示生成逼真和富有想象力的60秒视频。用户可以通过以下步骤启用OpenAI Sora: 最新消息:本文是设想的方式,但 Sora 目前…

Redis:常用数据类型及其应用场景

Redis中常见的数据类型有五种:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)。下面我来分…

【快速解决】python项目打包成exe文件——vscode软件

目录 操作步骤 1、打开VSCode并打开你的Python项目。 2、在VSCode终端中安装pyinstaller: 3、运行以下命令使用pyinstaller将Python项目打包成exe文件: 其中your_script.py是你的Python脚本的文件名。 4、打包完成后,在你的项目目录中会…

js设计模式:中介者模式

作用: 通过一个公共的对象,去处理不同对象之间的消息传递。 就好比两个用户用微信聊天,微信就是中介者,负责两个人消息的接收与分发。 示例: const Weixin {msgList:[],//添加用户addUser(user){this.msgList.push(user)},//转发消息transmit(msgId,msg,name){this.msgList…