远程生成代理键

时间:2009-11-26 22:21:11

标签: database surrogate-key

提前抱歉,因为这个问题与其他人类似(但不一样!)。

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

我正在考虑一个允许我使用整数的方案,在数据库中提供更好的性能,但显然我不能简单地使用自动数字。我们的想法是使用具有两个含义的密钥 - 我认为它被称为高低策略。密钥由源(生成它的位置,通常是此业务案例中的2个位置中的1个)和自动递增的值组成。例如:

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

另一个来源:

2-000000567, 2-000000567, ...

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

任何人都可以看到这个问题吗?如可能出现的索引碎片?或者甚至是更好的方法呢?

为了确认,此密钥没有商业含义,用户永远不会看到它(除了URL的参数之外),也不会使用它。

我期待您的意见并感谢您的时间,万分感谢:)。

1 个答案:

答案 0 :(得分:1)

这解释了您所引用的hilo算法:What's the Hi/Lo algorithm?

这是经常使用的解决方案,可以“解决”您的问题。因为,如果你正在使用Hibernate / nHibernate,它是推荐的主键选项之一。