AntDB-M设计之CheckPoint

news/2024/5/10 2:24:07/文章来源:https://blog.csdn.net/weixin_44518445/article/details/127515101

1.引    言

数据库服务能力提升是一项系统性的工程,在不同的应用场景下,用户对于数据库各项能力的关注点也不同,如:读写延迟、吞吐量、扩展性、可靠性、可用性等等。国内不少数据库系统通过系统架构优化、硬件设备升级等方式,来解决性能的问题,但随着集群规模的逐渐扩大,对系统健壮性的要求也越来越高。

本文主要介绍AntDB-M(AntDB内存引擎)如何通过CheckPoint等技术研发设计,简化业务系统架构,提升数据服务质量,从而提升整体数据库系统的可靠性与可用性。

2.功能概述

CheckPoint的设计目标是在不影响业务的前提下,对数据库的数据做一份快照,该快照可用于服务的快速恢复。AntDB数据库对于CheckPoint的设计原则是高效、简洁。

AntDB-M的CheckPoint功能包括随时、定时触发。一次触发会对所有表都进行CheckPoint。CheckPoint不允许并发进行,若前者还未完成,则新发起的请求会失败。如果表比较多,可以开启并发处理,并发量最大为表个数。成功后,AntDB-M会在指定目录输出两类文件:1)数据文件,每个表一个;2)一个表清单文件,包含发起CheckPoint的事务编号,以及所有表清单。

我们也可以使用CheckPoint文件进行数据库的快速加载。表清单文件可以编辑,用来选择需要加载的表。
 

图1:功能简述


 

3.设计实现

下文介绍CheckPoint是如何实现其设计目标以及设计要求的。


1.不影响业务
 

CheckPoint在执行过程中,不能阻塞数据库服务的正常访问。这意味着在CheckPoint的过程中,数据是一直在发生变化的。为了不阻塞对数据的修改,保障导出数据的一致性,我们在此引入CheckPoint状态和表缓存来解决这个问题。
 

图2:设计实现-不影响业务

(1)CheckPoint状态

AntDB-M与CheckPoint的相关状态分为三个:1)数据导出;2)导出文件处理;3)导出完成。状态“1-数据导出”代表正在将内存中的数据导出到文件。这个状态对于保障导出数据的一致性非常重要。后文将介绍如何参考该状态对数据一致性进行保障。

(2)AntDB-M表缓存

AntDB-M在数据管理上分为两部分:1)表缓存;2)表数据(含表元数据)。通常情况下,所有对数据的修改只会修改“2-表数据”。表缓存只在状态为“1-数据导出”时进行AntDB-M服务的CheckPoint。
 

(3)导出过程及数据一致性保障

AntDB-M按如下步骤,来实现CheckPoint的导出,并确保导出数据的一致性。

  • 状态设置 

在进行CheckPoint时,我们可以先将AntDB-M服务的CheckPoint状态设置为“1-数据导出”。一旦进入该状态,AntDB-M将开始对表缓存进行特殊处理。

  • 未提交事务数据备份 

进入“1-数据导出”状态后,我们需在开始导出数据前,将当前所有未提交事务相关记录的原始数据保存一份到表缓存中。表缓存中的这份数据能够确保未提交事务的数据不会被导出,这是保障数据一致性的措施之一。

  • 表缓存修改 

一旦进入CheckPoint的“1-数据导出”状态,所有数据的增、删、改将同时修改表缓存和表数据。操作类型不同,表缓存的动作也不同,但表数据的操作逻辑保持不变。
 

-insert:在表缓存中记录下新插入数据的记录ID(后文会介绍记录ID)。

-delete:在表缓存中记录下被删除数据的记录ID,以及记录数据。

-update:在表缓存中记录下被更新数据的记录ID,以及记录数据。对于多次更新,只有第一次更新进入表缓存。
 

(4)导出表数据到文件

