时间回溯 | 如何按需极速查询数据库实例的历史数据?

vicsue
发布于 2022-12-27 11:19
浏览
0收藏

01日常数据管理中的痛点

最近用户小明遇到了问题,他在一次发布之后,由于程序bug,导致核心库的数据出错,急需订正,这个时候小明希望能够通过某种方式能够查到这个库在变更之前的数据,来进行变更的溯源。最后小明通过下载备份集并本地导入的方式查到了数据,但是整体耗费的时间很长,耽误了问题发生后的最佳止血时间。

事实上,现在很多用户使用在线库进行日常的自助取数,数据分析,在这个过程中,我们还遇到了很多其他问题:

● 在线库查询的速度慢,对在线业务稳定性有影响。 业务团队往往有在线去统计数据,做一些简单数据分析的需求,通常来说,基于本身的技术栈以及对数据的了解,业务同学往往会选择在在线库上去查找数据,但是直接在线上库的查询数据会有很多弊端:

 进行数据分析的需求往往是OLAP类的数据需求,一个分析类的查询有可能会跨越多张表进行查询,或者无法很好的命中在线库的索引,一个查询有可能会很大,吃掉在线实例过多的资源,甚至有可能影响业务库的稳定性;

 进行分析查询SQL往往运行时间较长,有可能会被线上库判定为慢SQL并杀掉,导致无法跑出结果。

● 无法分析历史数据。在很多情况下,业务团队往往需要通过去查询在线库的历史数据来对数据进行分析,比如查询历史某一时刻的不同品类下的商品规模,不同时期组织架构下的人数等等,此时如果通过数据库Created字段去区分可能会出现数据有变更,比如可能已经做了组织架构的调整等,导致无法准确获取到数据。

● 有数据漂移的问题。在企业有了成熟的数据仓库之后,业务团队需要定时将业务库中的数据抽取到数据仓库中,如果直接从在线库抽取则有可能出现数据漂移的问题。

数据库备份DBS团队深耕备份领域,负责了整个阿里云各种数据库的备份,沉淀了PB级的用户历史时刻的备份数据,备份团队能否提供一种方便可靠的方式,让用户能够解决上述的问题呢?

02如何解决上述问题

结合上述对需求的分析,我们抽象出了两类用户在使用业务数据库进行业务分析时常见case,并尝试解决。

 在线库的查询需求 

在不影响在线库稳定性的情况下快速获得数据

用户对于在线库的查询需求的主要在于查询性能上,用于分析类的需求一般遍历数据较多,无法很好命中索引,所以会有查询慢,甚至还会影响到在线库的稳定性。

那么如果我们通过备份恢复的能力,快速的从备份中恢复出一个按量付费临时实例来供业务方查询,这样就能完美的将OLAP的需求和OLTP的需求隔离出来,解决分析查询可能会对数据库造成影响或者被慢SQL杀掉的问题。

时间回溯 | 如何按需极速查询数据库实例的历史数据?-鸿蒙开发者社区

甚至更进一步,我们能否一次性很快的克隆出来多个临时实例出来,通过大数据的手段来加速查询,解决查询慢的问题,提升用户的查询体验。

时间回溯 | 如何按需极速查询数据库实例的历史数据?-鸿蒙开发者社区

 历史数据的查询需求 

能够快速查询历史某个时间点的数据

上述有提到过,用户在很多情况下,可能需要去查询各个历史时间点的数据,比如如下情况:

▶︎ 某用户由于运营的误操作导致关键业务库表数据的部分字段被改脏,希望能够通过查询这张业务表的历史数据,找回被更改的数据;

▶︎某用户最近一段时间各个不同部门下的用户量,不同品类下商品量/素材量的变化,但是由于用户的部门,商品的品类是在不断变化的,所以如果在当前库通过Created的方式去统计,可能结果会和事实有偏差;

▶︎ 由于业务库中数据不断变化,在做年度报告的时候,无法准确捞到年底准确时间点的数据,并且多次查询的结果由于业务库数据变化可能会不一致;

