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

时间:2016-02-22 11:09:40

标签: algorithm sorting hash

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

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

我的问题是我有一个客户期望唯一的32位ID。这些ID也需要是数字,唯一和顺序的。但上面的时间戳目前是~43位。

我可以将它们哈希下来,但后来我失去了顺序和数字属性。我可以砍掉前10-15位或最后一位,但后来我可能会失去唯一性。有人建议接受第一条记录不是在2010年1月1日之前,所以请timestamp - (40 years)。我不喜欢它,并且在一年内有足够的毫秒来使它不起作用。

有什么好处理方法吗?

1 个答案:

答案 0 :(得分:1)

如果您需要能够处理即使在ms时差中的记录,也无法将时间戳压缩到32位而不存在冲突风险。仅仅因为某天可能有超过2 ^ 32条记录。

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

我看到以下可能性:

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

    < / LI>
  2. 如果您可以修改记录的时间戳,您可以采用上述方法,如果要将两个记录放在一起,您可以简单地修改后一个记录的时间戳,使时间戳的高32位唯一。只要记录的平均速率小于每4秒一个记录,这就可以工作。 [缺点:记录的时间戳不再是创建时间,但仍然或多或少可以确定]