postgresql - 如何在 Bucardo Postgresql multi master 中处理序列

标签 postgresql replication database-replication bucardo

我们正在三个不同的 Postgresql 服务器上设置一个数据库(将来可能会更多),目前使用 bucardo 多主组同步所有表。

我们不同步序列;我们试过了,我们注意到当在不同服务器上的同一个表中发生同时写入时,bucardo 会让我们丢失数据。由于它们使用相同的 key ,因此在同步时 bucardo 选择删除其中一个重复行。

我们目前的方法是在每个数据库实例上手动命名序列。例如。 instance 1 保留原样,所有 instance2 表序列更新为从 2^31/10 开始,instance3 表序列将更改为从 2^31/10*2 开始 .. instance10 序列从 2^31/开始10*9.

您对这种方法有何看法?对于 Bucardo 多主机设置,您还有哪些其他建议? Postgresql BDR 不是一个选项,因为它尚未被视为稳定版本。

最佳答案

不得在 Bucardo 的多源设置中复制序列,因为会出现冲突。

以不同的大数字开始序列是一种常见且有效的方法。对我来说,问题是:

  • 如果对自增主键应用“语义含义”,如“插入顺序”
  • 你如何推理数据
  • 将在每个数据库中生成的预期行数。例如,如果您的大部分行仅从一个来源生成,那么在所有来源中放置相同数量的可用自动增量可能不是最佳策略。

如果只有两个源参与同步,我的首选策略是一个使用奇数,另一个使用偶数。

如果最多有九个来源,对我来说很容易将自动增量值设置为 10 的数据进行推理,并以不同的数字启动每个数据库,1、2,...所以,“第一个数据库”将生成 1, 11, 21, ... second 2, 12, 22, ... 这种方法的好处是,如果您从四个来源开始并需要另一个来源,则不应更改任何内容。在您建议的策略中,如果您在 4 个数据库之间拆分所有可用空间,并且需要另一个数据库再次拆分空间会更加困难。

如果您不限于使用自动增量主键,其他好的选择是使用 UUID,但肯定 it have caveats .

关于postgresql - 如何在 Bucardo Postgresql multi master 中处理序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30752829/

相关文章:

mysql - 我如何在 PostgreSQL 中编写这个查询?

sql - 无法创建唯一索引 - 声称具有重复值但实际上没有

python - 如何使用 Robot 框架导入 PostgreSql 数据库转储?我们有任何现有的关键字吗?

SQL Server 2005事务复制无法发布包含索引创建的存储过程

node.js - Mongoose:在 ReplicaSet 上阅读

google-cloud-datastore - Google Datastore 跨区域复制

sql - 如何排除日期范围重叠的行

mysql - slave-skip-errors 是否避免从日志中删除错误

mysql - 通过 Kafka 与 mysql 事件进行复制

MYSQL 复制 - 在某些情况下不复制