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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 未来数据库备份DBS团队及数据管理团队会进一步挖掘备份数据的使用价值,在闪回,数据变更轨迹,数据订正,历史数据分析等领域为用户提供更多的可能。

01日常数据管理中的痛点


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


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

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


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

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


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


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


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

02如何解决上述问题


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


在线库的查询需求

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


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


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

1.JPG

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

2.JPG


历史数据的查询需求

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


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


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

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

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

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


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

3.JPG

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

4.JPG

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

03备份数据查询功能


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


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

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

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


基于上述功能,用户可快速低成本地回溯到实例历史时刻,进行对应的查询和分析。(点击文末阅读原文,了解备份数据查询更多内容)如果你是RDS的用户,你可以看到如下的全量备份时间点列表:

5.png

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

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

6.JPG

即可看到左侧备份数据查询tab,点开tab之后可以看到实例所有的全量备份时间点,点击备份时间点均即可在DMS控制台页面上发起查询。后续会支持直接从RDS页面跳转发起查询,目前,备份数据查询功能仅支持MySQL引擎,后续会逐步推广到其他引擎,并支持历史任意时刻的查询能力。


04举个栗子


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

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

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

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

7.png

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

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

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


05未来展望


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


 / End /  

相关文章
|
21天前
|
关系型数据库 MySQL 数据库
轻松入门MySQL:精准查询,巧用WHERE与HAVING,数据库查询如虎添翼(7)
轻松入门MySQL:精准查询,巧用WHERE与HAVING,数据库查询如虎添翼(7)
|
1月前
|
存储 Oracle 关系型数据库
Dataphin常见问题之想要周期执行任务如何解决
Dataphin是阿里云提供的一站式数据处理服务,旨在帮助企业构建一体化的智能数据处理平台。Dataphin整合了数据建模、数据处理、数据开发、数据服务等多个功能,支持企业更高效地进行数据治理和分析。
|
1月前
|
SQL 缓存 PHP
PHP技术探究:优化数据库查询效率的实用方法
本文将深入探讨PHP中优化数据库查询效率的实用方法,包括索引优化、SQL语句优化以及缓存机制的应用。通过合理的优化策略和技巧,可以显著提升系统性能,提高用户体验,是PHP开发者不容忽视的重要议题。
|
1月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
65 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
1月前
|
SQL 存储 JSON
阿里云数据库 SelectDB 内核 Apache Doris 2.1.0 版本发布:开箱盲测性能大幅优化,复杂查询性能提升 100%
亲爱的社区小伙伴们,Apache Doris 2.1.0 版本已于 2024 年 3 月 8 日正式发布,新版本开箱盲测性能大幅优化,在复杂查询性能方面提升100%,新增Arrow Flight接口加速数据读取千倍,支持半结构化数据类型与分析函数。异步多表物化视图优化查询并助力仓库分层建模。引入自增列、自动分区等存储优化,提升实时写入效率。Workload Group 资源隔离强化及运行时监控功能升级,保障多负载场景下的稳定性。新版本已经上线,欢迎大家下载使用!
阿里云数据库 SelectDB 内核 Apache Doris 2.1.0 版本发布:开箱盲测性能大幅优化,复杂查询性能提升 100%
|
1月前
|
存储 NoSQL Redis
【Redis】利用Redis List实现数据库分页快速查询
【Redis】利用Redis List实现数据库分页快速查询
98 0
|
1月前
|
SQL 开发框架 JavaScript
在 Vue 中进行数据持久化时,有哪些常用的数据库框架?
在 Vue 中进行数据持久化时,有哪些常用的数据库框架?
49 3
|
1月前
|
SQL Java 数据库连接
从来没想到我们会扒拉nohup文件去找我们想要的数据,然后往数据库中添加。。。...
从来没想到我们会扒拉nohup文件去找我们想要的数据,然后往数据库中添加。。。...
17 0
|
6天前
|
SQL 关系型数据库 MySQL
mysql 数据库查询 查询字段用逗号隔开 关联另一个表并显示
mysql 数据库查询 查询字段用逗号隔开 关联另一个表并显示
17 2
|
7天前
|
存储 关系型数据库 MySQL
如何处理爬取到的数据,例如存储到数据库或文件中?
处理爬取的数据,可存储为txt、csv(适合表格数据)或json(适合结构化数据)文件。若需存储大量数据并执行复杂查询,可选择关系型(如MySQL)或非关系型(如MongoDB)数据库。以MySQL为例,需安装数据库和Python的pymysql库,创建数据库和表,然后编写Python代码进行数据操作。选择存储方式应考虑数据类型、数量及后续处理需求。
14 1