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

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

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)

scalar_data.jpg

vector_data.jpg

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

目录
相关文章
|
1月前
|
存储 SQL API
milvus insert api流程源码分析
milvus insert api流程源码分析
46 3
|
2月前
|
JSON 缓存 应用服务中间件
开源API网关APISIX源码分析(一)
开源API网关APISIX源码分析
98 0
|
1月前
|
Java 数据库连接 API
Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API
Java 是一种广泛使用的、面向对象的编程语言,始于1995年,以其跨平台性、安全性和可靠性著称,应用于从移动设备到数据中心的各种场景。基础概念包括变量(如局部、实例和静态变量)、数据类型(原始和非原始)、条件语句(if、else、switch等)、函数、循环、异常处理、数据结构(如数组、链表)和面向对象编程(类、接口、继承等)。深入学习还包括包、内存管理、集合框架、序列化、网络套接字、泛型、流、JVM、垃圾回收和线程。构建工具如Gradle、Maven和Ant简化了开发流程,Web框架如Spring和Spring Boot支持Web应用开发。ORM工具如JPA、Hibernate处理对象与数
94 3
|
2月前
|
缓存 安全 应用服务中间件
开源API网关APISIX源码分析(二)
开源API网关APISIX源码分析(二)
59 0
|
3月前
|
存储 Java API
你了解SpringBoot启动时API相关信息是用什么数据结构存储的吗?(上篇)
你了解SpringBoot启动时API相关信息是用什么数据结构存储的吗?(上篇)
32 0
|
4月前
|
存储 编解码 Linux
ffmpeg常用库、术语、API、数据结构总结
ffmpeg常用库、术语、API、数据结构总结
38 0
|
4月前
|
存储 SQL API
Insert API执行流程_milvus源码解析
Insert API执行流程_milvus源码解析
288 0
|
18天前
|
缓存 前端开发 API
API接口封装系列
API(Application Programming Interface)接口封装是将系统内部的功能封装成可复用的程序接口并向外部提供,以便其他系统调用和使用这些功能,通过这种方式实现系统之间的通信和协作。下面将介绍API接口封装的一些关键步骤和注意事项。
|
25天前
|
监控 前端开发 JavaScript
实战篇:商品API接口在跨平台销售中的有效运用与案例解析
随着电子商务的蓬勃发展,企业为了扩大市场覆盖面,经常需要在多个在线平台上展示和销售产品。然而,手工管理多个平台的库存、价格、商品描述等信息既耗时又容易出错。商品API接口在这一背景下显得尤为重要,它能够帮助企业在不同的销售平台之间实现商品信息的高效同步和管理。本文将通过具体的淘宝API接口使用案例,展示如何在跨平台销售中有效利用商品API接口,以及如何通过代码实现数据的统一管理。
|
1天前
|
前端开发 Java 测试技术
IDEA 版 API 接口神器来了,一键生成文档,贼香!
IDEA 版 API 接口神器来了,一键生成文档,贼香!
7 0