1

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

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

任何帮助将不胜感激,特别是如果您解决了类似的问题。

4

2 回答 2

2

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

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

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

ETC

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

1 AB
1 BZ
1 XV

问候

彼得

于 2011-05-27T23:00:45.840 回答
2

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

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

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

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

于 2011-05-27T21:30:29.927 回答