首页 > 解决方案 > 如何按顺序生成 UUID 以使两个连续 uuid 之间的差异为 1?

问题描述

我正在研究基于游标的分页,需要一个顺序的唯一列,因此它会给出正确的获取结果。我知道这可以通过将列设置为具有数据类型 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。

标签: javapaginationuuid

解决方案


您问:

如何按顺序生成 UUID 以使两个连续 uuid 之间的差异为 1?

不,您不能生成连续的 UUID 值。

您误解了 UUID 的目标。

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

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

甚至 UUID 中的内容类型也可能会有所不同,已经定义了多个版本的 UUID 。一个版本代表空间和时间点,另一个版本几乎是完全随机的,还有其他版本可以使用其他方式生成。但都是有效的 UUID,可以一起使用。


推荐阅读