▶︎ 在从业务库抽取到数仓的过程中,可能会出现数据漂移的问题。

综上,我们认为,可以基于当前数据库备份的能力,拉起一个某时刻历史时刻的临时实例,让用户精确获取到历史某指定时间点的数据,进行数据的订正和查询。

时间回溯 | 如何按需极速查询数据库实例的历史数据?-鸿蒙开发者社区

甚至,针对用户的分析场景,可以提供AS OF语义,让用户通过单个SQL能拉到历史数据的变化趋势。

时间回溯 | 如何按需极速查询数据库实例的历史数据?-鸿蒙开发者社区

综上,我们可以通过当前阿里云的数据库备份的Point-in-time recovery (PITR)以及快速恢复的能力,提供用户可以按需使用,用时创建,用后释放的计算资源,并使用大数据的技术来做数据的merge和分析。来解决用户进行数据分析过程中的在种种问题。

03备份数据查询功能

基于上述的痛点及解决方案,阿里云数据库备份DBS团队联合数据管理DMS团队,共同推出了“备份数据查询”功能,可拉起历史时刻的计算资源,供用户查询和分析。功能有如下特性:

● 秒级: 利用云盘秒级挂载以及本地盘CDM的能力可以很快的拉起临时实例。

● 按需:仅在有需要时拉起,日常不会有资源的浪费。

● 自动释放:DBS会管理所有拉起实例的生命周期,在实例没有40分钟没有查询后自动释放。

基于上述功能,用户可快速低成本地回溯到实例历史时刻,进行对应的查询和分析。(点击文末阅读原文,了解备份数据查询更多内容)

如果你是RDS的用户,你可以看到如下的全量备份时间点列表:


时间回溯 | 如何按需极速查询数据库实例的历史数据?-鸿蒙开发者社区

登录DMS数据管理服务,登录实例。

https://dms.aliyun.com/?accounttraceid=4c6302ad77ee4e4a9bd8bdedfc36865dbdef

时间回溯 | 如何按需极速查询数据库实例的历史数据?-鸿蒙开发者社区

即可看到左侧备份数据查询tab,点开tab之后可以看到实例所有的全量备份时间点,点击备份时间点均即可在DMS控制台页面上发起查询。

时间回溯 | 如何按需极速查询数据库实例的历史数据?-鸿蒙开发者社区

后续会支持直接从RDS页面跳转发起查询,目前,备份数据查询功能仅支持MySQL引擎,后续会逐步推广到其他引擎,并支持历史任意时刻的查询能力。

04举个栗子

小明是国内某电商平台的用户,其使用了阿里云的数据库的备份功能,11月8日上午,因为运营动作导致类目标签数据被误改,现在希望找回这些被误修改的数据。

小明通过RDS控制台备份数据页面查看实例备份,发现了在11月7号晚上11点有一个备份集,通过查询这个备份集的数据即可找回数据:


时间回溯 | 如何按需极速查询数据库实例的历史数据?-鸿蒙开发者社区

小明通过DMS控制台登录了数据库,并在控制台的左侧找到了备份数据查询,并选择了在修改之前最近的一个备份集(11月7日晚上11点)。

双击展开备份集,成功"穿越"回了昨天,并通过id找到了昨天被误修改的历史数据。


时间回溯 | 如何按需极速查询数据库实例的历史数据?-鸿蒙开发者社区

通过备份查询查找到历史的标签信息。

随后用户在控制台上完成了历史数据的回溯并订正了现在的库。


时间回溯 | 如何按需极速查询数据库实例的历史数据?-鸿蒙开发者社区

成功消弭了一场灾难。\^o^/

05未来展望

未来数据库备份DBS团队及数据管理团队会进一步挖掘备份数据的使用价值,在闪回,数据变更轨迹,数据订正,历史数据分析等领域为用户提供更多的可能。


本文转载自公众号:阿里云数据库

分类
标签
已于2022-12-27 11:20:18修改
收藏
回复
举报
回复
    相关推荐