1

I'm looking for a simple but robust solution for provisioning unique Part Numbers. I have been thinking about using GUID to identify requests from different clients (desktops, phones, etc.) and then assigning PNs sequentially based on insert date-time of the request GUIDs.

Questions: Is SQL Azure the right service to use? Is there a standard approach to this?

Thanks.

4

2 回答 2

7

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

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

第一个想法是 GUID 是一个数字(128 位长)。当您需要分配零件号时,您不能只生成一个 GUID 吗?如果需要,您可以将 GUID 散列成一个无符号长整数(City Hash 是我最喜欢的该类型应用程序的 64 位散列),除非您处理数十亿个零件编号,否则散列冲突的风险非常非常小. 如果您想将哈希转换为 32 位数字,请查看生日问题。使用 32 位时,哈希冲突将比您想象的要频繁得多。

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

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

于 2012-04-03T21:45:05.253 回答
0

你可能想看看这个:SnowMaker – 一个独特的 id 生成器

于 2012-04-04T05:44:44.987 回答