2

我一直想知道跨 sql 服务器的 GUID 的唯一性。

我有一个中央数据库服务器和 100 个客户端数据库(都是 SQL Server)。我有一个合并复制(双向)设置来同步客户端和主服务器之间的数据。同步过程每天会发生 2-3 次。

对于要同步的每个表,我使用 GUID 作为 PrimaryKey,每个表在本地添加新记录,并在本地生成新的 GUID。

当在每台客户端计算机以及主数据库服务器上创建 GUID 时,它将如何确保在所有客户端和主数据库中生成唯一的 GUID?

它将如何跟踪在其他客户端/服务器数据库中生成的 GUID,以便它不会重复该 GUID?

4

4 回答 4

2

你将不得不做更多的研究,但如果我没记错的话,我认为 GUID 是基于 MAC 地址和时间戳的。

http://www.sqlteam.com/article/uniqueidentifier-vs-identity

我知道一些 MCM 在 GUID 上遇到了唯一密钥违规。

这怎么可能发生?好吧,在虚拟世界中,您拥有虚拟适配器。

如果您将一台虚拟机从一台主机复制到另一台主机,您可以拥有相同的适配器、MAC 地址吗?

现在,如果两个映像同时运行,则可能不会获得唯一的 GUID。

但是,这种情况很少见。您始终可以向键添加另一个字段以使其唯一。

关于是否将 GUID 用作集群 PK 存在一个完整的争论。请记住,任何其他索引都会在叶子(节点)中获取 PK 的副本。对于每条记录 x 个索引,这是 16 个字节。

我希望这有帮助。

约翰

于 2013-09-27T12:55:23.397 回答
2

GUID 是唯一的(出于您的目的)

网上有无休止的争论——我喜欢这个

于 2013-09-27T10:16:35.767 回答
2

我认为 GUID 不一定是唯一的。它们的独特性来自这样一个事实,即随机生成相同的 GUID 的可能性极小,但仅此而已。

但是出于您的目的,这应该没问题-它们在分布式系统上应该是唯一的,并且概率极高。

于 2013-09-27T10:17:42.503 回答
1

您不需要做任何特别的事情来确保 GUID/Uniqueidentifier 是全局唯一的。该基本保证是 GUID 的激励要求。

于 2013-09-27T10:18:24.140 回答