1

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

这是问题的一半。另一方面,exes 可以在网络上的任何机器上运行,并且每个实例应该继续增加(就像时间永远不会倒退)再过 2 年。我的限制是我不能使用文件来存储和检索共同的最新值。

我怎样才能做到这一点?

一个 9 字符/数字的 UNIQUE NUMBER 也肯定有效。整个想法是为每个“机密文件”分配一个数字(9个字符长度的字符串)和(加密它和其他任何东西,这不是我的工作)

我试过:

  1. GUID 在总共 128 位中是唯一的,但不是最后一个或前 9 个字符
  2. 刻度数超过 9
  3. MAC 地址仅在 12 个字符时唯一
  4. ISBN(图书编号系统)

等等 ...

4

3 回答 3

2

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

于 2012-06-30T02:57:52.883 回答
1

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

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

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

于 2012-06-30T13:20:15.027 回答
0

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

无论如何,最好的办法是生成一个随机数。如果您的所有 PC 都在同一个网络中,请在开始时使用 IP 地址的主机位以避免冲突。在大多数情况下,这应该不超过 16 位或 24 位,因此您还有 6 位剩余数字。

于 2012-06-30T02:50:22.920 回答