当前位置: 代码网 > it编程>数据库>Mysql > 关于Flink的旁路缓存与异步操作

关于Flink的旁路缓存与异步操作

2024年07月31日 Mysql 我要评论
将数据库中的数据,比较经常访问的数据,保存起来,以减少和硬盘数据库的交互比如: 我们使用mysql时 经常查询一个表 , 而这个表又一般不会变化,就可以放在内存中,查找时直接对内存进行查找,而不需要再和mysql交互。

1. 旁路缓存

1. 什么是旁路缓存?

将数据库中的数据,比较经常访问的数据,保存起来,以减少和硬盘数据库的交互
比如: 我们使用mysql时 经常查询一个表 , 而这个表又一般不会变化,就可以放在内存中,查找时直接对内存进行查找,而不需要再和mysql交互

2. 旁路缓存例子使用

dim层使用的是hbase存储,因为dim层可能会出现大表,出现数据量过大,所以存储到磁盘合适,使用hbase
而dwd的连接, dwd是从kafka读取ods的数据,并且存入kafka.
因为dwd表是由ods表与dim表关联,所以需要经常和dim互动,互动的话,需要经常传输数据,而从磁盘到内存,显然比不过直接从内存中读取来的快,所以这里使用redis进行操作.
旁路缓存的步骤:

  1. 从缓存中查找数据 ,查找到 ,缓存命中, 结束, 查找不到,继续2
  2. 从dim(或者说磁盘数据库)中查找数据,

但是要注意,如果磁盘数据库中的数据发生变化,就需要将缓存的数据直接清除掉,
在这里插入图片描述

同时,也要给缓存设置保存时间,不然保存过多就没有意义了

2.异步操作(异步io)

https://nightlies.apache.org/flink/flink-docs-release-1.18/zh/docs/dev/datastream/operators/asyncio/

1. 同步与异步

同步就是,第二个任务必须等待第一个任务做完,也就是说,流水线
异步 两个任务同时做,不互相牵扯
例子: 饭店点餐:
同步: 只有一个服务员,点餐由服务员来登记,每个餐桌必须按顺序等服务员来记录
异步: 扫码点餐,互相不影响.

2.异步的实现

flink官方为我们提供了java方法richasyncfunction,主要方法是invoke,
在这里插入图片描述
这里学习了一个博主的思路
https://blog.csdn.net/w306026355/article/details/109707269

1.completablefuture

1. 创建异步编排对象
  1. 有返回值
public static <u> completablefuture<u> supplyasync(supplier<u> supplier);
public static <u> completablefuture<u> supplyasync(supplier<u> supplier, executor executor);

2.无返回值

public static completablefuture<void> runasync(runnable runnable);
public static completablefuture<void> runasync(runnable runnable, executor executor);

2.后续的串行方法

then 表示是异步的串行方法,
run 表示 无参
accept 有参
apply 有参 有返回值
而async表示这个方法执行的任务最终还是异步

// 使线程串行执行,无入参,无返回值
public completablefuture<void> thenrun(runnable action);
public completablefuture<void> thenrunasync(runnable action);
public completablefuture<void> thenrunasync(runnable action, executor executor);

// 使线程串行执行,有入参,无返回值
public completablefuture<void> thenaccept(consumer<? super t> action);
public completablefuture<void> thenacceptasync(consumer<? super t> action);
public completablefuture<void> thenacceptasync(consumer<? super t> action, executor executor);

// 使线程串行执行,有入参,有返回值
public <u> completablefuture<u> thenapply(function<? super t,? extends u> fn);
public <u> completablefuture<u> thenapplyasync(function<? super t,? extends u> fn);
public <u> completablefuture<u> thenapplyasync(function<? super t,? extends u> fn, executor executor);
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com