需要9个字符长度的唯一ID

时间:2012-06-30 02:42:17

标签: distributed-computing

我的应用程序使用9位数字(也可以是字母数字)。我可以从任何数字开始,然后在开头递增它。但是我的应用程序不是单实例应用程序,所以如果我将此exe作为另一个实例运行,它应该递增最新值,并且前一个实例应该在需要该值时再次递增最新值。我的意思是,在我打开的所有实例中,值应该是最新的递增值。

这是问题的一半。另一方面,exe可以在网络上的任何机器上运行,并且每个实例应该继续递增(就像时间永远不会再回来一样)再持续2年。我的限制是我无法使用文件来存储和检索常见的最新值。

我该怎么做?

9个字母/数字的UNIQUE NUMBER也可以使用。整个想法是为每个“机密文件”分配一个数字(字符串为9个字符长度)和(加密它等等,这不是我的工作)

我尝试过:

  1. GUID,总共128位唯一,但不包含最后或前9个字符
  2. 勾选计数超过9
  3. MAC地址仅在12个字符
  4. 时才有效
  5. ISBN(书籍编号系统)
  6. 等等......

3 个答案:

答案 0 :(得分:2)

我认为最好的方法可能是拥有唯一的号码服务器,您的应用程序的每个实例都会通过网络查询以获取唯一的号码。

答案 1 :(得分:1)

首先,您需要从问题中删除分布式方面。与Hugo建议的用户一样,使用IP地址的最后2或3个字节应该可以工作。现在,您的问题已缩减为每台计算机的本地问题。

您的算法可能需要能够处理重启,而不是在重启后开始分配相同的数字。您声明您无法使用文件通过文件系统存储和检索有关此机制的信息。这意味着单独的随机数生成器不够好,并且您的数字生成器中也需要基于时间的组件。如果您使用包含自某个日期以来经过的秒数的4个字节,那么您将拥有超过100年的唯一性。但是,理想情况下,此处使用的时间尺度取决于您的数字的预期讲义频率。现在,您的问题因每一秒钟的每台机器而减少为本地问题。

然后可以使用最后的2或3个字节来确保第二个字节的本地唯一性。根据您的要求和操作系统,有多种IPC机制可以管理它,例如管道,套接字或共享内存。或者你可以想到更有创意的方式。如果您知道节点上参与进程的数量,则可以在启动或配置时为每个进程分配序列号,并使用2或3个字节中的1个。你的独特性问题现在已成为你的过程的本地问题,只有一秒钟,这应该是可行的。

答案 2 :(得分:0)

为什么它必须完全是9?如果不限制你,UUID会很棒。

无论如何,你最好的机会是生成一个随机数。如果您的所有PC都在同一个网络中,请在开头使用IP地址的主机位数,以避免出现问题。在大多数情况下,这应该不超过16或24位,所以你有6个剩余的数字。