3

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

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

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

您对这种方法有何看法?您对 Bucardo 多主机设置有什么其他建议?Postgresql BDR 不是一个选项,因为它还不是一个稳定的版本。

4

1 回答 1

0

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

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

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

如果同步中只涉及两个来源,我首选的策略是使用奇数作为一个,而对另一个使用偶数。

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

如果您不限于使用自动增量主键,其他不错的选择是使用 UUID,但肯定有一些警告

于 2020-07-04T17:48:21.083 回答