database - 确保在多台机器上跨表生成唯一的 key

标签 database postgresql go cloud

我想使用这个 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/

相关文章:

sockets - 将 net.Conn.Read 用于持久 TCP 套接字的正确方法是什么

java - Hibernate Envers 不创建修订

database - sqoop如何处理SQL Server DB锁?

c++ - 有什么好的方法可以像 excel 一样在 MFC/c++ 程序中插入一个控件?

node.js - 调试 Node.js 中的内存不足错误

postgresql - 如何在 PostgreSQL 中执行仅模式备份和还原?

postgresql - 带有 UUID 主键的 CakePHP ACL

sql - 将 Oracle SQL Select 转换为 PostgreSQL Select

go - 使用Go通过GCP发布/订阅设置Gmail推送通知

curl - 在 Golang 中使用 curl 在网站上搜索字符串最有效和可扩展的等价物是什么?