通常,我们对数据库进行误操作后,需要把数据库 Rollback 到之前的版本。一个常用的方法就是,使用日志来进行数据库恢复。这个方法虽然强大有效,但是花费时间等成本较高。而数据库表快照(Snapshot)功能,可以在某些时间点为数据表创建快照,保护快照时间点的数据不被修改,并可根据需要快速恢复快照点数据,从而达到高效、可靠的数据备份恢复能力。

Snapshot是一个数据库或表的只读副本,它是数据库表所有数据的映射,由快照被执行的时间点来决定它的内容。由于快照是只读的,所以查询快照数据是无锁查询,会对查询速度有一定的提升。数据快照在报表方面非常有价值,快照设计最开始的目的是为了报表服务。比如,要得到2021的资产负债表,需要数据保持在2021年12月31日零点时的状态,利用快照即可实现。快照也可使用在灾难恢复中,用于将现有的数据恢复到现有的快照时间点,或者在有害数据操作声明的事件中存储个别必要的表和数据。

Part 1 - 对比备份恢复方案的优缺点

(1)数据库快照创建时非常快,恢复也比较高效。

(2)数据库快照可解决用户误操作造成的数据丢失问题,借助多副本的存储策略,也可应对单机系统故障的数据丢失问题。

(3)无法解决整个集群故障或大面积故障造成的丢失数据问题。

(4)除了数据安全保障,“备份/恢复”方案还可以实现数据的跨集群迁移,这是数据库快照方案无法实现的。

Part 2 - 快照使用限制

(1)为了减少占用存储,一个数据库或一张表限制最多只能有3个快照。

(2)为防止使用快照后出现数据不一致,当表有外键等外部约束时,无法创建快照。当表有约束:主键、UNIQUE、CHECK时可创建快照。当快照有序列时可创建快照。库创建快照:当该库的表与其他库的表有外键等外部约束时,无法创建快照。

(3)在数据库有快照时,无法增加表、删除表,ALTER表、TRUNCATE表、删除库。当表有快照时,无法删除表,ALTER表、TRUNCATE表。

(4)在恢复快照期间,该数据库或表无法有其他事务。

(5)在恢复快照时,数据表也无法有外键等引用。

(6)快照是关联到数据库、表的,因此在删除数据库、表之前,需把关联的快照删除。

图1

快照的实现主要利用了MVCC-多版本并发控制来存储KV数据,Key使用时间戳作为数据的版本号,同一Key的多个版本按照时间戳倒序排序,如图1所示;时间戳t=0的数据表示写数据的事务还未提交,数据在WriteIntent中,值是Metadata;对于多版本的数据,KaiwuDB 会定时进行清理,当快照开启时,会保护快照时间点对应的数据版本不被清理或修改,并可根据需要快速恢复快照点数据,从而实现数据快速“备份”和恢复。

2.1 快照恢复

当需要恢复快照点数据时,首先需检查要恢复的表或库是否存在外部约束,表级快照恢复只有当没有外部约束的情况下才能实现快照恢复;库级快照恢复时,如果库内的表有外部约束,需检查相关联的表是否在该数据库内,如不在同一数据库内,则无法恢复。

图2

快照恢复时,首先查找建立快照的时间点,然后需要得到要恢复表的元数据Descriptor,根据Descriptor找出所有要恢复的数据Range,构建Span,最后将Range回退到建立快照的时间点对应的版本。

图3

图4

恢复Range数据到快照时间点时,需要遍历Range内所有Key版本,利用MVCC多版本机制,根据同一Key的多个版本的时间戳与快照时间点进行比较,将数据恢复到快照时间点,主要流程为:

(1)快照点后未变化的数据,不处理

(2)快照点后新增加的数据,使用DELETE标记覆盖

(3)快照点后修改或删除的数据,使用快照前的值覆盖

恢复快照期间遇到写意图时,需清理已提交事务的写意图,未清理的需返回给上游检查写意图状态,如此事务未提交,则无法进行恢复。

2.2 快照与GC

KaiwuDB 的 GC 策略是比较数据表的过期时间与多余MVCCKey的时间戳,选出时间戳小于过期时间的Key进行清理;当建立快照时,需要在时间戳比较时,增加对快照时间的比较:

(1)第一个快照点的delete数据可删除

(2)没有快照的delete数据可删除

(3)临近快照点的delete数据不能GC,否则会访问到更旧的数据

例如,现有如下数据:

时间戳变量

说明

是否快照点

ts3day

3天前

ts2day_1

2天前-1

快照点s1

ts2day

2天前

ts30h

30小时前

ts25h_1

25小时前-1

快照点s2

ts25h

25小时前

GC过期时间点

ts2h_1

2小时前-1

ts2h

2小时前

Intent过期时间点

ts1s

1秒前

增加2个快照s1和s2,那么在GC筛选垃圾数据时就会有3个时间戳的比较,则数据表的GC示例如下:

在原有的GC逻辑中,如果最新的数据已delete并过期,那么该数据的所有Version都会被清理。但有了快照之后则不能如此操作。比如上面例子中的Key d,如果把d@ts25h_1删除,那么在查询快照2的数据时会得到d@ts2day数据,而实际上在ts25h_1时,数据已经被标记删除,客户端应该查不到数据才正确。

