云上的唯一ID生成

本文关键字:生成 ID 唯一 云上 | 更新日期: 2023-09-27 18:29:58

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

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

谢谢。

云上的唯一ID生成

这与"在云上"没有什么关系,而是一个通用的分布式计算问题。

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

首先想到的是GUID是一个数字(128位长)。当你需要分配零件号时,你不能只生成一个GUID吗?如果需要,你可以将GUID散列成一个无符号的长(City hash是我最喜欢的这种类型的应用程序的64位散列),除非你要处理数十亿个零件号,否则散列冲突的风险非常小。如果你有一种冲动,想把它变成一个32位的数字,看看生日问题。如果只有32位,哈希冲突将比您想象的要频繁得多。

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

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

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