博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库同步过程中一致性和完整性的保证
阅读量:6032 次
发布时间:2019-06-20

本文共 1485 字,大约阅读时间需要 4 分钟。

同步过程,最严格的指标,第一是效率,即每秒同步条数;其次是一致性,即主库产生的数据,备库同步后是否一致;第三就是数据库同步的完整性如何保证,即当同步各个环节出现问题时,如何考虑出错处理,下面我们将分别进行讨论并进行合理性分析。

  第一、效率

  数据库同步过程主要分为三个阶段,即抽取、分析、装载。

  抽取过程主要是实时读取数据库,这部分可以作到毫秒级别间隔,所以不存在效率问题,基本上可以作到实时抽取;

  分析过程主要是分析SQL语句并把源日志转化为备库的可装载日志,这部分的主要时间是写文件时间,由于普通硬盘写入时间是50M/秒左右,故对于大交易量情况,如果每秒主库阵列产生日志量上300M/秒左右,那相比之下分析组件还是会有秒级延迟的,因为我们同步软件一般都不安装在主库,无法使用高速阵列的写入速度,所以秒级别延迟还是会产生的,但是只要不是持续高峰日志量的产生速度,再经过一段时间后数据会自行同步,如果要追求实时抽取的同时又要实时分析,那建议只能给同步服务器配置一个阵列了;

  装载过程主要是根据分析组件的结果进行备库SQL语句的装载,所以并发装载是提高效率的唯一方法,不过对于备库服务器配置不是很高的情况,建议数据库长连接的数目需要能够合理配置,因为备库有时会作为查询统计的负载分担,所以如果备库的资源有限,对于查询统计分担的效果会大打折扣。

  第二、一致性

  如何能够保证备库的数据和主库一致,这个问题如果在业务层面提出来,大家肯定没什么好的办法,一个共同的回答就是“查看备库”,用应用去连,之后检查刚刚同步的数据是正确的就可以了,不过这样的抽查很有可能检查不出来特殊错误的数据,我想从几个机制方面来分析这个问题。

  1、分析日志(Analysis Log)

  就是即将装载到备库的SQL语句,这部分是装载正确的根本,这部分数据如果正确了,则保证了数据源的正确。

  2、装载日志(Upload Log)

  就是装载数据时是否出现问题,有时备库和主库表定义有不一致,那么在这个日志就会记录出错,根据此日志就能够检查出问题出现在什么地方。

  通过以上两个日志基本能保证同步过程中的错误捕捉,同时再加上同步数据检查程序(此数据需要主、备库检查过程中不能更改数据)和应用程序。

  连接备库抽查是两个辅助检查方式,同时备库作为查询统计分析进行实时提供服务也会把抽查变成常态,从而保证数据的一致性。

  第三、完整性

  数据库的完整性,主要从容错机制来考虑,例如出现下面错误情况时需要同步程序能够自动恢复:

  1、源库断电或重起

  2、源库SHUTDOWN

  3、源库网络断

  4、备库断电或重起

  5、备库SHUTDOWN

  6、备库网络断

  7、数据库装载出错

  针对上面主要几种情况,同步软件必须进行一一考虑断点的记录方式和位置,保证任何情况下同步程序能够续抽、续传,甚至对错误处理也可以通过人为参与后继续同步,同时还有两方面功能必须考虑:

  1、不停机初始化

  2、日志已经归档

  3、自身程序停止的重起

  4、同步服务器断电之后断点启动

  数据库同步软件只有充分考虑了以上三个方面的指标,才能为行业客户提供优秀的、实时的、数据完整一致的同步产品,满足相关基于数据库同步的业务需求。

====================================分割线================================

最新内容请见作者的GitHub页:http://qaseven.github.io/

转载地址:http://vochx.baihongyu.com/

你可能感兴趣的文章
快准车服完成3000万元A+轮融资,年底将开始B轮融资
查看>>
让我去健身的不是漂亮小姐姐,居然是贝叶斯统计!
查看>>
MySQL 数据约束
查看>>
我的友情链接
查看>>
SERVLET容器简介与JSP的关系
查看>>
《服务器SSH Public Key认证指南》-补充
查看>>
我的友情链接
查看>>
Java break continue return 的区别
查看>>
算法(Algorithms)第4版 练习 1.3.4
查看>>
jquery easyUI checkbox复选项获取并传后台
查看>>
浅析NopCommerce的多语言方案
查看>>
设计模式之简单工厂模式
查看>>
二、saltstack使用
查看>>
C++中变量的持续性、链接性和作用域详解
查看>>
2017 4月5日上午
查看>>
Python中str()与__str__、repr()与__repr__、eval()、__unicode__的关系与区别
查看>>
[NOIP2011] 观光公交
查看>>
Google Chrome开发者工具
查看>>
第一阶段冲刺报告(一)
查看>>
使用crontab调度任务
查看>>