云上的唯一ID生成

时间:2012-04-03 21:28:07

标签: c# windows azure azure-sql-database

我正在寻找一种简单但强大的解决方案来配置独特的部件号。我一直在考虑使用GUID来识别来自不同客户端(台式机,电话等)的请求,然后根据请求GUID的插入日期时间顺序分配PN。

问题:SQL Azure是否是正确的服务?有没有标准的方法呢?

感谢。

2 个答案:

答案 0 :(得分:7)

这与“在云端”无关,而是一般的分布式计算问题。

在您的问题中没有足够的信息来完全理解您的要求,但我收集的是您需要为请求部件号的服务的消费者分配唯一的号码。

首先想到的是GUID是一个数字(128位长)。您是否只需在分配零件号时生成GUID?如果需要,你可以将GUID哈希到一个unsigned long(City Hash是我最喜欢的那种应用程序的64位哈希),除非你处理数十亿个部件号,否则哈希冲突风险非常小。 。如果你想要哈希到32位数字的冲动,请看看Birthday Problem。散列冲突将比你想象的只有32位更频繁。

如果必须分配序号,则必须在处理中引入序列化点。您将需要一些服务(可以是数据库表上的标识列)来计算单个部件号请求并分配下一个更大的数字。

如果您通常需要较小的数字,但它们不一定必须是顺序的,您可以允许可能处理此类请求的每个服务器管理它自己的数字范围(例如,给定的服务器可以“检出”一个块来自中央服务的1000个部件号,分配它们直到它们用完为止,然后“检出”一个新的数字块)。这并不能保证当前分配的所有数字都是顺序的,因为多个服务器可以以不同的速率分配数字。此外,如果您没有正确管理应用程序崩溃,您可以“丢失”已签出但未完全分配的数字块的一部分。

答案 1 :(得分:0)

你可能想看看这个:SnowMaker – a unique id generator