多个辅助服务器与主服务器同步时如何管理主键值?

Gul*_*han 5 replication sql-server primary-key availability-groups data-synchronization

我们在不同城市有三台辅助数据库服务器和一台主服务器。我的问题是我想要异步事务提交到所有三个数据库,但是提交到主数据库时会发生主键数据冲突......因为可以在所有三个服务器上生成相同的 ID。那么哪种技术可用于这种场景来维护主键冲突问题......

注意-所有三个辅助服务器都作为“复制发布者”工作,而主服务器作为订阅者(alwayson 的主要副本)工作。

我这边的解决方案- 我在辅助服务器上提交记录,我在所有辅助服务器上使用了一些技巧,例如..server 1(种子值 = 1 增量 = 3),服务器 2(种子值 = 2 增量 = 3), server 3 (seed value = 3 increment by = 3)...根据这个设置,我的主键值永远不会冲突...所以请建议我是否正确?

小智 2

对于你所问的问题,我可以想到 3 种可能的解决方案。

  1. 第一个解决方案正是您所拥有的,将每个服务器设置为以相同的增量增加标识列,但以一开始偏移。(服务器 1:从 1 开始增加 2,服务器 2:从 2 开始增加 2)此解决方案效果很好,因为它使您的密钥保持较小,但允许您生成它们而不会遇到冲突。另一方面,您必须在每台服务器上配置每个标识列,这样您就有维护开销。
  2. 另一个解决方案是将密钥设置为 guid,在 16 字节时,遇到冲突的可能性很小,但它是一个相当宽的密钥,并且会带来一系列麻烦。请参阅此处了解更多信息: Kimberly Tripp GUID 作为主键 或此处: GUID 与 INT 辩论
  3. 使用复合键,其中一列代表创建记录的服务器,另一列是递增 1 的标识。这还有一个缺点,即必须在每台服务器上配置该列以代表创建记录的服务器。

最后,没有正确或错误的方法,这完全取决于您想要忍受什么权衡。