我们正在三个不同的Postgresql服务器上建立一个数据库(将来可能会在更多的服务器上),目前使用bucardo多主组同步所有的表。
我们没有同步序列;我们尝试了一下,发现bucardo在不同服务器上对同一个表进行同步写操作时会导致数据丢失。因为它们使用相同的键,所以在同步时bucardo选择删除其中一个重复的行。
我们当前的方法是在数据库的每个实例上手动命名序列。例如,instance 1保持原样,所有instance2表序列更新为从2^31/10开始,instances3表序列将更改为从2^31/10*2开始。Instance10序列从2^31/10*9开始。
您对这种方法有什么看法?您对Bucardo多主机设置有什么其他建议?Postgresql BDR不是一个选项,因为它还不是一个稳定的版本。
序列不能在Bucardo的多源设置中复制,否则会产生冲突。
以不同的大数开始序列是一种常见、有效的方法。我的问题是:
- 如果你使用"语义"到自动增量主键,如"插入顺序"
- 你如何对数据进行推理
- 将在每个数据库中生成的预期行数。例如,如果您的大多数行将仅从一个源生成,那么在所有源中放置相同数量的可用自动增量可能不是最佳策略。
如果同步中只有两个源,我的首选策略是一个使用奇数,另一个使用偶数。
如果有多达9个源,对我来说很容易推断数据设置自动增量值为10,并以不同的数字启动每个db, 1,2,…所以,第一个数据库;将生成1,11,21,…第二2,12,22…这种方法的一个好处是,如果您从四个源开始并且需要另一个源,则不需要更改任何内容。在您建议的策略中,如果您在4个数据库之间分割所有可用空间,并且需要再次分割另一个数据库,那么空间将更加困难。
如果您不限于使用自动增量主键,其他好的选择是使用UUID,但它肯定有警告。