首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Milvus 在流式数据场景下的性能表现

Milvus 在流式数据场景下的性能表现

作者头像
Zilliz RDS
发布于 2020-06-19 07:31:45
发布于 2020-06-19 07:31:45
1.7K0
举报

Milvus 作为一款开源的特征向量相似度搜索引擎,其开源半年以来,在全球已经有数百家企业或组织用户。这些用户涉及各个领域,包括金融、互联网、电商、生物制药等。在部分用户的生产场景中,其数据大多是持续地、动态地生成,且要求这些动态生成的数据入库后能很快被检索到。

大数据处理可分为批式大数据(又称为“历史大数据”)处理和流式大数据(又称为“实时大数据”)处理两类。在大多数情况下,流数据在处理持续生成的动态新数据方面具有显著优势。流数据是指由多个数据源持续生成的数据,通常同时以较小规模的数据记录的形式发送,约几千字节。流数据可为各种形式的数据,例如网购数据、社交网站信息、地理空间服务,以及通过遥感器测控得到的数据。

| Milvus 应用

在用户需求的驱动下, Milvus 不断增加其功能,探索更多的应用场景。Milvus 动态数据管理策略,使得用户可以随时对数据进行插入、删除、搜索、更新等操作,无需受到静态数据带来的困扰。在插入或更新数据之后,几乎可以立刻对插入或更新过的数据进行检索, Milvus 能够保证搜索结果的准确率和数据一致性。同时在源源不断的数据导入过程中, Milvus 依然能够保持优秀的检索性能。由于这些特性, Milvus 可以很好地适用于流式大数据的场景。

在很多用户场景中,结合了批式大数据和流式大数据两种处理方式,从而构建一种混合模式,来同时维持实时处理和批处理。比如在推荐系统的实现中,无论是文章、音乐、视频等推荐或者是电商平台的商品推荐,都存在许多历史数据。平台给用户做推荐时,部分历史数据依旧有被推荐的价值,因此这些历史数据需要经过去重、过滤等处理然后存入 Milvus 中。除了历史保留的数据,在推荐系统中每天还会产生新的数据,包括新的文章、热点以及新的商品等,这些数据也要及时的导入库中并且要求能够很快被检索到,这些持续产生的数据就是流式数据。

随着越来越多的用户有动态插入数据、实时检索的需求,本文将介绍一下基于 Kafka 实现的 Milvus 在流式数据场景下的参数配置和检索的性能。

| 场景模拟

Kafka 是一个开源的流处理平台,这里将介绍基于 Kafka 实现的 Milvus 在流式数据下的两个应用示例。

示例一

该系统中使用 Kafka 接收各个客户端产生的数据来模拟生成的流式数据。当 Kafka 消息队列中有数据时,数据接收端持续从 Kafka 队列中读取数据并立即插入 Milvus 中。 Milvus 中插入向量的数据量是可大可小的,用户可一次插入十条向量,也可一次插入数十万条向量。该示例适用于数据实时性要求较高的场景。全过程如图所示:

配置:

  • index_file_size : 在 Milvus 中,数据是分文件存储的,每个数据文件大小在建立集合的时候由参数 index_file_size 值来定义。数据写入磁盘后,成为原始数据文件,保存的是向量的原始数据,每当原始数据文件大小达到 index_file_size 值后,便会触发建立索引,索引建立完成后会生成一个索引数据文件。 Milvus 进行检索时,将在索引文件中去检索。对于未建立索引的数据,将会在原始数据文件中检索。由于未建立索引的部分,检索会比较慢,因此 index_file_size 不宜设置得过大,本示例中该值设置为 512。(若 index_file_size 过大,会使得未建立索引的数据文件较大,降低检索性能。)
  • nlist : 该值表示 Milvus 建立索引后,每个数据文件里的向量被分为多少个“簇”。本示例中将该值设置为 1024。
  • Milvus 在不断插入数据的过程中,会不停的建立索引。为了保证检索的效率,这里选择了用 GPU 资源建立索引,用 CPU 资源进行检索。

性能:

本示例中,在持续导入数据之前,向集合中插入了一亿条 128 维的向量,并建立 IVF_SQ8 索引,来模拟历史数据。此后持续的向该集合中随机的间隔 1-8 秒插入 250-350 条向量。随后进行多次检索,检索性能如下:

在上述性能记录中,第一次检索时间指的是每次有新增数据导入后的检索时间,第二次检索时间是在第一次检索后没有新的数据导入前的检索时间。

