文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一个接口查询关联了十几张表,响应速度太慢?怎么办?

2024-12-24 18:38

关注

 

不知道开发的同学有没有遇到过类似这样的需求:

那么此类需求要如何满足呢?我们选择了“通过 ETL 提前进行数据整合”的方案。

说到ETL,很多开发伙伴可能会有些陌生,更多的时候 ETL 是用在大数据、数据分析的相关岗位;我也是在近几年的工作过程中才接触到ETL的,现在的项目比较依赖 ETL,可以说是项目中重要的一部分。

ETL 是三个单词的缩写:

从这三个单词基本可以了解 ETL 的作用:将各个业务系统的数据,通过抽取、清洗、转换之后,将加工后的数据落地到数据库中(数据仓库);在这个过程中,ETL 可以将分散、零乱、标准不统一的数据整合到一起。

 

我接触过的项目,使用 ETL 工具的场景有这个几种:

1. 报表、BI系统:

在公司建设的初期,业务比较少,系统也比较少,一台数据库就搞定了;随着公司业务的增加,业务系统被拆成很多系统;随着数据量的继续增加,单个系统的数据增加到一定程度的时候,也做了分库分表;

这时候领导、业务人员在用数据做分析的时候,数据来源可能是多个系统的多张表,这时候企图通过一个复杂的 SQL 跑出来结果就很困难了;通常公司会建立一个数据仓库,通过 ETL 工具把数据抽取到数据仓库中,再做数据的拟合和展示。

2. 跨系统的数据加工或查询:

我们现在所在公司,业务系统有几百个,由于业务流程比较复杂,前端系统在做业务操作的时候,在正式提交交易之前,有很多业务校验;

比如要查询客户在 X 系统的交易历史,在 Y 系统的交易历史,在 Z 系统的交易历史;那么就需要分别调用 X、Y、Z 系统的接口,这个对前端系统很不友好,那么通常的解决方案是什么?

我们在 C 方案的基础上又往前做了一步,就是将落地后的数据又做了一次加工,将需要跨表关联的数据,提前关联好存入 MongoDB 中,对外提供查询服务;这样可以将多表关联查询,变成了单表查询。

 

接上文中第二个例子中的 C 方案,有些同学可能会有个疑问:数据抽取,需要抽取哪些数据呢?为什么不让这些系统把数据吐出来呢?

答案也简单,“有的时候,数据不一定能吐出来”。

MySQL 数据库往外吐数据有比较成熟的中间件,比如 Canal,它可以通过监听 Mysql 的 binlog 日志来获取数据,binlog 设置为 row 模式,能够获取到每一条新增、删除、修改的日志,同时还能获取到修改前后的数据;

其他商用数据库,比如 Oracle、DB2 等,我也查阅过相关的资料,也是有触发器机制,可以当数据发生变化的时候通知出来,比如调用一段程序,将数据发送到消息队列中,再由其他程序监听消息队列做后续处理。

不管什么类型的数据库,这种“吐数据”的方案,对于基础设施的要求都比较高,并且对原有系统有一定的侵入性;所以我们采用了对原有系统侵入性更小的方案:主动抽数据。

1. 优点

2. 缺点

 

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