我一直想知道跨越sql服务器的GUID的唯一性。
我有一个中央数据库服务器和100个客户端数据库(两个SQL Server)。我有一个合并复制(双向)设置来同步客户端和主服务器之间的数据。同步过程每天发生2-3次。
对于要同步的每个表,我使用GUID作为PrimaryKey,并且每个表在本地添加新记录并在本地生成新GUID。
当在每台客户端计算机以及主数据库服务器上创建GUID时,它将如何确保它在所有客户端和客户端上生成唯一的GUID。主DB?
如何跟踪在其他客户端/服务器数据库中生成的GUID,以便它不会重复该GUID?
答案 0 :(得分:2)
GUID是唯一的(为了您的目的)
互联网上有无休止的争论 - I like this one
答案 1 :(得分:2)
我认为GUID并不一定是唯一的。它们的独特之处在于,它几乎不可能随机生成相同的GUID,但这就是全部。
但是出于您的目的,这应该没问题 - 它们应该在分布式系统上具有极高的概率。
答案 2 :(得分:2)
你必须做更多的研究,但我认为GUID是基于MAC地址和时间戳,如果我没记错的话。
http://www.sqlteam.com/article/uniqueidentifier-vs-identity
我知道有些MCM在GUID上遇到了唯一的密钥违规行为。
这怎么可能发生?那么,在虚拟世界中,你有虚拟适配器。
如果将一台虚拟机从一台主机复制到另一台主机,则可以使用相同的适配器MAC地址吗?
现在,如果两个图像同时运行,则可能没有唯一的GUID。
然而,情况很少见。您始终可以向该键添加另一个字段以使其唯一。
关于是否将GUID用作群集PK存在争议。请记住,任何其他索引都将在叶子(节点)中获取PK的副本。对于每个记录x个索引,这是16个字节。
我希望这会有所帮助。
约翰
答案 3 :(得分:1)
您无需执行任何特殊操作即可确保GUID / Uniqueidentifier具有全局唯一性。这一基本保证是对GUID的激励要求。