基于 LoserTree 的 Paimon 多路归并优化
- 背景介绍:介绍 Paimon 中读取数据的原理及优化思路;
- 多路归并算法:介绍堆排序和 LoserTree 的实现原理,并对算法复杂度进行分析和对比;
- 方案设计:分析在 Paimon 中使用 LoserTree 存在的问题,并提出一个基于 LoserTree 的优化实现;
- 算法证明:对新的实现算法进行了正确性分析和证明;
- 性能收益 :介绍在整体实现落地后 通过基准测试 取得的性能收益。
一、背景
二、多路归并算法介绍
2.1 堆排序
2.2 LoserTree
2.3 算法对比
三、LoserTree 优化方案
3.1 前置条件
- 在 Paimon 中每个 Key 由两部分组成: U serKey + S equenceNumber;
- 每个 RecordReader 中的数据是有序的,且单个 RecordReader 中不包含相同的 U serKey。
3.2 初始化
3.3 排序
- 状态定义
- WINNER_WITH_NEW_KEY :与上一次的全局 W inner 使用不同的 U serKey;
- WINNER_WITH_SAME_KEY :与上一次的全局 W inner 使用相同的 U serKey,但 S equenceNumber 更大;
- WINNER_POPPED :全局 W inner 已经被取出处理了,也用于判断在树中是否还有未处理的相同 U serKey 节点;
- LOSER_WITH_NEW_KEY :和最近一个战胜它的 L ocal W inner 不具有相同的 U serKey;
- LOSER_WITH_SAME_KEY :和最近一个战胜它的 L ocal W inner 具有相同的 U serKey;
- LOSER_POPPED :和最近一个全局 W inner 具有相同的 U serKey,并且已经被取出处理了;
- 状态转换
- 每个叶子节点迭代产生的新 Key,状态初始化为 WINNER_WITH_NEW_KEY;
- 当树的头结点被取出时,对应的叶子节点状态切换为 WINNER_POPPED,可以看作 U serKey 不变,但将 S equenceNumber 设置为无限大;
- 根据 L ocal W inner 的状态,在遇到不同状态的父节点时,会进行不同的状态转换:
- L ocal W inner 的状态是 WINNER_WITH_NEW_KEY ,父节点的状态是:
- LOSER_WITH_NEW_KEY: 两个节点需要进行比较并计算出新的 W inner;如果两个节点的 U serKey 相同,败者节点的状态转换为 LOSER_WITH_SAME_KEY;
- LOSER_WITH_SAME_KEY: 这是一个不可能发生的 C ase,因为 WINNER_WITH_NEW_KEY 意味着开启了新的一轮调整,因此所有和上一次全局 W inner 具有相同 U serKey 的节点都应该被处理了 ;
- LOSER_POPPED: 无需比较,父节点获胜并切换为 WINNER_POPED,子节点切换为 LOSER_WITH_NEW_KEY 。
-
- Local Winner 的状态是 WINNER_WITH_SAME_KEY,父节点的状态是:
- LOSER_WITH_NEW_KEY:无需比较和转换状态,子节点获胜;
- LOSER_WITH_SAME_KEY:两个节点的 UserKey 相同,只需要比较两个节点的 SequenceNumber,可以减少比较的开销。胜者切换为 WINNER_WITH_SAME_KEY,败者切换为 LOSER_WITH_SAME_KEY;
- LOSER_POPPED:无需比较和转换状态,子节点获胜。
- L ocal W inner 的状态是 WINNER_POPPED ,父节点的状态是:
- LOSER_WITH_NEW_KEY:无需比较和转换状态,子节点获胜 ;
- LOSER_WITH_SAME_KEY:无需比较,父节点获胜并将状态切换为 WINNER_WITH_SAME_KEY,子节点的状态切换为 LOSER_POPPED ;
- LOSER_POPPED: 无需比较和转换状态,子节点获胜。
-
3.4 优化
四、算法证明
五、性能收益
- 测试环境 : Docker 镜像使用 A pache/ F link :1.16.1-java8,CPU 配置 4 核,内存配置 8G,
- 测试结果 :在 U serKey 为简单类型 Integer 时,优化效果大约 10%,在 U serKey 为 128 位 String 类型的情况下,性能可以提升 30% 到 50%。
*引用
- K-way_merge_algorithm: https://en.wikipedia.org/wiki/K-way_merge_algorithm#
- Apache Paimon 官网: https://paimon.apache.org/
- Apache Paimon 钉钉交流群:10880001919
*作者信息

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
芯来科技加入 openKylin,共同推进 RISC-V 软硬件生态建设
近日,芯来科技签署openKylin社区CLA(Contributor License Agreement 贡献者许可协议),正式加入openKylin开源社区。 芯来科技成立于2018年,是国内本土专业RISC-V处理器IP及整体解决方案提供商。公司从零开始,开发出全系列国产自主的RISC-V处理器IP产品,N200、N300、N/NX/UX600、N/NX/UX900等,覆盖从低功耗到高性能的各种应用场景。并且和重量级的行业客户在众多应用领域落地量产,遍及5G通信、工业控制、人工智能、汽车电子、物联网、存储、MCU、网络安全等多个领域。 在加入openKylin开源社区后,芯来科技将积极推进openKylin操作系统在RISC-V处理器的应用落地,联动openKylin(开放麒麟)社区共同促进RISC-V软硬件生态繁荣发展。 社区会员持续招募中 目前,openKylin社区会员招募正在火热进行中,欢迎更多企业伙伴加入,携手共建,打造桌面操作系统顶级社区,推动国产操作系统产业生态健康发展。详情可查看:【开源聚力,共创未来 | openKylin(开放麒麟)社区会员招募火热进行中!】 ...
- 下一篇
云原生大起底,GOTC 2023 Cloud Native Summit 来了
全球开源技术峰会(Global Open-source Technology Conference,简称 GOTC)是由开放原子开源基金会、 Linux 基金会亚太区、上海浦东软件园和开源中国联合发起的,面向全球开发者的一场盛大开源技术盛宴。 GOTC 2023 将于 5 月 27 日至 28 日在上海张江科学会堂召开。大会将以行业展览、主题发言、特别论坛、分论坛的形式展现,与会者将一起探讨元宇宙、3D 与游戏、eBPF、Web3.0、区块链等热门技术主题,以及开源社区、AIGC、汽车软件、AI 编程、开源教育培训、云原生等热门话题,探讨开源未来,助力开源发展。 其中,Cloud Native Summit 由 CNCF 中国区总监、LF 亚太区策略总监、Hyperledger 中国区策略总监 Keith Chan 担任出品人,将于 5 月 28 日举行。GOTC 2023 报名通道现已开启: https://www.bagevent.com/event/8387611 。 亮点: 云原生技术的实践与思考 Kubernetes、Istio、Volcano、WebAssembly ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Mario游戏-低调大师作品