在表数据的处理上,我们将除了CheckPoint过程中新创建的数据块,其余都全量导出到文件中。由于服务是不阻塞等待的,所以在这个过程中表数据会被持续更新。在此,我们并不关心数据块中的数据是否一致,数据的一致性将在后续步骤5处理。

(5)利用缓存更新文件

由前文2、3两点可知,在CheckPoint状态为“1-数据导出”期间,所有变更在表缓存中都有记录。在表数据导出到文件后,使用表缓存的记录更新文件,这样就保证了数据的一致性。即CheckPoint文件就是进入CheckPoint“1-数据导出”状态的时间点的一个数据快照。这里的更新可能存在随机写,但CheckPoint过程较快,随机写的数据量不大,其造成的影响基本可以忽略。
 

文件更新规则:

-insert:删除 

-update:用原记录复原
-delete:用被删除记录复原 


2.高效、简洁
CheckPoint的高效体现在两个方面:1)导出高效;2)导入高效。下文介绍实现简洁、高效的相关设计。

图3:设计实现-高效简洁


(1)全量导出

AntDB-M的CheckPoint为全量导出,与MySQL Innodb的CheckPoint有着很大的不同。下面将从4个方面来介绍为什么采取全量导出。

  • 内存开销压力 

作为一款内存数据库,AntDB-M的所有数据都存放于内存之中,不需要考虑数据消耗过多内存的问题(仅数据本身而言)。因此我们不需要因为数据占用内存而实时地考虑将数据导出到文件。

  • 高可用保障 

作为一款高可用分布式数据库,AntDB-M采用了多副本机制,因此我们可以通过多服务达到高可用的目的。数据的导出主要是为了降低服务重启时较长的加载时间以及主从数据同步时间,所以CheckPoint文件并不是高可用的主要手段。即CheckPoint文件导出不要求较高的实时性,较低的导出频率对高可用的影响不大。

  • 读写性能 

影响数据导出、导入效率的最大因素为磁盘的读写性能,磁盘采取顺序读写的效率最高。因此我们在进行数据导出、导入时,不对数据在内存、文件间做格式转换,直接进行读写的效率最高。如果做增量同步,就可能会出现频繁的随机读写、复杂的转换及文件存储空间占用等问题。这些都对效率的提升、系统的复杂度有着极大的负面影响。

  • 导出时间 

由于AntDB-M的内存结构设计非常紧凑、内存地址无关,因此数据可以不做转换地进行导出、导入。数据导出、导入的效率非常高,一次导出时间可控制在接受时间范围内。

综合以上几点,AntDB-M采取全量导出具有更大的效率、成本优势。

(2)地址无关

AntDB-M的内存结构非常紧凑,这避免了数据空间的浪费。导出的数据量,除了必要的数据存储空间,不需要额外的管理空间。另外一个实现高效的导出、导入的设计就是地址无关,这避免了在导出、导入时大量的地址映射转换。

  • 记录ID 

记录ID是内存结构中一个非常重要的设计。所有数据记录都有一个唯一的记录ID。通过对记录ID进行简单、高效的取模、取余运算即可获取到记录所在的内存地址。这使得表数据的存储可以与地址无关,确保导出、导入时不需要做地址转换。

  • 多级管理 

AntDB-M中每个表都有各自独立的表空间,每个表空间采取三级管理。其中,第一、二级均为只存在于内存中的地址空间,第三级为地址无关的数据块。在导出时,我们只需导出数据块即可。在导入时,按照内存块的顺序,我们需在内存中申请好三级内存空间,并建立三级空间之间的关系。在这部分,数据量很少,速度很快。 

由于数据块内的内容地址无关,我们在导出时将数块整体写入文件,在导入时将文件中的数据直接原样读入到对应内存数据块中即可。这样就极大提升了导出、导入效率。

  • 空闲记录 

数据块的空闲地址的管理数据也是在数据块本身上记录,不需要额外的管理单元。所有空闲记录构成一个双向链表,只需额外记录最后一个空闲位置即可。另外,我们需要对每行记录保留额外的1个字节标识当前记录状态。

