将 ms 时间戳转换为顺序唯一的 32 位数字



我有一个表格,其中每条记录都有一个字段,用于显示创建时的时间戳(以毫秒为单位)。这为每条记录提供了一个唯一的 ID,以及顺序排序。记录12345678与12222222不同,并且排在之后。

不是每毫秒甚至每秒都有记录(尽管速率可能会增加)。

我的问题是我有一个客户端需要唯一的 32 位 ID。这些 ID 还需要是数字、唯一和连续的。但上述时间戳目前为 ~43 位。

我可以将它们散列下来,但随后我丢失了顺序和数字属性。我可以砍掉前 10-15 位或最后一个位,但这样我可能会失去唯一性。有人建议接受第一张唱片不是在 2010 年 1 月 1 日之前,所以timestamp - (40 years) .我不喜欢它,一年中有足够的毫秒数来使其不起作用。

有什么好的方法可以解决这个问题吗?

如果您需要能够在毫秒时差中处理记录,则无法在没有冲突风险的情况下将时间戳压缩到 32 位。仅仅因为有一天可能会有超过 2^32 条记录。

我如何理解您的问题,您需要能够稍后通过 id 找到记录,并且您无法将 32 位 id 存储在记录中。这是对的吗?

我看到了以下可能性:

  1. 您可以确保每 4 秒不超过一条记录,只需删除 43 位时间戳的最后 12 位即可。但是,如果您的时间戳增加到 44 位,这将不再有效

  2. 如果您可以修改记录的时间戳,
  3. 则可以采用上述方法,如果两条记录要接近在一起,则可以简单地修改后一条记录的时间戳,以使时间戳的前32位是唯一的。只要平均记录速率小于每 4 秒一条记录,这将起作用。[缺点:记录的时间戳不再完全是创建时间,但或多或少还可以]

最新更新