3

我需要在本地和远程数据库之间同步记录,比如客户列表。两侧的数据库具有相同的结构。我考虑过使用某种标记(日期字段,字段值的哈希/校验和......)但是你有什么建议?

编辑:远程数据库在虚拟主机上,因此需要 PHP 来传输数据。

4

2 回答 2

2

在您的记录中包含最后更改字段(日期)始终是一个好主意。请记住,如果您开始同步,则必须处理冲突。

如果双方都可以插入,请为主键使用分区方案。示例:站点 A 从 1000000000 开始,站点 B 从 2000000000 开始(使这个数字足够大,或者简单地将主键大小除以并发站点的数量)。

粗略同步图:

  1. 从源 A 获取修改的记录,从上一个同步周期开始。
  2. 对于每条记录,检查:
    1. 是新插入A吗?然后插入B
    2. 是否在 A 中修改,但在 B 中未修改:更新 B
    3. 是否在 A 和 B 中修改:解决字段级别的冲突。
  3. 从源 B 获取修改的记录,从上一个同步周期开始
  4. 对于每条记录,检查:
    1. 是新插入B吗?然后将其插入A
    2. 是否在 B 中修改,但在 A 中未修改:更新 A
    3. 是否在 B 和 A 中修改:解决字段级别的冲突。
于 2012-09-15T12:49:26.670 回答
1

如果你想通过代码同步两个数据库,你就在找麻烦。

首先,您需要处理自己的主键生成,因为在不同站点上插入记录时,主键可以/将是相同的。唯一主键生成并不容易完成。

此外,您需要一些冲突解决方案。任何一方所做的更新或删除都必须反映到另一个站点。通常,如果没有用户干预,您无法解决冲突。

我的建议:查看数据库原生的内置(双向)复制。它将为您省去很多麻烦。

于 2012-09-15T12:48:33.127 回答