【发布时间】:2019-06-05 22:08:49
【问题描述】:
我想使用这个 Go 包 https://github.com/bwmarrin/snowflake 为我在 Postgresql 中的表生成主 int64 键。如果我的应用程序服务器至少在两台机器上运行,我如何防止生成重复密钥?
【问题讨论】:
标签: database postgresql go cloud
我想使用这个 Go 包 https://github.com/bwmarrin/snowflake 为我在 Postgresql 中的表生成主 int64 键。如果我的应用程序服务器至少在两台机器上运行,我如何防止生成重复密钥?
【问题讨论】:
标签: database postgresql go cloud
所以雪花提供了存储在 int64 中的 63 位整数。根据文档,每个节点 ID 每毫秒可以生成 4096 个唯一 ID。让我们采用默认实现。即每毫秒 4096 * 1023 = 40961023 个 id,如果您在一秒钟内计算,您可以跨多个节点生成数十亿个唯一 id,并且很少会发生冲突。
所以我认为如果你在服务器的 env 变量中传递一个节点 id 并基于它生成 id,你应该是安全的。
它还有助于根据实体或域为 id 添加一些前缀,以便获得更多的熵,从而更少地减少冲突。
【讨论】: