数据库同步过程中一致性和完整性的保证
2012-06-01 14:24
260 查看
数据库同步过程,最严格的指标,第一是效率,即每秒同步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、同步服务器断电之后断点启动
数据库同步软件只有充分考虑了以上三个方面的指标,才能为行业客户提供优秀的、实时的、数据完整一致的同步产品,满足相关基于数据库同步的业务需求
第一、效率
数据库同步过程主要分为三个阶段,即抽取、分析、装载。
抽取过程主要是实时读取数据库日志,这部分可以作到毫秒级别间隔,所以不存在效率问题,基本上可以作到实时抽取;
分析过程主要是分析SQL语句并把源日志转化为备库的可装载日志,这部分的主要时间是写文件时间,由于普通硬盘写入时间是50M/秒左右,故对于大交易量情况,如果每秒主库阵列产生日志量上300M/秒左右,那相比之下分析组件还是会有秒级延迟的,因为我们同步软件一般都不安装在主库,无法使用高速阵列的写入速度,所以秒级别延迟还是会产生的,但是只要不是持续高峰日志量的产生速度,再经过一段时间后数据会自行同步,如果要追求实时抽取的同时又要实时分析,那建议只能给同步服务器配置一个阵列了;
装载过程主要是根据分析组件的结果进行备库SQL语句的装载,所以并发装载是提高效率的唯一方法,不过对于备库服务器配置不是很高的情况,建议数据库长连接的数目需要能够合理配置,因为备库有时会作为查询统计的负载分担,所以如果备库的资源有限,对于查询统计分担的效果会大打折扣
第二、一致性
如何能够保证备库的数据和主库一致,这个问题如果在业务层面提出来,大家肯定没什么好的办法,一个共同的回答就是“查看备库”,用应用去连,之后检查刚刚同步的数据是正确的就可以了,不过这样的抽查很有可能检查不出来特殊错误的数据,我想从几个机制方面来分析这个问题。
1、分析日志(Analysis Log)
就是即将装载到备库的SQL语句,这部分是装载正确的根本,这部分数据如果正确了,则保证了数据源的正确。
2、装载日志(Upload Log)
就是装载数据时是否出现问题,有时备库和主库表定义有不一致,那么在这个日志就会记录出错,根据此日志就能够检查出问题出现在什么地方
通过以上两个日志基本能保证同步过程中的错误捕捉,同时再加上同步数据检查程序(此数据需要主、备库检查过程中不能更改数据)和应用程序
连接备库抽查是两个辅助检查方式,同时备库作为查询统计分析进行实时提供服务也会把抽查变成常态,从而保证数据的一致性
第三、完整性
数据库的完整性,主要从容错机制来考虑,例如出现下面错误情况时需要同步程序能够自动恢复:
1、源库断电或重起
2、源库SHUTDOWN
3、源库网络断
4、备库断电或重起
5、备库SHUTDOWN
6、备库网络断
7、数据库装载出错
针对上面主要几种情况,同步软件必须进行一一考虑断点的记录方式和位置,保证任何情况下同步程序能够续抽、续传,甚至对错误处理也可以通过人为参与后继续同步,同时还有两方面功能必须考虑:
1、不停机初始化
2、日志已经归档
3、自身程序停止的重起
4、同步服务器断电之后断点启动
数据库同步软件只有充分考虑了以上三个方面的指标,才能为行业客户提供优秀的、实时的、数据完整一致的同步产品,满足相关基于数据库同步的业务需求
相关文章推荐
- 代码中添加事务控制 VS(数据库存储过程+事务) 保证数据的完整性与一致性
- 代码中添加事务控制 VS(数据库存储过程+事务) 保证数据的完整性与一致性
- 代码中添加事务控制 VS(数据库存储过程+事务) 保证数据的完整性与一致性
- 触发器在保证数据库完整性和一致性中的应用
- 触发器在保证数据库完整性和一致性中的应用
- SQLServer 2005 实现数据库同步备份 过程-结果-分析
- 文件管理器和mediastore数据库同步过程中出现的问题
- SQLServer2005数据库同步过程
- (转载)数据库设计指南----第4 部分— 保证数据的完整性
- 不使用Django ORM对数据库进行修改 保证一个方法实现原子性,一致性
- 数据库之表、保证数据的完整性
- 加载数据库的完整性保证(SQLite Error 11 - database disk image is malformed的解决方法)
- SQLServer 2005 实现数据库同步备份 过程-结果-分析
- 数据库完整性与一致性
- MySQL存储过程跨数据库操作同步数据
- 数据库设计指南(四)保证数据的完整性
- 怎样保证客户端和服务器端数据的一致性(数据的同步)
- 实现数据库同步备份 过程--结果---分析
- 数据库复习--三范式、基本数据类型、完整性、存储过程
- 数据库设计指南(四)保证数据的完整性