使用milvus-sdk-go的迭代器导出数据

使用milvus-sdk-go的迭代器导出数据

迭代器是一种功能强大的工具,可帮助您使用主键值和布尔表达式迭代集合中的大量数据或所有数据。这可以显著改善您检索数据的方式。与传统的offsetlimit参数用法不同,后者可能会随着时间的推移而变得效率低下,而迭代器提供了更具可扩展性的解决方案。

当表数据很大,需要全量导出,我们可以使用迭代器,例如每次只查询1000行数据,直到所有数据查询完成,同时也可以减少服务器压力。

需要注意的是迭代器是一个客户端实现。

下面列举一个例子:写入3000条数据,每次读取100条,直至完全读完完毕。

package mainimport ("context""fmt""io""log""math/rand""strconv""github.com/milvus-io/milvus-sdk-go/v2/client""github.com/milvus-io/milvus-sdk-go/v2/entity"
)const (milvusAddr     = `192.168.230.71:19530`nEntities, dim = 3000, 128collectionName = "hello_iterator"msgFmt                                     = "==== %s ====\n"idCol, randomCol, addressCol, embeddingCol = "ID", "random", "address", "embeddings"topK                                       = 3
)func main() {ctx := context.Background()log.Printf(msgFmt, "start connecting to Milvus")c, err := client.NewClient(ctx, client.Config{Address: milvusAddr,})if err != nil {log.Fatal("failed to connect to milvus, err: ", err.Error())}defer c.Close()// delete collection if existshas, err := c.HasCollection(ctx, collectionName)if err != nil {log.Fatalf("failed to check collection exists, err: %v", err)}if has {c.DropCollection(ctx, collectionName)}// create collectionlog.Printf(msgFmt, fmt.Sprintf("create collection, `%s`", collectionName))schema := entity.NewSchema().WithName(collectionName).WithDescription("hello_milvus is the simplest demo to introduce the APIs").WithField(entity.NewField().WithName(idCol).WithDataType(entity.FieldTypeInt64).WithIsPrimaryKey(true).WithIsAutoID(false)).WithField(entity.NewField().WithName(randomCol).WithDataType(entity.FieldTypeDouble)).WithField(entity.NewField().WithName(addressCol).WithDataType(entity.FieldTypeVarChar).WithTypeParams(entity.TypeParamMaxLength, "50")).WithField(entity.NewField().WithName(embeddingCol).WithDataType(entity.FieldTypeFloatVector).WithDim(dim))if err := c.CreateCollection(ctx, schema, entity.DefaultShardNumber); err != nil { // use default shard numberlog.Fatalf("create collection failed, err: %v", err)}// build indexlog.Printf(msgFmt, "start creating index IVF_FLAT")idx, err := entity.NewIndexIvfFlat(entity.L2, 128)if err != nil {log.Fatalf("failed to create ivf flat index, err: %v", err)}if err := c.CreateIndex(ctx, collectionName, embeddingCol, idx, false); err != nil {log.Fatalf("failed to create index, err: %v", err)}log.Printf(msgFmt, "start loading collection")err = c.LoadCollection(ctx, collectionName, false)if err != nil {log.Fatalf("failed to load collection, err: %v", err)}// insert datalog.Printf(msgFmt, "start inserting random entities")idList, randomList := make([]int64, 0, nEntities), make([]float64, 0, nEntities)addressList := make([]string, 0, nEntities)embeddingList := make([][]float32, 0, nEntities)// generate datafor i := 0; i < nEntities; i++ {idList = append(idList, int64(i))}for i := 0; i < nEntities; i++ {randomList = append(randomList, rand.Float64())}for i := 0; i < nEntities; i++ {addressList = append(addressList, "wuhan"+strconv.Itoa(i))}for i := 0; i < nEntities; i++ {vec := make([]float32, 0, dim)for j := 0; j < dim; j++ {vec = append(vec, rand.Float32())}embeddingList = append(embeddingList, vec)}idColData := entity.NewColumnInt64(idCol, idList)randomColData := entity.NewColumnDouble(randomCol, randomList)addressColData := entity.NewColumnVarChar(addressCol, addressList)embeddingColData := entity.NewColumnFloatVector(embeddingCol, dim, embeddingList)if _, err := c.Insert(ctx, collectionName, "", idColData, randomColData, addressColData, embeddingColData); err != nil {log.Fatalf("failed to insert random data into `hello_milvus, err: %v", err)}if err := c.Flush(ctx, collectionName, false); err != nil {log.Fatalf("failed to flush data, err: %v", err)}// 使用迭代器,每次读取100行数据itr, err := c.QueryIterator(ctx, client.NewQueryIteratorOption(collectionName).WithOutputFields(idCol, randomCol, embeddingCol).WithBatchSize(100))if err != nil {log.Fatal("failed to query iterator: ", err.Error())}for {rs, err := itr.Next(ctx)if err != nil {if err == io.EOF {log.Println("iterator reach EOF")break}log.Fatal("failed to query iterator. next: ", err.Error())}var idlist []int64var randomlist []float64for _, col := range rs {if col.Name() == idCol {idColumn := col.(*entity.ColumnInt64)for i := 0; i < col.Len(); i++ {val, err := idColumn.ValueByIdx(i)if err != nil {log.Fatal(err)}idlist = append(idlist, val)}}if col.Name() == randomCol {randomColumn := col.(*entity.ColumnDouble)for i := 0; i < col.Len(); i++ {val, err := randomColumn.ValueByIdx(i)if err != nil {log.Fatal(err)}randomlist = append(randomlist, val)}}}log.Printf("\tids: %#v\n", idlist)log.Printf("\trandoms: %#v\n", randomlist)}// drop collectionlog.Printf(msgFmt, "drop collection `hello_milvus`")if err := c.DropCollection(ctx, collectionName); err != nil {log.Fatalf("failed to drop collection, err: %v", err)}
}

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

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

