同步数据库时唯一标识符作为主键

时间:2011-05-27 21:06:03

标签: sql-server database-design synchronisation

我花了一天时间研究和测试在Mac上将SQL Server数据库与CoreData同步的不同方法。我已经测试了INT和GUID(也是顺序GUID)作为我的主要密钥,虽然GUID是迄今为止性能最差的,但我看不到其他方法来确保跨系统的唯一性。

在平台之间同步数据时,使用主键的GUID是否错误?我发现很难相信公司在同步时会使用GUID,但我在这个主题上阅读的大多数文章似乎都指向了这一点。如果开发人员使用GUID,有人知道如何改进性能吗?我尝试将GUID用作具有非聚集索引的主键,并创建了一个日期字段作为我的聚簇索引,但没有很好的性能提升。

非常感谢任何帮助,特别是如果你已经解决了类似的问题。

2 个答案:

答案 0 :(得分:2)

GUID使同步变得更容易。顺序guid将强烈缓解碎片问题,只留下16字节列大小作为主要问题。

只要您确保将另一个连续且窄的列作为您的聚簇键,您将为非聚簇索引节省大量空间 - 您似乎已经知道这一点。

假设您没有处理GB数据,在这种情况下,性能不应受GUID的影响,因为您已经妥善处理了GUID列。

如果您只需要同步两个系统,我之前已经创建了一个系统,其中A将使用标识(-1,-1)作为主键,而另一个系统使用标识(1,1)作为主要键。确保轻松同步,同时保持主键的良好和狭窄。但是不适用于两个以上的系统。

答案 1 :(得分:2)

同意,当您使用GUID时,您可能会遇到使用它作为密钥的索引的巨大碎片。确保跨系统唯一性的其他方法是

使用标识列并将它们播种到不同的非重叠范围:

1-100 million server A
100million1 -200 million server B 

或使用复合键(identity int + location code)来区分数据的原始位置: 三个不同的行:

1 AB
1 BZ
1 XV

此致

·彼得