PK ID 冲突的数据库同步问题 - 需要设计帮助
DB Sync Issue with PK ID Conflict - Design Help Needed
场景:
我有一个本地数据库和一个远程 public 数据库。两者都使用 SQLyog SJA 作业文件进行同步 - 这会将两个数据库同步为相同。它运作良好。
数据库中有问题的部分是用户评论table。
本地数据库包含数以千计的用户评论,并且不断通过各种方式添加更多评论。这些都同步到远程数据库评论 table。
远程评论table DB 接受直接输入的用户评论。然后将这些同步到本地评论数据库。
这是一种双向同步,其中一个不删除另一个。这实际上似乎运作良好,并且通过 SJA 自动执行。
问题:
评论的主键 ID 在两侧自动递增。
因此,如果两个 table 完全同步并且键数为 50,并且用户进行远程输入,则键为 51。现在本地数据库也在增长,并且有一个不同的条目是在密钥 51 下进行的。因此,当调用下一个同步时,由于密钥冲突,将会出现问题。
可能的解决方案:
所以我认为一个好主意是在添加远程评论 PK ID 时添加大量数字。这样,当调用同步时,主键不会发生冲突,因为本地 PK ID 永远不会变得那么高。
它在第一次同步时运行良好。但问题是自动递增功能会从最高值递增,即使键之间有很大的差距。所以这个解决方案是行不通的。
我想为用户评论维护一个 table 并进行无缝同步,但主键冲突的问题是个问题。
如果其他人对此事有一些想法,我很感兴趣。
希望我把问题描述清楚了。
谢谢。
------ 编辑 ----------
我找到了有效的解决方案。
我将主键 ID 更改为具有自动递增功能的普通 INT。然后我创建了第二个 ID INT 字段,它由一个长度约为 10 的随机 INT 组成。我现在将两个 ID 字段一起使用以形成 PK ID。现在两个数据库之间发生冲突的可能性基本上 none 存在。自动递增 ID 和长随机 INT ID 在同一个条目上必须相同,这与我正在处理的卷不太可能。
不是最好的解决方案,但效果很好。
希望这对其他人有所帮助。
我找到了有效的解决方案。
我将主键 ID 更改为具有自动递增功能的普通 INT。然后我创建了第二个 ID INT 字段,它由一个长度约为 10 的随机 INT 组成。我现在将两个 ID 字段一起使用以形成 PK ID。现在两个数据库之间发生冲突的可能性基本上 none 存在。自动递增 ID 和长随机 INT ID 在同一个条目上必须相同,这与我正在处理的卷不太可能。
不是最好的解决方案,但效果很好。
希望这对其他人有所帮助。
场景:
我有一个本地数据库和一个远程 public 数据库。两者都使用 SQLyog SJA 作业文件进行同步 - 这会将两个数据库同步为相同。它运作良好。
数据库中有问题的部分是用户评论table。
本地数据库包含数以千计的用户评论,并且不断通过各种方式添加更多评论。这些都同步到远程数据库评论 table。
远程评论table DB 接受直接输入的用户评论。然后将这些同步到本地评论数据库。
这是一种双向同步,其中一个不删除另一个。这实际上似乎运作良好,并且通过 SJA 自动执行。
问题:
评论的主键 ID 在两侧自动递增。
因此,如果两个 table 完全同步并且键数为 50,并且用户进行远程输入,则键为 51。现在本地数据库也在增长,并且有一个不同的条目是在密钥 51 下进行的。因此,当调用下一个同步时,由于密钥冲突,将会出现问题。
可能的解决方案:
所以我认为一个好主意是在添加远程评论 PK ID 时添加大量数字。这样,当调用同步时,主键不会发生冲突,因为本地 PK ID 永远不会变得那么高。
它在第一次同步时运行良好。但问题是自动递增功能会从最高值递增,即使键之间有很大的差距。所以这个解决方案是行不通的。
我想为用户评论维护一个 table 并进行无缝同步,但主键冲突的问题是个问题。
如果其他人对此事有一些想法,我很感兴趣。
希望我把问题描述清楚了。
谢谢。
------ 编辑 ----------
我找到了有效的解决方案。
我将主键 ID 更改为具有自动递增功能的普通 INT。然后我创建了第二个 ID INT 字段,它由一个长度约为 10 的随机 INT 组成。我现在将两个 ID 字段一起使用以形成 PK ID。现在两个数据库之间发生冲突的可能性基本上 none 存在。自动递增 ID 和长随机 INT ID 在同一个条目上必须相同,这与我正在处理的卷不太可能。
不是最好的解决方案,但效果很好。
希望这对其他人有所帮助。
我找到了有效的解决方案。
我将主键 ID 更改为具有自动递增功能的普通 INT。然后我创建了第二个 ID INT 字段,它由一个长度约为 10 的随机 INT 组成。我现在将两个 ID 字段一起使用以形成 PK ID。现在两个数据库之间发生冲突的可能性基本上 none 存在。自动递增 ID 和长随机 INT ID 在同一个条目上必须相同,这与我正在处理的卷不太可能。
不是最好的解决方案,但效果很好。
希望这对其他人有所帮助。