分布式数据库 Snapshot 快照功能实现解密相关推荐

  1. 使用Auto.js庖丁对Pro Snapshot快照加密的解密打包教程

    学业繁重,废话少说! 自从Auto.js Pro在8.7.6版本之后,引用了一种新的加密方式Snapshot快照加密之后,越来越多的开发者使用了此加密方法,也是比较推荐的一种加密方式. 目前比较安全的 ...

  2. 阳振坤:电动汽车与分布式数据库的共同命运

    作者 | 阳振坤 责编 | 田玮靖 出品 | CSDN(ID:CSDNnews) 电动汽车与分布式数据库,看似两个风马不相及的事物,其发展路径却极为雷同:两者都在较早期被发明,但都没有成为主流.21世 ...

  3. 曾被“霸凌”的两个孩子:电动汽车与分布式数据库

    作者 | 阳振坤       责编 | 田玮靖 出品 | CSDN(ID:CSDNnews) 电动汽车与分布式数据库,看似两个风马不相及的事物,其发展路径却极为雷同:两者都在较早期被发明,但都没有成为 ...

  4. Ms Sql Server 2005的数据库快照功能使用实践

    数据库快照是sql server 2005的一个新功能.Msdn上对它的定义是: 数据库快照是数据库(称为"源数据库")的只读静态视图.在创建时,每个数据库快照在事务上都与源数据库 ...

  5. 计算机三级数据库数据仓库与数据挖掘(一)、快照方式、元数据、数据仓库中数据特征、机器学习、聚类方法、分类算法、决策支持系统、表数据的粒度级、分布式数据库、

    1.在建立数据仓库的数据集成工作中,需要采用适当的策略从数据源获取变化数据.下列数据表中,一般情况下不适宜采用快照方式从业务系统获取数据的是 A.门店表.销售人员表 B.商品清单.商品类别表 C.顾客 ...

  6. 从架构特点到功能缺陷,重新认识分析型分布式数据库

    写在前面 本文是分布式数据库的总纲文章的第一部分,主要探讨分析性分布式数据库的发展和技术差异:第二部分则是交易性数据库的一些关键特性分析.Ivan开始计划的分布式数据库是不含分析场景的,所以严格来说本 ...

  7. 传承or创新 ?解密分布式数据库自研修炼之路

    一直以来,数据库的核心研发团队都十分神秘,作为隐藏在幕后的隐士高人,他们对数据库研发的心得是什么?他们又对数据库的未来发展有什么看法呢?本文就由巨杉数据库核心技术研发团队的"老司机" ...

  8. HDFS回收站、Trash机制、Trash Checkpoint、快照功能使用、通过Snapshot快照恢复数据、备份数据、HDFS快照的实现

    HDFS回收站.Trash机制.Trash Checkpoint.快照功能使用 1.回收站 回收站的功能给了我们一剂"后悔药".回收站保存了删除的文件.文件夹.图片.快捷方式等.这 ...

  9. Linux 快照 (snapshot) 原理与实践(二) 快照功能实践

    文章目录 0. 概要 1. 准备演示数据 2. 创建 snapshot-origin 目标 3. 创建 snapshot 目标 4. 验证 COW 操作 4.1 第一次写数据 4.2 第二次写数据 5 ...

  10. 昆仑分布式数据库Sequence功能及其实现机制

    昆仑分布式数据库(下文简称昆仑或者昆仑数据库)的计算节点源自PostgreSQL,因此继承了PostgreSQL的Sequence功能,本文介绍昆仑分布式数据库的Sequence的功能用法.用例和实现 ...

最新文章

  1. 配置mysql主从服务器
  2. 在CentOS 6.3 64bit上安装FTP服务器vsftpd 2.2.2
  3. Java的上溯、下溯
  4. 从某次测试过程中,得到的MySQL性能优化的建议,和定位问题的方法
  5. 黑暗城堡 最短路径生成树
  6. 纯javascript 幻灯片
  7. 使用CURL调用接口[*示例*]
  8. oracle中用户连接相关
  9. 软件加license的一种实现方法
  10. python scrapy框架基如何实现多线程_Python多线程爬图Scrapy框架爬图
  11. 平衡搜索树之红黑树(图片格式)
  12. Spring IOC 概述
  13. [UOJ386]鸽子固定器
  14. Objective-C和C++语法比较
  15. netron可以下载某一层的权重
  16. Crossbar正式进入中国存储市场
  17. python3 爬取今日头条文章(巧妙避开as,cp,_signature)
  18. 利用arcscene将shape文件拉伸后三维展示
  19. vue中inject用法
  20. Web开发之-CS架构与BS架构

热门文章

  1. latex转换pdf 出错解决: IEEEtran.cls not found
  2. 新纪录片提升全球水危机意识,8.44亿人口仍缺乏清洁饮用水
  3. 华为软件测试工程师面试题
  4. linux let s证书续期,为Let’s Encrypt颁发的SSL证书续期
  5. 涉密计算机登记目录,信息填报目录
  6. 《终结者·洛谷》第3章
  7. VMware 导入 CentOS 7
  8. 2020-01-04 23:27:24,170] WARN Connection to node -1 could not be established. Broker may not be avai
  9. 【应用案例】智能定位胸牌帮助公司提升员工幸福感
  10. 中鑫吉鼎|个人家庭储蓄理财小窍门都有哪些