横向比较,发现第一次检索时间大于第二次,是因为第一次检索时会将新导入的数据从磁盘加载到内存。

纵向比较来看,在数据持续导入过程中,第一次检索耗时持续增长。这是因为在持续导入数据的过程中,新增数据文件会和之前未建立索引的数据文件合并,检索时会将新合并的数据文件从磁盘加载到内存。随着导入数据的增多,合并好的这个新文件会越来越大,从磁盘加载到内存的耗时也将增加。其次,导入的这部分数据都未建立索引,随着未建立索引的数据增多,在这部分数据中检索的时间也会逐步增加。第二次检索耗时也越来越长,但其耗时增长幅度相较于第一次较小。是因为第二次检索没有将数据从磁盘加载到内存的过程,耗时增长只是因为未建立索引的数据越来越多。数据在导入到约 100 万条的时候(每个数据文件是 512 MB , 向量 128 维,所以每个数据文件约 100 万条向量),触发了建索引的阈值。当索引建立完成,检索时均是在索引文件中进行检索的,所以这个时候的第二次检索时间又回到动态导入数据前的性能。

在本示例持续导入数据的过程中(累计导入约 100 万),每隔 5 秒采样查询一次,并记录其查询时间。整个过程查询性能趋势如下图所示,纵坐标表示查询耗时,横坐标表示整个查询过程的时刻,以秒为单位。

在这个折线图中,大部分点(图中处于上方的这些点)对应上述表格中的第一次检索时间。从图可以看出,导入数据后的第一次检索时间有较大幅度上升的趋势。少数点(图中处于下方的这些点)对应上述表格中的第二次检索时间,第二次检索时间有一个稍微上升的趋势。在该示例中,因为数据频繁导入,所以检索时更多的是在有新数据导入后去检索的情况。从上述图中还可以看到,当导入数据总量达到建索引的阈值时,建立完索引之后的查询时间又恢复到动态导入数据之前的水平。

同时经测试,新插入的数据,在一两秒后即能被检索到。

示例二

该系统中使用 Kafka 接收各个客户端产生的数据来模拟生成的流式数据,当 Kafka 队列中有数据到达时,读取 Kafka 中的数据,当数据积累到一定量(本示例中为 10 万)的时候,批量插入 Milvus 中,这样能够减少插入次数,提高整体检索性能。该示例适用于对数据实时性要求不那么高的场景。该过程流程如图:

配置:该示例的配置同示例一。

性能:在导入新的数据之前,查询耗时约 0.027 秒。在后续导入过程中,每次批量插入 10 万条数据。数据导入过程中,数据导入后的第一次检索时间以及第二次检索时间和示例一的表中显示时间差不多。由于没有频繁的数据导入操作,所以在检索时,大多数时候的检索时间都对应上述表中的第二次检索时间。

在本示例持续批量导入数据的过程中(累计导入约 100 万),每隔 5 秒采样查询一次,并记录其查询时间。整个过程查询性能趋势如下图所示,纵坐标表示查询耗时,横坐标表示整个查询过程的时刻,以秒为单位。

在该该折线图中可以看到,由于插入频率降低,所以大多数检索时对应示例一表格中的第二次检索时间。只有在每次导入十万数据后,检索耗时相对较长。同样的,在建完索引之后,查询时间也恢复到导入数据之前的水平。

从上述两个示例的性能表现折线图来看,在有频繁的检索操作,同时对新增数据的实时性要求不高的情况,累计批量数据插入是更优的选择。

| 结语

