首页 > 其他分享 >AntDB设计之CheckPoint——设计实现

AntDB设计之CheckPoint——设计实现

时间:2024-01-07 13:07:23浏览次数:27  
标签:CheckPoint 缓存 记录 导出 AntDB 设计 数据


3.设计实现

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

1.不影响业务

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

AntDB设计之CheckPoint——设计实现_mybatis

图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)导入高效。下文介绍实现简洁、高效的相关设计。

AntDB设计之CheckPoint——设计实现_antdb_02

图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个字节标识当前记录状态。

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

AntDB设计之CheckPoint——设计实现_java_03

图4:表空间多级管理

(3)溢出列

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

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

(4)索引

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

(5)CheckPoint文件结构

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

标签:CheckPoint,缓存,记录,导出,AntDB,设计,数据
From: https://blog.51cto.com/u_15348398/9133943

相关文章

  • 亚信安慧AntDB数据库引领数字时代:数字驱动创新峰会主旨演讲深度解析
    近日,庄严肃穆的数字驱动创新峰会在中国首都北京隆重召开,聚焦于探讨数据经济的创新前沿。在此次盛会中,备受瞩目的亚信安慧AntDB数据库荣幸受邀参与,该数据库的副总裁张桦以其深刻见解和卓越经验发表了引人瞩目的主旨演讲。图1:亚信安慧副总裁张桦发表演讲AntDB数据库一直专注于企业级......
  • 2023-2024-1 20231419 《计算机基础与程序设计》课程总结
    2023-2024-120231419《计算机基础与程序设计》课程总结每周作业链接汇总第零周:(自我介绍)第一周:第二周:第三周:第四周:第五周:第六周:第七周:第八周:第九周:第十周:第十一周:第十二周:第十三周:第十四周:实验gcc测试、gdb测试罗马数字转阿拉伯数字、BASE64编......
  • 基于SSM的旅行社管理系统的设计与实现
    现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本旅行社管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍......
  • 基于SSM的养老院老人健康监护平台设计与实现
    一、选题依据当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的大环境让那些止步不前,不接受信息改革带来的信息技术的企业随时面临被淘汰,被取代的风险。所以当今,各个行......
  • 基于SSM的开心农家乐系统的设计与实现
    现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本开心农家乐系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍......
  • 基于SSM的生活缴费系统及相关安全技术的设计与实现
    互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对生活缴费信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用生活缴费系统可以有效管理,使信息管理能够更加......
  • 【设计模式】单例模式——单例模式的懒汉式和DCL式实现
    懒汉式为了解决饿汉式单例带来的内存浪费问题,出现了懒汉式单例的写法,代码如下:publicclassSingleton{privatestaticSingletoninstance=null;privateSingleton(){}publicstaticSingletongetInstance(){if(instance==null){insta......
  • 设计模式Java实战,彻底学会
    这是全网最强的Java设计模式实战教程。此教程用实际项目场景,结合SpringBoot,让你真正掌握设计模式。网址是:Java设计模式实战专栏介绍-自学精灵(也可以百度搜索“自学精灵”)。本设计模式专栏的威力用Java实战来介绍常用的设计模式,让你真正掌握设计模式。用项目实际场景进行设计模式......
  • 【面向对象设计的七大原则】
    (文章目录)前言面向对象设计(OOD)是现代软件工程中的核心,其核心思想在于通过抽象化实体的特征和行为来模拟现实世界,这种方法不仅仅是一种编程范式,更是一种设计哲学。在编程领域,它帮助开发者通过类和对象的组织和交互,来构建出模块化、灵活且易于维护的软件系统。而面向对象设计的七......
  • 基于ssm的神马物流设计与实现
    本神马物流管理系统设计目标是实现神马物流的信息化管理,提高管理效率,使得神马物流管理作规范化、科学化、高效化。本文重点阐述了神马物流管理系统的开发过程,以实际运用为开发背景,基于SSM+Vue框架,运用了Java编程语言和MYSQL数据库进行开发,充分保证系统的安全性和稳定性。本系统界......