我想在 Cloud Spanner 中使用 UUID 作为主键。读写 UUID 的最佳方式是什么?是否有 UUID 类型或客户端库支持?
最简单的解决方案是将其存储为标准中的 STRINGRFC 4122 https://www.rfc-editor.org/rfc/rfc4122格式。例如。:
"d1a0ce61-b9dd-4169-96a8-d0d7789b61d9"
这将需要 37 个字节来存储(36 个字节加上一个长度字节)。如果您确实想保存每个可能的字节,您可以将 UUID 存储为两个 INT64。但是,您需要编写自己的库来序列化/反序列化这些值,并且它们在 SQL 查询中不会显得非常漂亮。在大多数情况下,每行额外节省大约 21 字节可能不值得。
请注意,某些 UUID 生成算法根据时间戳顺序生成 UUID。如果机器生成的 UUID 值单调递增,则可能会导致 Cloud Spanner 中出现热点(这类似于使用时间戳作为主键开头的反模式),因此最好避免这些变体(例如不推荐 UUID 版本 1)。
This Stackoverflow 答案提供了有关各种 UUID 版本的更多详细信息 https://stackoverflow.com/a/20342413/295290。 (TL;DR:将版本 4 与 Cloud Spanner 一起使用,因为在生成过程中使用了伪随机数)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)