【问题标题】:How to handle sequences in Bucardo Postgresql multi master如何在 Bucardo Postgresql 多主机中处理序列
【发布时间】:2015-06-10 09:47:41
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: postgresql replication database-replication bucardo


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-10-18
      • 2012-11-27
      • 2018-10-10
      • 1970-01-01
      • 2014-02-06
      • 2016-08-16
      • 2012-11-04
      • 1970-01-01
      • 2020-10-16
      相关资源
      最近更新 更多