定时同步数据表的思考
程序员文章站
2022-04-13 21:30:22
...
定时任务:
1小时一次:
1、商定取值时间:时间 = min(主服务器时间 - 1小时5分,上次商定的时间 + 1小时)
这里的5分钟我考虑的是最大事物的用时。就是假定所有事物的时间长度不可以超过5分钟。
因为我们在程序中经常是先设置更新时间,然后插入数据库,然后再做些别的(浪费了一些时间),
最后提交了事物。那么根据mvcc模式,非锁定读,是读快照。导致更新时间本应该在本次同步中被同步的,而并没有同步到
(不可见),而下一次的同步时间又大于了这个更新时间。导致会丢失更新。所以每次同步,都多同步5分钟的数据。
就怕丢下这种间隙中的数据。
2、用商定的取值时间进行同步数据。
主服务器数据不可以被删除 只能逻辑删除。
3、对于删除数据的弥补:
通过分页的形式去取本地的id询问远程是否拥有。在删除情况比较低的时候,我们可以先去判断两地的数据量是否相等。
告诉远端服务器给我 1小时5分(这里为什么多了5分钟,而不是刚刚好的一小时。这需要考虑
mysql InnoDB的mvcc导致的问题,非锁定读。取的可能不是最新数据) 以后更新的数据给我
这里以远端服务器的时间为准,并不是客户端传入时间过去。
有个问题 远端服务器突然在某个时刻将时间想前调整了(时间向后调整不会有问题),
那么会导致从服务器的数据丢失更新啊!
解决方案:从服务器在去主服务器取数据的时候,带一个
1小时一次:
1、商定取值时间:时间 = min(主服务器时间 - 1小时5分,上次商定的时间 + 1小时)
这里的5分钟我考虑的是最大事物的用时。就是假定所有事物的时间长度不可以超过5分钟。
因为我们在程序中经常是先设置更新时间,然后插入数据库,然后再做些别的(浪费了一些时间),
最后提交了事物。那么根据mvcc模式,非锁定读,是读快照。导致更新时间本应该在本次同步中被同步的,而并没有同步到
(不可见),而下一次的同步时间又大于了这个更新时间。导致会丢失更新。所以每次同步,都多同步5分钟的数据。
就怕丢下这种间隙中的数据。
2、用商定的取值时间进行同步数据。
主服务器数据不可以被删除 只能逻辑删除。
3、对于删除数据的弥补:
通过分页的形式去取本地的id询问远程是否拥有。在删除情况比较低的时候,我们可以先去判断两地的数据量是否相等。
告诉远端服务器给我 1小时5分(这里为什么多了5分钟,而不是刚刚好的一小时。这需要考虑
mysql InnoDB的mvcc导致的问题,非锁定读。取的可能不是最新数据) 以后更新的数据给我
这里以远端服务器的时间为准,并不是客户端传入时间过去。
有个问题 远端服务器突然在某个时刻将时间想前调整了(时间向后调整不会有问题),
那么会导致从服务器的数据丢失更新啊!
解决方案:从服务器在去主服务器取数据的时候,带一个
上一篇: Java内存模型—JMM
下一篇: nodejs 实现方法的同步
推荐阅读
-
python实现定时同步本机与北京时间的方法
-
一次flume exec source采集日志到kafka因为单条日志数据非常大同步失败的踩坑带来的思考
-
关于多线程两种方法的思考 卖票问题 同步代码块加锁问题
-
python实现定时同步本机与北京时间的方法
-
如何实现数据表中某个字段在每天固定时间的自动更新
-
Oracle中通过Job实现定时同步两个数据表之间的数据
-
如何实现数据表中某个字段在每天固定时间的自动更新
-
Oracle中通过Job实现定时同步两个数据表之间的数据
-
ORACLE数据库和MYSQL数据库之间的数据表的数据同步、数据迁移、数据割接
-
一次flume exec source采集日志到kafka因为单条日志数据非常大同步失败的踩坑带来的思考