通过标准事务复制更新了两个主数据库和两个只读副本.需要从两个只读数据库映射一些实体,假设A数据库包含订单而B数据库包含行.
Replication http://i46.tinypic.com/1tacsx.png
问题是复制到一个数据库可能会滞后于第二个数据库的复制,并且在映射时,R数据库将具有不一致的数据.例如.
我们在19:00和19:03用线存储了2个订单.映射过程从19:05开始,但到映射时刻数据库复制处理所有更改到19:03,但处理的B数据库复制只更改到19:00.映射后,我们将订购实体,订单截止时间为19:03,行截止时间为19:00.麻烦有保障:)
在我的特定情况下,两个数据库都具有时间模型,因此可以获取每个时间片的数据,但问题是识别最新复制的时间.
问题:如何同步多个数据库的复制过程以避免上述情况?或者,换句话说,如何比较每个数据库中的上次复制时间?
UPD:
我看到同步的唯一方法是不断地将时间戳写入每个数据库中的服务表,并检查复制服务器上的这些时间戳.这是可接受的解决方案
最佳答案 看来,给定的任务无法在给定的约束条件下解决.
如果我理解正确,数据库和行的架构数量是常量.
所以,留下的变量:
>对数据库进行额外的“注入”
>时间诡计
>触发技巧
>“后期绑定”的变化,不及时复制
目前,我发现只有一个想法,似乎有效:
>在“行”表上添加触发器,修改“订单”记录时间戳(last_line_time)
>在副本中,等到Line with time,等于last_line_time出现.
>如果max(lines.line_time)> order.last_line_time比订单已过时
>如果max(lines.line_time)< order.last_line_time比行已过时
>如果max(lines.line_time)== order.last_line_time比一切都好,暂时:)
但是,如果不断修改Lines,并且Lines表副本总是落后,则这种情况可能会失败进入无限循环.