qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

数据库同步过程中一致性和完整性的保证

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

  第一、效率

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

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

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

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

  第二、一致性

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

  1、分析日志(Analysis Log)

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

  2、装载日志(Upload Log)

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

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

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

  第三、完整性

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

  1、源库断电或重起

  2、源库SHUTDOWN

  3、源库网络断

  4、备库断电或重起

  5、备库SHUTDOWN

  6、备库网络断

  7、数据库装载出错

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

  1、不停机初始化

  2、日志已经归档

  3、自身程序停止的重起

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

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

posted on 2012-06-08 09:41 顺其自然EVO 阅读(300) 评论(0)  编辑  收藏 所属分类: 数据库


只有注册用户登录后才能发表评论。


网站导航:
 
<2012年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