相关文章

Adobe Photoshop 2024 25.9.1 Win/Mac PS2024最新中文学习版

Adobe Photoshop 2024&#xff0c;简称PS&#xff0c;目前最强的图片处理合成软件,PS提供了广泛的工具和功能&#xff0c;包括画笔、铅笔、颜色替换、混合器画笔等绘画工具&#xff0c;以及裁剪、透视变形、智能修复画笔等编辑工具。用户可以使用这些工具进行图片编辑、合成、校…

旅游数据可视化:免费工具让复杂数据变得简单易懂

随着旅游业的蓬勃发展&#xff0c;海量的数据如同繁星点点&#xff0c;记录着每一位旅者的足迹与偏好。然而&#xff0c;如何将这些复杂的数据转化为直观、易懂的信息&#xff0c;为旅游企业精准决策、为消费者提供更加个性化的服务&#xff0c;成为了行业内外共同关注的焦点。…

vue2+antd实现表格合并;excel效果

效果图 一、html <template><div><a-table :columns"columns" :dataSource"dataSource" rowKey"id" :pagination"false" bordered><template slot"content1" slot-scope"text">{{text}}…

JuiceFS缓存特性

缓存 对于一个由对象存储和数据库组合驱动的文件系统&#xff0c;缓存是本地客户端与远端服务之间高效交互的重要纽带。读写的数据可以提前或者异步载入缓存&#xff0c;再由客户端在后台与远端服务交互执行异步上传或预取数据。相比直接与远端服务交互&#xff0c;采用缓存技…

萝卜快跑无人车实行规模运营的态度、反思与展望

社会各界对萝卜快跑无人车实行规模运营的态度、反思与展望可以从以下几个方面来解读&#xff1a; 态度 支持与期待&#xff1a; 技术发展与进步&#xff1a;媒体和公众普遍关注到无人驾驶技术的快速发展及其在交通运输领域的应用&#xff0c;认为这是技术进步的重要体现。出行…

图片如何去水印,PS 图片去水印的几种常见方法

在数字图像的世界里&#xff0c;水印常常被用来标识版权或防止未经授权的使用&#xff0c;但有时它们却成为了美观的障碍。无论是出于个人偏好还是专业需求&#xff0c;去除图片上的水印已经成为一项常见的任务。 Adobe Photoshop 作为行业标准的图像编辑软件&#xff0c;提供…

Web前端-Web开发HTML基础8-nav

一. 基础 1. 写一个导航标签&#xff0c;里面是两个超链接&#xff0c;分别指向https://baidu.com和https://huawei.com/cn&#xff1b; 2. 写一个导航标签&#xff0c;里面是三个超链接&#xff0c;分别指向https://baidu.com、https://huawei.com/cn和https://www.nowcoder.c…

热门软件缺陷管理工具2024:专业评测与建议

国内外主流的10款软件缺陷管理工具软件对比&#xff1a;PingCode、Worktile、禅道、Tapd、Teambition、Tower、JIRA、Bugzilla、MantisBT、Trac。 在软件开发过程中&#xff0c;管理缺陷和漏洞常常成为一项挑战&#xff0c;尤其是在项目规模庞大时。选择一个高效的软件缺陷管理…

C语言------指针讲解(2)

目录 一、数组名的理解 二、使用指针访问数组 三、一维数组传参的本质 四、冒泡排序 五、二级指针 六、指针数组 七、指针数组模拟二维数组 一、数组名的理解 通过学习&#xff0c;我们知道&#xff1a;数组名和数组首元素的地址打印出来的结果一模一样&#xff0c;数组…

