首页 > 其他分享 >论文解读:基于 OpenMLDB 的流式特征计算优化

论文解读:基于 OpenMLDB 的流式特征计算优化

时间:2023-04-17 11:11:31浏览次数:48  
标签:Join OIJ Interval OpenMLDB 流式 解读 算法

近期,数据库领域的顶级学术会议 ICDE 2023 在迪斯尼主题公园的故乡 - 美国的安纳海姆(Anaheim)举办。由 OpenMLDB 开源社区和新加坡科技设计大学(Singapore University of Technology and Design)联合完成的研究工作在 ICDE 2023 上作为工业界的常规论文发表。该项研究工作增强了 OpenMLDB 的流式特征计算能力,对其中的关键操作 Interval Join 进行了深度优化,取得了比目前工业界普遍使用的算法高达数量级的吞吐和延迟优化。基于该优化算法,克服了流式计算在实时机器学习领域所遇到的性能瓶颈,可以支持在金融、风控、推荐等领域的毫秒级实时流式特征计算的需求。其论文预印版可在此链接阅读:Scalable Online Interval Join on Modern Multicore Processors in OpenMLDB

file
file
file

OpenMLDB 作为一个线上线下一致的实时特征计算平台,被广泛应用于如反欺诈、风控、实时推荐等场景。在本次的研究工作中,双方合作对基于 OpenMLDB 进行流式特征的计算能力进行了深度优化。特别的,我们关注其中的性能瓶颈,即 Interval Join 操作。下图为 Interval Join 的示意图。其基于数据流 S,定义一个往前两秒的时间窗口,对数据流 R 上在对应时间窗口内的数据进行 JOIN 或者聚合操作,完成需要的特征计算逻辑。该操作在 Flink 中即为 Interval Join,在 OpenMLDB 中是通过 WINDOW UNION 语法进行副表多行聚合特征的开发,或者也被称为 point-in-time join/aggregation。

file

Interval Join 在现有的工业界流式处理系统中,一般使用 key-partitioned based join 算法,简称为 Key-OIJ。比如在工业界中普遍使用的流式计算框架 Flink,即使用了 Key-OIJ 的算法实现 Interval Join 的计算任务。此种算法对于一个 buffer 内的 R 和 S 做 partition,然后对于在相同 partition 内的数据再进行 join 或者聚合操作。在此次研究工作中,我们发现 Key-OIJ 在很多真实世界的工作负载中存在严重的性能问题。主要总结为:

  • 工作负载不平衡和数据倾斜。当 key 的数目较少时(甚至如 key 的数量小于线程数量),非常容易出现数据倾斜的问题,从而导致整体系统的效率大幅下降。
  • 当存在时间上的重叠窗口时,该算法会带来大量的重复计算,导致大窗口下整体计算效率低下。
  • 由于数据无序,导致了整个计算过程的大量数据扫描;并且需要缓存更多的数据以保证结果的正确性。

在实时机器学习领域,实时特征计算一般对性能的需求在毫秒级别。使用 Key-OIJ 算法进行线上实时计算,很可能会因为高延迟而无法满足业务需求。因此,我们需要对该算法进行进一步的优化,以满足实时机器学习的需求。
为了克服以上 Key-OIJ 算法存在的问题,优化 Interval Join 的性能,我们在 OpenMLDB 的现有算法基础上,提出了一个全新的算法,称为 Scalable Online Interval Join(Scale-OIJ)。该算法针对此类工作负载优化,基于 OpenMLDB 的核心数据结构 - 双层跳表,设计了一个支持高效率单写多读(Single-Writer-Multiple-Reader index,即 SWMR)优化的索引。如下图显示了该核心数据结构和 SWMR 机制。第一次跳表维护键值到第二次跳表的映射关系;第二次跳表维护时间戳到数据行的映射关系,通过双层跳表的数据结构,可以以 log(N) 的时间复杂度,定位到需要的窗口数据,避免了如 Key-OIJ 算法中的大量数据扫描。通过支持单写多读的无锁并行数据结构,可以更加轻量的在多线程间共享数据。

file
file

除了基于双层跳表的核心数据结构,我们还引入了更多的优化技术。

  • 动态调度:通过分析实时数据流的分布情况,动态调整 partition 的策略,使得数据可以更均匀地分布到所有线程上,避免了工作负载不平衡和数据倾斜。基于单写多读的数据结构,不同线程之间可以共享数据,协同对同一个 key 进行处理,即使当 key 的数目较少时,所有线程仍然可以保持较高的稳定的 CPU 利用率。
  • 增量聚合:真实数据集中,会出现大量的窗口重叠的情况,很大地浪费了计算资源。通过利用之前计算的结果,增量地更新当前计算,从而避免了重复的数据扫描和计算。当窗口很大的情况下,极大地减少了整体的数据访问和计算。

