我正在寻找一个简单但强大的解决scheme来调配独特的部件号。 我一直在考虑使用GUID来识别来自不同客户端(台式机,电话等)的请求,然后根据请求GUID的插入date时间顺序分配PN。
问题:SQL Azure是否使用正确的服务? 有没有一个标准的方法呢?
谢谢。
这与“在云上”无关,而是一个普遍的分布式计算问题。
您的问题中没有足够的信息来充分理解您的要求,但是我收集的是您需要为请求零件号的服务的使用者分配唯一的号码。
首先想到的是一个GUID是一个数字(128位长)。 只要您需要分配零件号码,您不能只生成一个GUID? 如果需要的话,你可以将GUID散列成一个无符号长整数(城市散列是我最喜欢的64位散列),散列冲突的风险非常小,除非你处理数十亿个零件数。 如果你觉得这个冲动的想法是一个32位的数字,看看生日问题 。 散列冲突将比仅用32位更为频繁。
如果你必须分配一个序号,你必须在你的处理中引入一个序列化点。 您将需要一些服务(可能是数据库表上的标识列)来统计单个部件号请求并分配下一个更大的数字。
如果您通常希望数量较小,但不一定必须是连续的,则可以允许每个可能处理这种请求的服务器管理它自己的数字范围(例如,给定的服务器可以“检出”一个由1000个零件号码组成的块从一个中央服务,分配他们,直到他们用完,然后“检查”一个新的数字块)。 这并不能保证当前分配的所有号码都是连续的,因为多个服务器可以以不同的速率分配号码。 此外,如果您没有正确管理应用程序崩溃,则可以“丢失”已检出但未完全分配的数字块的一部分。
你可能想看看这个: SnowMaker – 一个独特的id生成器