通过以上设计,数据块的管理在紧凑、简洁的同时,效率也非常高。
 

图4:表空间多级管理

(3)溢出列

AntDB-M以溢出列的方式对可变长度列进行单独管理,有自己的内存空间及结构。数据块中仅保存固定长度列,以及溢出列的长度、记录ID。

溢出列的结构设计和数据块类似,同样保持多级、地址无关的设计。同时,为了节省内存和实现高效,溢出列每行长度固定,不同列长度可能不同。每行额外保留一个记录ID,当长度超过1行长度时,记录数据的下一行保存位置。

(4)索引

AntDB-M支持两种索引:1)Hash;2)Btree。CheckPoint导出时只会导出索引的元数据。数据会在内存中重新构造。

(5)CheckPoint文件结构

CheckPoint最终会将每个表单独生成一个文件,大致分为5个部分:1)表元数据;2)溢出列;2)数据块;4)列元数据;5)索引。
 

图5:CheckPoint导出文件结构

4.约束及推荐

图6:约束及推荐


1.DDL限制


CheckPoint期间禁止进行DDL变更。DDL会造成表元数据、以及数据的变更,极大地影响到内存开销以及系统的复杂度。而DDL操作频率和CheckPoint频率一般不高且时间可控,因此可以对DDL操作进行限制。限制DDL操作不会对业务系统产生较大的影响。


2.存储要求


数据的导出、导入对磁盘有较高的读、写性能要求。因此我们需要较高性能的磁盘,最好是SSD盘。

3.导出错峰


假定磁盘写入速度400M/S,那么100G的数据导出大概需要256秒。因此我们在一台主机上部署多个服务时,可以错峰导出,避免单个服务导出时间过长。数据导出过程会有一份数据放入表缓存,避免造成内存压力。

关于AntDB数据库

AntDB数据库始于2008年,在运营商的核心系统上,为全国24个省份的10亿多用户提供在线服务,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔通信核心交易,保障系统持续稳定运行近十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_218381.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

教程:使用Jmeter对带token的接口进行压测

最近在研究并发,用到了Jmeter对接口进行压力测试,记录下使用过程 一. 配置/bin下的Jmeter.properties,打开以下两项配置,一个是默认的编码,一个是默认的语言 二. 打开jmeter.bat运行,新建线程组&#xff0…

qt学习笔记6:ui实例 登录窗口布局

首先从ui布局界面去进行大致布局, 可以先把默认的一些移除掉,变成一个大的空窗口 用户窗口,一般都得有一个用户名和密码(用label)输入用Line edit, 再来俩按钮pushButton, 但仅仅这样是没有意义…

kafka学习(四):生产者发送消息的分区策略

Kafka为了增加系统的伸缩性(Scalability),引入了分区(Partitioning)的概念。 Kafka 中的分区机制指的是将每个主题划分成多个分区(Partition),每个分区是一组有序的消息日志。主题下的每条消息只会保存在某一个分区中,…

python 基于PHP在线音乐网站

随着时代的发展,人们的生活水平越来越高,相对应的对精神世界的追求也越来越多,而音乐一直以来一直是人们追求美好生活的象征,它不仅可以陶冶人们的情操还可以美化人们的灵魂,音乐也一直是千百年来人们不断追求的一个精神文明的产物,为了能够让更多的人找到自己喜欢的音乐,我开发…

1.3.1操作系统的运行机制和体系结构

文章目录运行机制两种指令两种状态两种程序操作系统内核内核在计算机的系统中的层次结构内核的功能时钟管理(基本功能)中断机制(基本功能)原语(基本功能)对资源的进行管理的功能运行机制 两种指令 指令和…

python基于PHP旅游网站的设计与开发

在经济高速发展的现在,人们的工作越来越繁重,生活节奏越来越快,生活工作压力也越来越大。反而留给自己休息,享受旅游生活的时间越来越少,缺少对周边旅游信息的了解,无法与兴趣一致的户外旅友进行交流。这则会导致人们会花更多的时间去寻找旅游地点,并进行路线规划,花费的时间在…

