hbase 查询设置超时_flink维表关联系列之Hbase维表关联:LRU策略

本文介绍了在Flink中使用LRU策略进行Hbase维表关联的方法,包括LinkedHashMap和Guava Cache两种实现方式。LRU缓存能处理大数据量的维表,并通过设置超时时间TTL确保数据及时更新。内容涵盖了异步读取Hbase的实现思路,以及相关依赖和注意事项。
摘要由CSDN通过智能技术生成

点击蓝字

27afe26a5af0f593ad2c3f86977da225.png

关注~~

维表关联系列目录:
一、维表服务与Flink异步IO
二、Mysql维表关联:全量加载
三、Hbase维表关联:LRU策略
四、Redis维表关联:实时查询
五、kafka维表关联:广播方式
六、自定义异步查询

LRU

LRU(Least Recently Used),最近最少使用缓存淘汰算法,认为最近访问过的数据在将来被访问的概率也比较大,当内存达到上限去淘汰那些最近访问较少的数据。

在Flink中做维表关联时,如果维表的数据比较大,无法一次性全部加载到内存中,而在业务上也允许一定数据的延时,那么就可以使用LRU策略加载维表数据。但是如果一条维表数据一直都被缓存命中,这条数据永远都不会被淘汰,这时维表的数据已经发生改变,那么将会在很长时间或者永远都无法更新这条改变,所以需要设置缓存超时时间TTL,当缓存时间超过ttl,会强制性使其失效重新从外部加载进来。接下来介绍两种比较常见的LRU使用:

  1. LinkedHashMapLinkedHashMap是双向链表+hash表的结构,普通的hash表访问是没有顺序的,通过加上元素之间的指向关系保证元素之间的顺序,默认是按照插入顺序的,插入是链表尾部,取数据是链表头部,也就是访问的顺序与插入的顺序是一致的。要想其具有LRU特性,那么就将其改为访问顺序,插入还是在链表尾部,但是数据访问会将其移动达到链表的尾部,那么最近插入或者访问的数据永远都在链表尾部,被访问较少的数据就在链表的头部,给 LinkedHashMap设置一个大小,当数据大小超过该值,就直接从链表头部移除数据。LinkedHashMap本身不具有ttl功能,就是无法知晓数据是否过期,可以通过给数据封装一个时间字段insertTimestamp,表示数据加载到内存的时间,当这条记录被命中,首先判断当前时间currentTimestamp与insertTimestamp差值是否达到ttl, 如果达到了就重新从外部存储中查询加载到内存中。

  2. guava Cachegoogle guava下面提供了Cache缓存模块,轻量级,适合做本地缓存,能够做到以下几点:a. 可配置本地缓存大小b. 可配置缓存过期时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值