基于以上的优化,我们对 Scale-OIJ 算法进行了系统性的评估。我们使用了三个具备不同特性的真实世界数据集进行测试,测试数据集和实验结果显示如下。可以看到,在三个不同的数据集下,我们设计的 Scale-OIJ 算法比现有的 Key-OIJ 算法均有大幅的提升:在吞吐方面,有多达 24 倍的提升;在延迟方面,最多缩短了 99% 的延迟。

file
file

目前,该 paper 提出的 Scale-OIJ 算法已经和 OpenMLDB 进行了部分整合。未来,我们将完成最终的工程化整合,为流式特征在 OpenMLDB 的实时处理提供进一步的性能优化。我们也欢迎社区内的开发者和我们进行前沿的学术合作,共同打造 OpenMLDB 在技术上的领先性。

扫描以下二维码加入我们的社区技术讨论群

file

参考资料

标签:Join,OIJ,Interval,OpenMLDB,流式,解读,算法
From: https://www.cnblogs.com/4paradigm-opensource/p/17325197.html

相关文章

  • 国网B接口调阅实时视频规范解读和代码示例分析
    接口描述国网B接口调阅实时视频,相关规范写的比较粗略:调阅实时视频包括信令接口和媒体流接口,采用标准的SIPINVITE+SDP流程,媒体传输使用RTP/RTCP。SDP中RTPPayload的取值应遵守下面接口参数中的定义:a)SDP中的媒体信息,应仅有一个m行,用于描述视频格式。b)视频数据用RTP打包传......
  • [Linux]流式传输和块传输
    在计算机中,流和块(Block)是用于数据传输和处理的两种不同的处理方式,两者之间的主要区别如下:1.数据单位不同流是一系列按顺序排列的数据字符组成的序列,数据以字节为单位进行传输和处理,适用于逐个传递字符流的应用程序。相比之下,块以块为单位进行传输和处理,每个块包含多个字节,可以......
  • Flex| 流式 布局 ,让元素两端居左,居右,别再用float:right了
    主要代码是.parent{ justify-content:space-between; }}完整代码案例.tasklist{height:calc(80vh);overflow-y:auto;overflow-x:hidden;border:1pxsolid#ccc;border-radius:4px;}.taskhead{display:flex;height:50px;......
  • 万字详解 | Java 流式编程
    概述StreamAPI是Java中引入的一种新的数据处理方法。它提供了一种高效且易于使用的方法来处理数据集合。StreamAPI支持函数式编程,可以让我们以简洁、优雅的方式进行数据操作,还有使用Stream的两大原因:在大多数情况下,将对象存储在集合中就是为了处理它们,因此你会发现你把编程......
  • 纯前端仿GPT流式打字效果的js库,类似通义千问或者其他AI界面的打字效果
    因为GPT以及国内各大模型的发布,很多官网都设计的是,仿造流式打字效果,下面这个js库就能轻松实现。typed.js  具体实现代码参考下面:<spanid="subTitle"></span><scriptsrc="https://unpkg.com/[email protected]/dist/typed.umd.js"></script><script>vartyped=......
  • 深度解读2023年巴菲特致股东的信
    2月25日晚间,全球投资者所期待的2023年巴菲特致股东的信正式公布。每年2月底,巴菲特致股东的信成为大家学习巴菲特价值投资,以及了解巴菲特过去一年投资得失的一个重要窗口,与每年5月第一个周六召开的巴菲特股东大会一样重要。在信中,巴菲特总是毫无保留的为我们奉上投资真谛,读起来让人......
  • 解读元宇宙:数字世界的未来前景和挑战
    随着科技的迅猛发展,元宇宙成为近年来备受瞩目的话题。作为一个虚拟的数字世界,元宇宙将人类带入了一个全新的数字体验领域,拥有无限的可能性。本文将对元宇宙的未来前景和挑战进行解读。一、元宇宙的未来前景元宇宙是一个由虚拟世界构成的数字生态系统,通过虚拟现实(VR)、增强现实(AR)......
  • 论文解读( FGSM)《Adversarial training methods for semi-supervised text classificat
    论文信息论文标题:Adversarialtrainingmethodsforsemi-supervisedtextclassification论文作者:TaekyungKim论文来源:ICLR2017论文地址:download 论文代码:download视屏讲解:click1 背景1.1 对抗性实例(Adversarialexamples)通过对输入进行小扰动创建的实例,可显著增加机器......
  • 恒创科技:Linux 云服务器好用吗?(解读Linux云服务器的特点优势)
    ​如今,云计算越来越受欢迎,许多公司正在将业务转移到那里。企业向云过渡的主要原因是它提供的众多服务,包括安全和充足的存储、数据库、服务器和其他关键元素。作为相对前|沿的技术之一,云建立在虚拟服务器上。Linux服务器也可以放在云端。通过改变他们用作存储和服务器来托......
  • spring security FormLoginConfigure的作用和源码解读
    这一节来研究下springsecurity中FormLoginConfigurer这个配置器的作用一、综述FormLoginConfigurer本质上还是一个SecurityConfigurer,用来对HttpSecurity这个构建器进行配置,它用来对表单登录的功能进行配置,通过HttpSecurity#formLogin()方法来给HttpSecurity对象中添加此配......