彻底理解闭包实现原理

前言 闭包对于一个长期写 Java 的开发者来说估计鲜有耳闻,我在写 Python 和 Go 之前也是没怎么了解,光这名字感觉就有点"神秘莫测",这篇文章的主要目的就是从编译器的角度来分析闭包,彻底搞懂闭包的实现原理。 函数一等公民 一门语言在实现闭包之前首先要具有的特…

工程项目部质量管理体系的控制要点分析

质量管理是施工企业风险控制的重要组成部分。本文从有序的生产过程控制,提高企业质量意识出发,结合贯彻ISO9001标准及50430规范的企业贯标工作,分阶段研究和分析施工企业工程项目部质量管理体系的控制要点。 质量是企业的生命线,…

Android实战——单元测试从吹水到实践

目录1.单元测试到底需要不需要了?开发时间紧张,不需要做单元测试了吧?开发经验丰富,不需要做单元测试了吧?或许存在一种”自动化“的测试,就不需要做单元测试了吧?2.单元测试的好处单元测试可以…

【附源码】计算机毕业设计SSM校园拍卖平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

React 状态管理器,我是这样选的

前言 我们的前端团队在一直深度使用 React ,从最早的 CRA ,到后来切换到 umijs ,从 1.x、2.x、3.x 再到现在的 4.x,其中有一点不变的,就是我们一直在使用基于 react-redux 思想的 dva 作为状态管理工具。 在状态共享这…

(附源码)计算机毕业设计SSM跨移动平台的新闻阅读应用

(附源码)计算机毕业设计SSM跨移动平台的新闻阅读应用 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目…

DM-DM DBLINK使用配置

简单介绍 DM-DM DBLINK支持3种连接方式创建,分别是:dmmal、dpi、odbc。 其中dpi、odbc属于第三方接口,dmmal属于原生接口。dpi类型dblink为新版本新添加支持,以前版本中不支持。 环境说明 (1)数据库版本…

2023届C/C++软件开发工程师校招面试常问知识点复盘Part 7

目录46、C类的成员变量初始化顺序及拓展47、强制转换类型操作符号48、const 成员函数–常成员函数与常量对象49、volatile关键字50、赫夫曼树51、前缀树46、C类的成员变量初始化顺序及拓展 注意: 1、const成员或者引用必须在成员变量初始化列表中初始化,…

git的基础指令操作

git的下载地址:https://git-scm.com/download 安装好git后 在桌面上右键即可以看到两个git的快捷方式。 需要先对git进行基本的配置,即需要配置用户名和用户邮箱 1. 打开Git Bash 2. 设置用户信息 git confifig --global user.name “zqy” git confi…

权限项目 1_搭建环境

硅谷通用权限系统:搭建环境 一、项目介绍 1、介绍 权限管理是所有后台系统都会涉及的一个重要组成部分,而权限管理的核心流程是相似的,如果每个后台单独开发一套权限管理系统,就是重复造轮子,是人力的极大浪费&…

第 1 章之:二叉树特性

声明:文章为博主原创,转载请联系博主。文章若有错误和疏漏之处,还望大家不吝赐教! 第一章:数据结构与算法基础--------------------------- 本章重点内容为&#xff1…

基于麻雀算法二维oust图像分割算法研究附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

期刊|认知科学领域期刊《Trends in Cognitive Sciences》

Hello,大家好! 这里是壹脑云科研圈,我是Ns~ 今天我们介绍的是爱思维尔(Elsevier)旗下细胞出版社(cell press)发行的关于认知科学领域的期刊:Trends in Cognitive Sciences。 1 期刊简介 基本…

mysql之给字符串加索引

文章目录前言长字段加索引前缀索引对覆盖索引的影响合理的使用前缀索引总结前言 之前的文章介绍了主键索引和唯一索引的区别,也介绍了主键索引和唯一索引在不同业务场景下的区别。今天我们继续介绍,普通索引怎么合理的使用。 长字段加索引 这里我们就…