2009-11-26 56 views
1

对不起,因为这个问题是相似的(但不相同!)给其他人。远程生成代理键

无论如何,我需要能够在多个位置生成代理键,以便以后同步。我正在考虑使用GUID,但是这些键可能必须出现在URL的参数中,而GUID将非常复杂和难看。

我正在考虑一个允许我使用整数的方案,在数据库中提供更好的性能,但显然我不能简单地使用自动编号。这个想法是使用一个有两个含义的密钥 - 我相信它被称为高 - 低策略。密钥由来源(产生的地方,通常是本商业案例中的两个地点中的一个)和自动递增值组成。例如:

1-000000567, 1-000000568, 1-000000569, 1-000000570, ...

而对于另一个来源:

2-000000567, 2- 000000567, ...

这也意味着我可以将它们作为整数存储在数据库中(即“2-000000567”将成为整数“2000000567”)。

任何人都可以看到这个问题吗?如索引碎片可能会发生?或者甚至可能是更好的方式?

只是为了确认,这个键没有商业意义,用户永远不会看到它(除了在URL的参数中),也不会使用它。

我期待着您的意见和欣赏你的时间,太感谢了:)

回答

1

这说明你提到的希洛算法:What's the Hi/Lo algorithm?

这是常用的解决方案,“断开”的问题比如你的。例如,如果您使用的是Hibernate/nHibernate,它是推荐的主键选项之一。

+0

感谢您的回应:) – 2009-11-27 19:12:11