RethinkDB 如何生成自动 ID?
How does RethinkDB generate auto ids?
我正在编写一个脚本,该脚本应该合并来自基于 sql 的数据库的一些数据。每行都有一个长整数作为主键(增量)。我正在考虑对这些 ID 进行哈希处理,以便它们以某种方式 'look' 与我的 RethinkDB table 中已有的其他 ID 一样。我在这里想要实现的是避免在尝试再次合并相同数据时出现重复,但是将原始整数作为 id 以及生成的数据 id 直接保存到 RethinkDB 的 table 感觉很奇怪.
我能做到吗?
RethinkDB 是如何生成自动 ID 的?
我是否正确处理了这个问题?
RethinkDB 使用 128 位 UUID(基本上是哈希整数)的字符串编码。
字符串格式如下所示:“HHHHHHHH-HHHH-HHHH-HHHH-HHHHHHHHHHHH” 其中每个 'H' 都是 128 位整数的十六进制数字。使用字符 0-9 和 a-f(小写)。
如果您想从现有整数生成此类 UUID,我建议先对整数进行哈希处理。这将使您在整个密钥 space 上均匀分布(这使分片更容易并避免热点)。
作为第二步,您必须将散列值格式化为上述格式的字符串。如果您没有足够的数字,可以将最后的一些 'H' 保留为常量 0.
如果你真的想深入了解 UUID 生成的细节,这里有两个链接可供进一步阅读:
- RFC 4122“通用唯一标识符 (UUID) URN 名称space”https://www.rfc-editor.org/rfc/rfc4122
- RethinkDB对UUID生成和格式化的实现https://github.com/rethinkdb/rethinkdb/blob/next/src/containers/uuid.cc
我正在编写一个脚本,该脚本应该合并来自基于 sql 的数据库的一些数据。每行都有一个长整数作为主键(增量)。我正在考虑对这些 ID 进行哈希处理,以便它们以某种方式 'look' 与我的 RethinkDB table 中已有的其他 ID 一样。我在这里想要实现的是避免在尝试再次合并相同数据时出现重复,但是将原始整数作为 id 以及生成的数据 id 直接保存到 RethinkDB 的 table 感觉很奇怪.
我能做到吗? RethinkDB 是如何生成自动 ID 的? 我是否正确处理了这个问题?
RethinkDB 使用 128 位 UUID(基本上是哈希整数)的字符串编码。
字符串格式如下所示:“HHHHHHHH-HHHH-HHHH-HHHH-HHHHHHHHHHHH” 其中每个 'H' 都是 128 位整数的十六进制数字。使用字符 0-9 和 a-f(小写)。
如果您想从现有整数生成此类 UUID,我建议先对整数进行哈希处理。这将使您在整个密钥 space 上均匀分布(这使分片更容易并避免热点)。 作为第二步,您必须将散列值格式化为上述格式的字符串。如果您没有足够的数字,可以将最后的一些 'H' 保留为常量 0.
如果你真的想深入了解 UUID 生成的细节,这里有两个链接可供进一步阅读:
- RFC 4122“通用唯一标识符 (UUID) URN 名称space”https://www.rfc-editor.org/rfc/rfc4122
- RethinkDB对UUID生成和格式化的实现https://github.com/rethinkdb/rethinkdb/blob/next/src/containers/uuid.cc