定时同步数据表的思考

定时任务:

1小时一次:
1、商定取值时间:时间 = min(主服务器时间 - 1小时5分,上次商定的时间 + 1小时)
这里的5分钟我考虑的是最大事物的用时。就是假定所有事物的时间长度不可以超过5分钟。
因为我们在程序中经常是先设置更新时间,然后插入数据库,然后再做些别的(浪费了一些时间),
最后提交了事物。那么根据mvcc模式,非锁定读,是读快照。导致更新时间本应该在本次同步中被同步的,而并没有同步到
(不可见),而下一次的同步时间又大于了这个更新时间。导致会丢失更新。所以每次同步,都多同步5分钟的数据。
就怕丢下这种间隙中的数据。

2、用商定的取值时间进行同步数据。
主服务器数据不可以被删除 只能逻辑删除。

3、对于删除数据的弥补:
通过分页的形式去取本地的id询问远程是否拥有。在删除情况比较低的时候,我们可以先去判断两地的数据量是否相等。

告诉远端服务器给我 1小时5分(这里为什么多了5分钟,而不是刚刚好的一小时。这需要考虑
mysql InnoDB的mvcc导致的问题,非锁定读。取的可能不是最新数据) 以后更新的数据给我
这里以远端服务器的时间为准,并不是客户端传入时间过去。


有个问题 远端服务器突然在某个时刻将时间想前调整了(时间向后调整不会有问题),
那么会导致从服务器的数据丢失更新啊!
解决方案:从服务器在去主服务器取数据的时候,带一个

你可能感兴趣的:(数据库)