确保在多台计算机中的表中生成的唯一键



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

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

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

它还有助于根据实体或域向id添加一些前缀,以便获得更多熵,从而减少冲突。

最新更新