随着用户的增多,Milvus 被提出了更多的需求,在用户需求的驱动中,Milvus 将不断的完善和丰富自身的功能。Milvus 致力于在非结构化数据处理的道路上,为用户提供更多的价值。同时也希望更多志同道合的伙伴加入 Milvus 开源社区,一起参与、见证 Milvus 的成长。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ZILLIZ 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
浅谈如何优化 Milvus 性能
Milvus 是全球最快的向量数据库,在最新发布的 Milvus 2.2 benchmark[1] 中,Milvus 相比之前的版本,取得了 50% 以上的性能提升。值得一提的是,在 Master branch 的最新分支中,Milvus 的性能又更进一步,在 1M 向量串行执行的场景下取得了 3ms 以下的延迟,整体 QPS 甚至超过了 ElasticSearch 的 10 倍。那么,如何使用 Milvus 才能达到理想的性能呢?本文暂且不提社区大神贡献的黑科技优化,先聊聊使用 Milvus 过程中的一些经验,以及如何进行性能调优。
Zilliz RDS
2023/01/10
4.4K0
浅谈如何优化 Milvus 性能
Milvus 如何实现数据动态更新与查询
在这篇文章,我们会主要描述 Milvus 里向量数据是如何被记录在内存中,以及这些记录以怎样的形式维护。
Zilliz RDS
2020/04/02
2.7K0
Milvus性能优化提速之道:揭秘优化技巧,避开十大误区,确保数据一致性无忧,轻松实现高性能
Milvus 是全球最快的向量数据库,在最新发布的 Milvus 2.2 benchmark中,Milvus 相比之前的版本,取得了 50% 以上的性能提升。值得一提的是,在 Master branch 的最新分支中,Milvus 的性能又更进一步,在 1M 向量串行执行的场景下取得了 3ms 以下的延迟,整体 QPS 甚至超过了 ElasticSearch 的 10 倍。那么,如何使用 Milvus 才能达到理想的性能呢?本文暂且不提社区大神贡献的黑科技优化,先聊聊使用 Milvus 过程中的一些经验,以及如何进行性能调优。
汀丶人工智能
2023/11/15
2.5K0
Milvus性能优化提速之道:揭秘优化技巧,避开十大误区,确保数据一致性无忧,轻松实现高性能
Milvus 实战 | Milvus 与 BERT 搭建文本搜索
Google 的 BERT 模型在 NL 领域中具有巨大的影响力。它是一个通用的语言表示模型,可以应用于诸多领域。本文的项目是将 Milvus 与 BERT 模型结合搭建文本搜索引擎,使用 BERT 模型将文本数据转成向量,结合 Milvus 特征向量相似度搜索引擎可以快速搜索相似文本。
Zilliz RDS
2020/08/05
3.1K0
Milvus 实战 | Milvus 与 BERT 搭建文本搜索
milvus v2.5.12震撼发布!全新JSON索引支持再升级,安全与性能双重保障!
随着数据智能化应用的不断深入,向量数据库在大规模、高性能数据管理领域的重要性日益凸显。作为业界领先的开源向量数据库,Milvus始终致力于为开发者和企业提供强大、稳定且高效的向量数据管理解决方案。近日,Milvus官方重磅发布了全新版本——Milvus v2.5.12,带来丰富的新特性、关键的功能改进以及大量的稳定性和安全性修复,助力用户打造更加智慧、高效的应用系统。
福大大架构师每日一题
2025/06/06
1210
milvus v2.5.12震撼发布!全新JSON索引支持再升级,安全与性能双重保障!
Milvus 数据迁移工具 -- Milvusdm
Milvusdm (Milvus Data Migration) 是一款针对 Milvus 研发的数据迁移工具,支持 Milvus 数据传输以及数据文件的导入与导出:
Zilliz RDS
2021/03/22
3.8K0
Milvus 数据迁移工具 -- Milvusdm
Milvus 上新:支持上万个 Collection、新增 Accesslog 功能……
2024 年开年,Milvus 好消息不断。除了收获 Github 25,000 颗星的成就,Milvus 也发布了新年的第一个版本—— 2.3.4。
Zilliz RDS
2024/01/23
3740
Milvus 上新:支持上万个 Collection、新增 Accesslog 功能……
基于Flink CDC打通数据实时入湖
在构建实时数仓的过程中,如何快速、正确的同步业务数据是最先面临的问题,本文主要讨论一下如何使用实时处理引擎Flink和数据湖Apache Iceberg两种技术,来解决业务数据实时入湖相关的问题。
数据社
2021/07/09
1.8K0
Milvus x Lucidworks 快速构建语义检索
语义检索 [1](Semantic Search) 是能帮助你的客户或员工找到正确的产品或信息的绝佳工具,它甚至可以检索到一些难以被索引的信息,从而获得更好的结果。即便如此,倘若你所部署的方案没有速度优势,那也无济于事。如果系统响应查询请求的速度非常缓慢,客户或员工可没有耐心干等着,更不用说可能还有其他上千个查询请求在同时发生。
Zilliz RDS
2021/06/25
9260
Annoy vs Milvus:哪个向量数据库更适合您的AI应用?知其然知其所以然
Annoy 和 Milvus 都是用于向量索引和相似度搜索的开源库,它们可以高效地处理大规模的向量数据。
汀丶人工智能
2023/10/18
1K0
Annoy vs Milvus:哪个向量数据库更适合您的AI应用?知其然知其所以然
Milvus 2.1 版本更新 - 简单可信赖、性能持续提升
继年初发布 Milvus 2.0 版本之后,在数百位 Milvus 社区贡献者六个月的共同努力下,我们在早些时候发布了 Milvus 2.1 版本[1],经过两个月的数次迭代,版本趋于稳定,被国内外头部厂商信任和选择使用。
Zilliz RDS
2022/11/07
9550
Milvus 2.1 版本更新 - 简单可信赖、性能持续提升
云原生向量数据库Milvus知识大全,看完这篇就够了[基本概念、系统架构、主要组件、应用场景]
Milvus 是一款云原生向量数据库,它具备高可用、高性能、易拓展的特点,用于海量向量数据的实时召回。
汀丶人工智能
2023/10/11
22.7K0
云原生向量数据库Milvus知识大全,看完这篇就够了[基本概念、系统架构、主要组件、应用场景]
Deep Dive 7:Milvus 2.0 质量保障系统详解
架构设计图对于质量保障同样重要,只有充分了解被测对象,才能制定出更合理和高效的测试方案。Milvus 2.0 是一个云原生、分布式的架构,主要的入口通过 SDK 进入,内部有很多分层的逻辑。因而对于用户来说,SDK 这一端是非常值得关注的一部分,对 Milvus 测试时,首先会对 SDK 这一端进行功能测试,并通过 SDK 去发现 Milvus 内部可能存在的问题。同时 Milvus 也是一个数据库,因此关于数据库的各种系统测试也会涉及到。
Zilliz RDS
2022/05/25
7380
Deep Dive 7:Milvus 2.0 质量保障系统详解
探索 Milvus 数据存储系统:如何评估和优化 Milvus 存储性能
本文将深入探讨 Milvus 架构,分析其核心存储组件,并介绍如何有效评估 Milvus 存储系统性能。
Zilliz RDS
2024/07/31
7070
探索 Milvus 数据存储系统:如何评估和优化 Milvus 存储性能
Chat with Milvus #10 回顾- Milvus 性能指标
- Milvus 的顾老师教你怎么看 Milvus 性能报告与如何达到最佳性能。
Zilliz RDS
2020/05/06
1.3K0
Chat with Milvus #10 回顾- Milvus 性能指标
Milvus 2.2 版本发布!
经过了 4 个月的打磨,Milvus 2.2.0 于 11 月 18 日正式发版!2.2 版本推出了包括基于磁盘的近似最近邻(ANN)索引算法、从文件批量导入数据、基于角色的访问控制等新特性。进一步提升了向量搜索的稳定性、搜索速度和灵活的扩缩容能力。
Zilliz RDS
2023/01/10
1.1K0
Milvus 2.2 版本发布!
Milvus 在唯品会搜索推荐的实践
随着互联网数据规模的爆炸式增长,当前主流电商平台的商品品类及数量越来越多,用户却越来越难以便捷地找到自己需要的产品。
Zilliz RDS
2021/06/25
2.1K0
点击查看 Milvus 社区十大关键词(上)
按照热度,排名前十的关键词依次为:版本、查询、内存、插入、配置、日志、集群、文档、 部署、删除。今天,我们先来扒一扒前五大关键词!
Zilliz RDS
2024/01/30
2770
点击查看 Milvus 社区十大关键词(上)
Chat with Milvus #24 回顾-Milvus 数据管理
不管是分区还是段,都只是数据在物理存储中的组织形式。Milvus 进行查询操作时,必须要获知各个数据文件在物理存储上的位置以及状态信息,包括所属集合、包含的实体条数、文件的大小、全局唯一的标识、以及创建日期等等。我们将这些信息称为元数据。此外,元数据还包含集合以及分区的信息,包括集合名称、集合维度、索引类型、分区标签等等。
Zilliz RDS
2020/08/27
5500
Chat with Milvus #24 回顾-Milvus 数据管理
Milvus 数据段合并机制
我们在《Milvus在大规模向量检索场景下的数据管理》这篇文章说过,当向量数据不断地进入 Milvus 时,系统后台会持续地将插入缓冲区中的数据写入磁盘,形成很多小文件。我们称这些文件为数据段。大量零碎的数据段有两个明显缺点:
Zilliz RDS
2020/07/14
1.1K0
推荐阅读
相关推荐
浅谈如何优化 Milvus 性能
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档