如何在Bucardo Postgresql多主机中处理序列

时间:2015-06-10 09:47:41

标签: database postgresql replication database-replication bucardo

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

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

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

您对此方法有何看法以及您对Bucardo多主设置有何其他建议? Postgresql BDR不是一个选项,因为它还不被认为是一个稳定版本。

1 个答案:

答案 0 :(得分:0)

不得在Bucardo的多源设置中复制序列,因为这样会发生冲突。

以大数目开始序列是一种常见的有效方法。对我来说是一个关于以下问题:

  • 如果您对自动增量主键应用“语义”,例如“插入顺序”
  • 您如何看待数据
  • 每个数据库中将生成的预期行数。例如,如果大多数行仅由一个来源生成,那么最好不要在所有来源中添加相同数量的可用自动增量。

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

如果最多有九个数据源,对我来说,很容易将数据设置为10,然后将每个db以不同的数字1、2,...,“第一个数据库”启动,会生成1,11,21,...第二个2,12,22,...这种方法的好处是,如果您从四个来源开始,并且需要另一个来源,则什么都不应更改。在建议的策略中,如果您在4个数据库之间分配了所有可用空间,而又需要再拆分一个,那么该空间将更加困难。

如果您不限于使用自动增量主键,另一个不错的选择是使用UUID,但可以肯定使用it have caveats