如何顺序生成UUID,使得两个连续的uuid之间的差值为1?

问题描述 投票:0回答:1

我正在研究基于游标的分页,需要一个连续的唯一列,因此它会给出正确的获取结果。我知道这可以通过将列设置为 datatype bigint 的 auto_increment 来解决,但最终它会达到它的限制,即 9223372036854775807。

所以我想生成一个如下所示的顺序UUID,其compareTo结果为1。

cf3ea0ca-282d-11ec-9624-a71256fa1790

cf3ea0cb-282d-11ec-9624-410ea2fdd62c

cf3ea0cc-282d-11ec-9624-3b1a2da8c7d0

cf3ea0cd-282d-11ec-9624-877d8646d279

我使用 https://github.com/cowtowncoder/java-uuid-generator 库生成了这些 UUID

UUID uuid = Generators.timeBasedGenerator().generate();

这就是生成 UUID 的方式,但它并没有给出一致的结果。

还有其他方法可以生成按升序排列的 UUID。

java pagination uuid
1个回答
7
投票

你问:

如何顺序生成UUID,使得两个连续的uuid之间的差值为1?

不可以,您无法生成连续的 UUID 值。

👉 您误解了通用唯一标识符(UUID)的目标。

UUID 是无需通过中央机构协调即可生成的标识符。这样就排除了诸如 1, 2, 3, … 之类的序列。

UUID 旨在 (a) 几乎唯一,并且 (b) 值任意。游行中的下一个 UUID 是不可预测的。

甚至 UUID 中的内容类型也可能有所不同,已经定义了多个“UUID 版本”,并且提出了一些“新版本”。一个版本代表“空间和时间中的一个点”,另一个版本“几乎完全随机”,还有其他版本可以使用其他方式生成。但都是有效的 UUID,可以一起使用。 新版本 6、7 和 8 UUID 的工作正在进行中。在这个尚未完成的规范草案中,UUID 的位被重新排列,以使日期部分按时间顺序排序。这种自然的排序将使数据库中的索引更加高效。

© www.soinside.com 2019 - 2024. All rights reserved.