【问题标题】:Ensuring unique generated keys across tables in more than one machine确保在多台机器上的表中生成唯一的密钥
【发布时间】:2019-06-05 22:08:49
【问题描述】:

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

【问题讨论】:

    标签: database postgresql go cloud


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-18
      • 1970-01-01
      • 2010-09-08
      • 2023-04-04
      • 2015-03-06
      • 1970-01-01
      • 2012-04-09
      相关资源
      最近更新 更多