我们正在三个不同的 Postgresql 服务器上设置一个数据库(将来可能会在更多服务器上),目前使用 bucardo 多主组同步所有表。
我们不同步序列;我们尝试过,我们注意到当同时写入发生在不同服务器上的同一个表中时,布卡多会让我们丢失数据。由于它们使用相同的密钥,因此在同步时 bucardo 选择删除重复行之一。
我们当前的方法是手动为数据库的每个实例上的序列命名空间。例如。实例1保持原样,所有实例2表序列更新为从2^31/10开始,实例3表序列将更改为从2^31/10*2开始..实例10序列从2^31/开始10*9。
您对这种方法有何看法?对于布卡多多主机设置您还有什么其他建议? Postgresql BDR 不是一个选项,因为它尚未被视为稳定版本。
不得在 Bucardo 的多源设置中复制序列,因为会出现冲突。
以不同的大数字开始序列是一种常见、有效的方法。对我来说有一个问题:
- 如果对自增主键应用“语义”,比如“插入顺序”
- 你如何推理数据
- 每个数据库中将生成的预期行数。例如,如果大多数行仅从其中一个源生成,那么在所有源中放置相同数量的可用自动增量可能不是最佳策略。
如果同步中只涉及两个源,我的首选策略是一个使用奇数,另一个使用偶数。
如果最多有 9 个源,对我来说很容易推断数据将自动增量值设置为 10,并以不同的数字 1、2、... 启动每个数据库,因此“第一个数据库”将生成 1 , 11, 21, ... 第二个 2, 12, 22, ... 这种方法的一个好处是,如果您从四个源开始并需要另一个源,则无需更改任何内容。在您建议的策略中,如果您将所有可用空间拆分为 4 个数据库,并且需要再次拆分另一个数据库,则空间会更加困难。
如果您不限于使用自动增量主键,其他不错的选择是使用 UUID,但可以肯定它有警告 https://www.depesz.com/2020/02/19/why-im-not-fan-of-uuid-datatype/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)