我想使用这个 Go 包 https://github.com/bwmarrin/snowflake为我在 Postgresql 中的表生成主 int64 键。如果我的应用程序服务器至少在两台机器上运行,我该如何防止生成重复的 key ?
最佳答案
所以 snowflake 提供了 63 位整数存储在一个 int64 中。根据文档,您可以每毫秒为每个节点 ID 生成 4096 个唯一 ID。让我们采用默认实现。即每毫秒 4096 * 1023 = 40961023 个 ID,如果您在一秒钟内计算,您可以在多个节点上生成数十亿个唯一 ID,并且很少会发生冲突。
所以我认为如果您在服务器的 env 变量中传递一个节点 ID 并基于它生成 ID,您应该是安全的。
它还有助于根据实体或域向 id 添加一些前缀,以便您获得更多的熵,从而减少冲突甚至更少。
关于database - 确保在多台机器上跨表生成唯一的 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56468686/