确保在一台以上机器中跨表的唯一生成键

时间:2019-06-05 22:08:49

标签: database postgresql go cloud

我想使用此Go包https://github.com/bwmarrin/snowflake为Postgresql中的表生成主int64键。如果我的应用程序服务器至少在两台计算机上运行,​​如何防止生成重复的密钥?

1 个答案:

答案 0 :(得分:1)

所以雪花提供了存储在int64中的63位整数。根据文档,每个节点ID可以每毫秒生成4096个唯一ID。让我们以默认实现为例,即每毫秒4096 * 1023 = 40961023 id,如果一秒钟计算,您可以在多个节点上生成数十亿个唯一id,并且很少会发生冲突。

所以我认为,如果您在服务器的env变量中传递节点ID并基于该ID生成ID,那您应该是安全的。

这还有助于根据实体或域在ID上添加一些前缀,以使您获得更多的熵,从而减少冲突的可能性甚至更低。