我已经查看了一些资源,只是想澄清并获得意见。

首先,为了完全避免任何问题,我们可以不使用标识列作为主键,而是让它们自己生成,并以两种方式复制这些值,假设它们在创建的任何时间都是唯一的。

出于这个问题的目的,我正在讨论两种或多种方式的复制来解决全局访问问题,并且我们确实有身份列。

现在我们正在设置事务复制,两个数据库应该相互复制。

据我了解,您为每个数据库服务器分配一系列种子值,并且它将使用这些值,您知道有独特的原因您给出了不交叉的范围。那么这是否意味着在复制过程中这些值被插入到种子列中?

因此,如果在每台服务器插入 10 行后将范围 1-10 和 11-20 分配给 2 个服务器,那么两个数据库中都会有种子 1-20 吗?

有帮助吗?

解决方案

有一个选项“不可复制” 可以应用于标识列(以及触发器和其他约束)。

在您的示例中, server1 将播种 1-10,但只接受复制的 11-20。

设置种子的几种方法:

任何一个:像这样设置你的种子/增量为 NOT FOR REPLICATION

  • 种子 1,增量 2
  • 种子 2,增量 2
  • 种子-1,增量-2
  • 种子-2,增量-2
  • 种子 1000000001,增量 2
  • 种子 1000000002,增量 2
  • 种子-1000000002,增量-2
  • 种子-1000000001,增量-2

这为 8 台服务器的每台服务器提供 500,000,000

或者:添加名为 ServerID 的第二列以提供复合键,对 ID 列使用 NOT FOR REPLICATION

对于tinyint来说,这可以扩展到256台服务器,每台服务器有2^32行

无论哪种方式都有效...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top