繁体   English   中英

在 Cloud Spanner 中存储 UUID

[英]Storing a UUID in Cloud Spanner

我想使用 UUID 作为 Cloud Spanner 中的主键。 读写 UUID 的最佳方式是什么? 是否有 UUID 类型或客户端库支持?

最简单的解决方案就是将其存储为标准RFC 4122格式的字符串。 例如:

d1a0ce61-b9dd-4169-96a8-d0d7789b61d9

这将需要 37 个字节来存储(36 个字节加上一个长度字节)。 如果你真的想保存每个可能的字节,你可以将你的 UUID 存储为两个 INT64。 但是,您需要编写自己的库来序列化/反序列化这些值,并且它们在您的 SQL 查询中看起来不会很漂亮。 在大多数情况下,每行额外节省约 21 个字节可能不值得。

请注意,某些 UUID 生成算法会根据时间戳顺序生成 UUID。 如果机器生成的 UUID 值是单调递增的,那么这会导致 Cloud Spanner 中的热点(这类似于使用时间戳作为主键开头的反模式),因此最好避免这些变体(例如,不推荐使用 UUID 版本 1)。

这个Stackoverflow 答案提供了有关各种 UUID 版本的更多详细信息 (TL;DR:由于在生成中使用了伪随机数,因此将版本 4 与 Cloud Spanner 一起使用)

根据 Cloud Spanner文档

有几种方法可以将 UUID 存储为主键:

  • 在 STRING(36) 列中。
  • 在一对 INT64 列中。
  • 在 BYTES(16) 列中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM