C# 在云上生成唯一ID

C# 在云上生成唯一ID,c#,windows,azure,azure-sql-database,C#,Windows,Azure,Azure Sql Database,我正在寻找一个简单但健壮的解决方案,用于提供唯一的零件号。我一直在考虑使用GUID来识别来自不同客户端(台式机、电话等)的请求,然后根据请求GUID的插入日期和时间顺序分配PN 问题:SQLAzure是正确的服务吗?有没有一个标准的方法 谢谢。这与“在云上”没有什么关系,而是一个普遍的分布式计算问题 您的问题中没有足够的信息来完全理解您的需求,但我收集的是,您需要为请求零件号的服务的消费者分配一个唯一的编号 第一个想法是GUID是一个数字(128位长)。当您需要分配零件号时,您不能只生成GUID

我正在寻找一个简单但健壮的解决方案,用于提供唯一的零件号。我一直在考虑使用GUID来识别来自不同客户端(台式机、电话等)的请求,然后根据请求GUID的插入日期和时间顺序分配PN

问题:SQLAzure是正确的服务吗?有没有一个标准的方法


谢谢。

这与“在云上”没有什么关系,而是一个普遍的分布式计算问题

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

第一个想法是GUID是一个数字(128位长)。当您需要分配零件号时,您不能只生成GUID吗?如果需要,您可以将GUID散列为(比如)无符号长(City散列是我最喜欢的64位散列,适用于该类型的应用程序)散列冲突的风险非常非常小,除非您处理的是数十亿个部件号。如果您想将数据散列成32位数字,请查看下面的示例。散列冲突的频率将远远超过您仅使用32位时的想象

如果必须分配序列号,则必须在处理过程中引入序列化点。您将需要一些服务(可以是DB表上的标识列),用于统计单个零件号请求并分配下一个较大的编号


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

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

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

第一个想法是GUID是一个数字(128位长)。当您需要分配零件号时,您不能只生成GUID吗?如果需要,您可以将GUID散列为(比如)无符号长(City散列是我最喜欢的64位散列,适用于该类型的应用程序)散列冲突的风险非常非常小,除非您处理的是数十亿个部件号。如果您想将数据散列成32位数字,请查看下面的示例。散列冲突的频率将远远超过您仅使用32位时的想象

如果必须分配序列号,则必须在处理过程中引入序列化点。您将需要一些服务(可以是DB表上的标识列),用于统计单个零件号请求并分配下一个较大的编号


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

您可能想看看a这个:

您可能想看看a这个:

是否有CityHash的c实现?@JMarsch:没有,但是从C++移植非常简单。我在大约一个小时内为一位前雇主做到了这一点。@EricJ:我提到云是因为我们没有能够保证云解决方案可用性的服务器。我们有一些人需要为报价生成PNs。我认为我们的观点是一致的。我最初的想法是将请求GUIDs插入数据库,随后生成PNS。@ ErICJ:要添加,我们不会有数十亿个部分数字,PNS可能不超过10个数字。CuyHAHE有C实现吗?JMARSCH:不,但是,从C++移植端口非常简单。我在大约一个小时内为一位前雇主做到了这一点。@EricJ:我提到云是因为我们没有能够保证云解决方案可用性的服务器。我们有一些人需要为报价生成PNs。我认为我们的观点是一致的。我最初的想法是将请求GUID插入到数据库中,然后生成PNs。@EricJ:另外,我们不会有数十亿个零件号,PNs可能不会超过10位。我也在研究这个问题。ThanksNowMaker对Azure移动服务进行了一些修改(主要包括移动服务DLL,而不是项目中包含的DLL),对我来说效果很好。我也在研究这一点。ThanksNowMaker对Azure移动服务(主要包括移动服务DLL,而不是项目中包含的DLL)进行了一些修改,对我来说效果很好。