代码之家  ›  专栏  ›  技术社区  ›  lindelof

为多个节点从有限范围生成唯一的数字

  •  1
  • lindelof  · 技术社区  · 15 年前

    我甚至不确定以下是否可能,但问起来永远不会有什么坏处:

    到目前为止,我们想到了以下几点:

    优点:没有共享状态。

    缺点:一台机器如果还有足够的数量,可能会用完。如果机器重新启动,它将重用以前使用过的号码。

    2) 从0到1e6的计算机A计数器,从1e6到0的计算机B。

    缺点:不能扩展到两台以上的机器。当机器重新启动时出现同样的问题。

    你怎么认为?有没有一种神奇的算法可以满足我们的需求,而不需要向磁盘写入任何内容?

    3 回复  |  直到 15 年前
        1
  •  3
  •   Thomas    15 年前

    即使机器重新启动,也不能在同一天使用两次号码。

    (node, timestamp) 为了足够精细的时间戳,而不是你的数字?

        2
  •  2
  •   jason    15 年前

    为什么不提供一个小服务,可以根据要求分发ID呢?这可扩展到多台计算机,如果需要更改ID分配算法,则不需要更改客户端。这是相当简单的实现和相当容易保持向前。

        3
  •  0
  •   Falaina    15 年前

    我真的认为最好的方法是让一台机器对那些写东西到磁盘的请求(如果你想避免太多的查询,甚至是数字范围)进行编号。

    如果你真的反对它,你可以非常聪明地使用方法1,如果你能保证数字的消耗率。例如,机器可以使用当前时间来确定其范围内的开始位置。一、 如果是中午,从我的射程中间开始。如果您可以对每秒生成的数字量(或通用时间间隔)设置上限,则可以对此进行调整。这仍然存在浪费标记的问题,并且非常复杂,只是为了避免将单个数字写入磁盘。