【问题标题】:syncrhonise databases then reseed without race condition同步数据库,然后在没有竞争条件的情况下重新播种
【发布时间】:2012-03-31 17:03:32
【问题描述】:

我正在使用ApexSQL Diff API 来同步具有不同身份种子的服务器和客户端数据库。同步后,我为两个数据库重新设置种子。

存在竞争条件。如果服务器在同步之后但在重新播种之前添加新行,则它们的 ID 将错误。 ApexSQL 管理自己的数据库连接,因此我无法在事务中进行同步。

例子:

  1. 将客户端数据库重新设置为 1000。
  2. 将服务器数据库重新设置为 0。
  3. 向客户端添加三行。他们的 ID 为 1000,1001,1002。
  4. 向服务器添加三行。它们的 ID 为 0,1,2。
  5. 同步。服务器现在有 ID 为 0,1,2,1000,1001,1002 的行。
  6. 添加客户端的行已隐式将服务器重新设置为 1003。
  7. 某个其他进程向服务器添加了一行。它的 ID 为 1003。
  8. 客户端将服务器重新设置为 3 ... 为时已晚!

【问题讨论】:

    标签: database race-condition


    【解决方案1】:

    我们为客户端使用负 ID,从而避免重新设置服务器 :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-23
      • 1970-01-01
      • 2021-02-14
      • 1970-01-01
      • 2013-07-16
      • 2023-02-09
      • 2012-04-08
      • 2020-08-25
      相关资源
      最近更新 更多