丹尼尔·维里特:在纯SQL中实现UUID v7

💡 原文英文,约1900词,阅读约需7分钟。
📝

内容提要

2024年5月,IETF标准的UUID(通用唯一标识符)通过RFC 9562进行了更新,正式确认了UUID版本7。与以前的版本相比,这个版本在数据库索引中是更好的选择,因为它的值是按顺序生成的。尽管PostgreSQL还没有内置的生成UUID v7的函数,但是可以通过纯SQL实现这个功能。文章介绍了如何使用纯SQL实现UUID-v7的功能,并提供了相应的代码。同时,还讨论了UUID-v7生成值时可能出现的问题,并提供了解决方案。最后,文章还介绍了如何将UUID-v7用作分区键,并提供了相应的函数。

🎯

关键要点

  • 2024年5月,IETF标准的UUID通过RFC 9562更新,正式确认UUID版本7。
  • UUID版本7在数据库索引中是更好的选择,因为其值按顺序生成。
  • PostgreSQL尚未内置生成UUID v7的函数,但可以通过纯SQL实现。
  • 文章介绍了如何使用纯SQL实现UUID-v7的功能,并提供了相应的代码。
  • UUID-v7的结构包括Unix时间戳、版本字段和随机数据。
  • 生成UUID-v7的方法是从UUID v4开始,覆盖特定位以插入时间戳和版本号。
  • 生成值时可能出现的问题包括毫秒精度不足,导致相邻UUID不排序。
  • 可以通过忽略问题、使用计数器或使用亚毫秒精度来解决生成值的排序问题。
  • UUID-v7允许使用rand_a字段提供12位的额外时间精度。
  • 文章提供了使用UUID-v7作为分区键的示例,并介绍了如何生成分区边界。
  • 可以提取UUID-v7中的时间戳,函数返回毫秒部分。
  • UUID-v7可以在现有版本的PostgreSQL中使用,或通过应用程序生成。
  • SQL函数可以在任何环境中创建,并已打包为可用的扩展。
🏷️

标签

➡️

继续阅读