spi 推跑马灯

spi 推跑马灯&#xff0c;来电时跑马灯效果 归零码 1 主控spi单次最少是发一个U8 也就是8个bit位&#xff0c;所以软件充分利用 这个u8的每一个bit位组合成一个 灯需要的0码 或者1码 2 遇到的问题&#xff0c;主频改变的时候数据就不对了&#xff0c;发送spi数据前需要判断当…

深度刨析程序中的指针

前面我们已经学习过了指针的一下性质&#xff1a; 指针就是个变量&#xff0c;用来存放地址&#xff0c;地址唯一标识的一块内存空间指针的大小是固定的4/8个字节&#xff08;32位平台/64位平台&#xff09;指针是有类型&#xff0c;指针的类型决定了指针的加减整数的步长&…

SQL 中的 EXISTS 子句:探究其用途与应用

目录 EXISTS 子句简介语法 EXISTS 与 NOT EXISTSEXISTS 子句的工作原理实际应用场景场景一&#xff1a;筛选存在关联数据的记录场景二&#xff1a;优化查询性能 EXISTS 与其他 SQL 结构的比较EXISTS vs. JOINEXISTS vs. IN 多重 EXISTS 条件在 UPDATE 语句中使用 EXISTS常见问题…

Flutter基本概念常用命名

Flutter基本概念 一切皆是Widgets多组件容器&#xff08;Row、Column、Stack、Wrap&#xff09;单组件容器&#xff08;Container、Padding、Center、Align&#xff09;Flutter组件的规律 Widgets状态 stateful&#xff08;有状态&#xff09; 当创建一个能随时间动态改变的w…

uniapp动态自定义导航栏,动态修改后无法再次点击的解决方案

如果你的写法是这样&#xff1a; 这种方式在动态修改后 &#xff0c;再次点击按钮&#xff0c;按钮事件无法正常回调 // #ifdef APP-PLUSvar pages getCurrentPages();var page pages[pages.length - 1];var currentWebview page.$getAppWebview();var tn currentWebview…

Maven学习—如何在IDEA中配置Maven?又如何创建Maven工程?(详细攻略)

目录 前言 1.在IDEA中配置Maven 2.创建Maven项目 &#xff08;1&#xff09;Maven&#xff1a;创建普通Maven工程 &#xff08;2&#xff09;Maven Archetype&#xff1a;创建Maven模板工程 前言 本篇博客将详细的介绍在IDEA中如何配置Maven&#xff0c;以及如何创建一个Ma…

分布式 I/O 系统 BL200 Modbus TCP 耦合器

BL200 耦合器是一个数据采集和控制系统&#xff0c;基于强大的 32 位微处理器设计&#xff0c;采用 Linux 操作系统&#xff0c;支持 Modbus 协议&#xff0c;可以快速接入现场 PLC、SCADA 以及 ERP 系统&#xff0c; 内置逻辑控制、边缘计算应用&#xff0c;适用于 IIoT 和工业…

Android中的图像效果实现:探索图像处理的艺术

在Android开发领域&#xff0c;图像处理技术是提升应用吸引力和用户体验的关键组成部分。从简单的颜色调整到复杂的滤镜效果&#xff0c;开发者可以通过各种方法在Android应用中创造令人印象深刻的视觉效果。本文将从多个角度探讨Android中图像效果的实现&#xff0c;包括基础图…

园区道路车辆智能管控视频解决方案,打造安全畅通的园区交通环境

一、背景需求分析 随着企业园区的快速发展和扩张&#xff0c;道路车辆管理成为了保障园区秩序、提升运营效率及确保员工安全的重要任务。针对这一需求&#xff0c;旭帆科技TSINGSEE青犀提出了一种企业园区道路车辆管控的解决方案&#xff0c;通过整合视频监控、智能识别等技术…

opencv—常用函数学习_“干货“_9

目录 二五、霍夫变换 检测图像中的直线 (HoughLines) 检测图像中的直线段 (HoughLinesP) 检测图像中的圆 (HoughCircles) 解释 二六、傅里叶变化 获取最优的DFT大小 (getOptimalDFTSize) 执行离散傅里叶变换 (dft) 和 逆变换 (idft) 解释 实际应用 图像滤波示例 http…

Qt6 OpenCV4视频监控系统项目源码解析——附源码及编译运行步骤

很多刚毕业&#xff0c;或者想着转行到C Qt方向的小伙伴&#xff0c;平时可能拿不出比较像样的项目。这里你可要好好收藏啦。自己拿回去好好改改&#xff0c;就可以成为自己的项目经历了。祝各位找工作顺利呀。 好了。废话不多说。 这个项目架构采用的是MVC架构&#xff0c;结…