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

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,企业版 4核16GB
推荐场景:
HTAP混合负载
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 未来数据库备份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 /  

相关文章
|
10天前
|
SQL 数据库 微服务
微服务03,最简单的Demo,我们每个服务不能重复开发相同业务,微服务数据独立,不要访问其他微服务的数据库,微服务的特点之一是提供不能功能的数据库互相分割,微服务需要根据业务模块拆分,做到单一职责,
微服务03,最简单的Demo,我们每个服务不能重复开发相同业务,微服务数据独立,不要访问其他微服务的数据库,微服务的特点之一是提供不能功能的数据库互相分割,微服务需要根据业务模块拆分,做到单一职责,
|
6天前
|
SQL 数据库 Python
Django框架数据库ORM查询操作(6)
【7月更文挑战第6天】```markdown Django ORM常用数据库操作:1) 查询所有数据2) 根据ID查询 3) 精确查询 4) 分页排序
12 1
|
10天前
|
SQL 自然语言处理 网络协议
【Linux开发实战指南】基于TCP、进程数据结构与SQL数据库:构建在线云词典系统(含注册、登录、查询、历史记录管理功能及源码分享)
TCP(Transmission Control Protocol)连接是互联网上最常用的一种面向连接、可靠的、基于字节流的传输层通信协议。建立TCP连接需要经过著名的“三次握手”过程: 1. SYN(同步序列编号):客户端发送一个SYN包给服务器,并进入SYN_SEND状态,等待服务器确认。 2. SYN-ACK:服务器收到SYN包后,回应一个SYN-ACK(SYN+ACKnowledgment)包,告诉客户端其接收到了请求,并同意建立连接,此时服务器进入SYN_RECV状态。 3. ACK(确认字符):客户端收到服务器的SYN-ACK包后,发送一个ACK包给服务器,确认收到了服务器的确
|
12天前
|
关系型数据库 MySQL 数据库
关系型数据库mysql数据增量恢复
【7月更文挑战第3天】
126 2
|
12天前
|
关系型数据库 MySQL Shell
关系型数据库mysql数据完全恢复
【7月更文挑战第3天】
83 2
|
11天前
|
前端开发 数据库
文本----富文本数据如何存入到数据库当中,解决方法,看其他大佬写的文章
文本----富文本数据如何存入到数据库当中,解决方法,看其他大佬写的文章
文本----富文本数据如何存入到数据库当中,解决方法,看其他大佬写的文章
|
9天前
|
SQL 存储 数据库
MSSQL数据库性能调优实战:索引、查询与并发控制的深度剖析
在数据库管理领域,Microsoft SQL Server(MSSQL)的性能调优是保障业务高效运行的核心任务
|
10天前
|
关系型数据库 MySQL 数据库
MybatisPlus添加数据数据库没有数据,数据消失,使用Navicate看不到数据,Navicate中Mysql的数据与idea的数据不一定同步,Navicate与idea的数据库同步,其实有分页
MybatisPlus添加数据数据库没有数据,数据消失,使用Navicate看不到数据,Navicate中Mysql的数据与idea的数据不一定同步,Navicate与idea的数据库同步,其实有分页
|
11天前
|
SQL 关系型数据库 MySQL
Navicate,数据库,Mysql,改表,4月29日Finished - Unsuccessfully,导出数据不妨,右键,备份一下Mysql数据库的内容,你想导入和导出数据不如,用查询的方式去做
Navicate,数据库,Mysql,改表,4月29日Finished - Unsuccessfully,导出数据不妨,右键,备份一下Mysql数据库的内容,你想导入和导出数据不如,用查询的方式去做
|
11天前
|
小程序 数据库
【微信小程序-原生开发】实用教程15 - 列表的排序、搜索(含云数据库常用查询条件的使用方法,t-search 组件的使用)
【微信小程序-原生开发】实用教程15 - 列表的排序、搜索(含云数据库常用查询条件的使用方法,t-search 组件的使用)
10 0