Hudi 索引的选择策略

14 篇文章 1 订阅

场景一:事实表更新

许多公司把大量的交易型数据存储在 NoSQL 的表中,例如,股票交易,电商订单数据等。这些表近期的数据(热数据)通常都会有大量的更新,而旧的数据(冷数据)只有很少量的更新。换句话说,大多数的更新都会落到最新的分区,而只有少量的数据会落到旧的分区。

这种场景,BLOOM 索引可以很好的适配,因为采用它可以裁剪掉大量的分区。存储数据时如果能够对 key 进行排序,通过区间裁剪,查找时也可以较少数据文件的扫描。Hudi 通过key的区间构造区间树,使得在update/delete 的数据时能更高效的过滤掉不匹配的文件。

在这里插入图片描述

场景2: 事件数据去重

事件流数据随处可见,来自 Kafka 或者类似消息系统的数据通常都比事实表要大10-100倍,而“时间”对于事件数据来说是一等公民,如,IoT 事件流,点击流,广告流等。由于这些数据大多是追加型的,插入和更新只会落入到最新的几个分区。在端到端的管道中,重复的事件数据是常见的,在存储到数据湖前进行去重是一个常见的需求。

想要以非常低的代价解决这类问题是非常具有挑战性的。例如,我们可以采用 HBase 索引来去重,但是随着数据量的的增加,索引的存储成本也会线性的增加,甚至达到令人望而却步的昂贵开销。相反,带有区间裁剪的 BLOOM 索引 是更优的方案。因为“时间”是事件数据的一等公民,采用 event_timestamp + event_id 来作为 key, 随着数据的插入,得到的是一连串单调递增的 key 。对于一个event_id,即使在最新的分区也能过滤掉大量的文件,而只取出 event_timestamp 是最大的数据。

在这里插入图片描述

场景3: 维度表的随机 update/delete

这种类型的表通过保存高维度的数据,如用户资料表、商户信息表。这些表的更新通常都不算很多的,但是会分布在各种不同的新旧分区上。甚至有可能还没有分区。

再这种情况,BLOOM 索引通过比较区间来裁剪数据并不能减少文件的扫描,因此不太合适。在这种随机写的场景下,更新操作会遍布所有的文件。这种情况,SIMPLE 索引会更加适用,在运营开销可以接受的情况下,也可以考虑 HBase 索引,以提高更快的查找效率。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

修破立生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值