如何处理Bucardo Postgresql多主环境中的序列问题

4
我们正在三个不同的Postgresql服务器上设置数据库(未来可能还有更多),目前使用bucardo multi-master组同步所有表。
我们没有同步序列;我们尝试过,当在不同的服务器上的同一张表中发生同时写入时,我们注意到bucardo会让我们丢失数据。由于它们使用相同的键,因此在同步时间,bucardo选择放弃其中一个重复行。
我们目前的方法是在每个数据库实例上手动为序列命名空间。例如,实例1保持不变,所有instance2表序列都更新为从2 ^ 31/10开始,instances3表序列将从2 ^ 31/10 * 2起始更改..实例10序列将从2 ^ 31/10 * 9开始。
您对这种方法有何看法?对于Bucardo多主设置,您还有什么其他建议?由于Postgresql BDR尚未被认为是稳定版本,因此不是选项。
1个回答

0

在使用Bucardo进行多源设置时,不应该复制序列,否则会导致冲突。

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

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

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

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

如果您不受限于使用自增主键,其他好的选择是使用UUID,但是肯定会有注意事项


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接