java - 如何按顺序生成 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。
解决方案
您问:
如何按顺序生成 UUID 以使两个连续 uuid 之间的差异为 1?
不,您不能生成连续的 UUID 值。
您误解了 UUID 的目标。
UUID 是无需通过中央机构协调即可生成的标识符。这样就排除了诸如 1, 2, 3, ... 之类的序列。
UUID 旨在 (a) 几乎是唯一的,并且 (b) 具有任意值。队列中的下一个 UUID 是不可预测的。
甚至 UUID 中的内容类型也可能会有所不同,已经定义了多个版本的 UUID 。一个版本代表空间和时间点,另一个版本几乎是完全随机的,还有其他版本可以使用其他方式生成。但都是有效的 UUID,可以一起使用。
推荐阅读
- django - Django搜索分页错误,每次我尝试移动到第2页时找不到页面错误
- javascript - 有没有办法将 Particlesbg 限制为仅组件,使其不覆盖整个 App.vue 背景
- mediawiki - MediaWiki API:搜索特定命名空间中的页面,包含子字符串(不是前缀)
- mysql - 为什么我不使用mysql时它正在运行?
- tensorflow - 如何将 PostgreSQL 数据库的输出从 TensorFlow IO 馈送到 tf.keras Sequential Model
- python - Apache Airflow 中的 Python 变量不保存数据
- powerbi - 在 PowerBI 中从另一个表中减去一个表的值
- amazon-web-services - 您如何正确配置 aws-vault 以使用 Ubuntu Linux 20.04 LTS?
- flutter - 如何编辑插件以使其适用于桌面应用程序
- apache-spark - 如何在单个 spark sql 查询中投射西班牙日期 (14-ENE-2021)?