sql - 分布式postgresql ID冲突处理

标签 sql postgresql merge distributed eventual-consistency

假设我们有一个带有 ID、CONTENT 和 TIMESTAMP 的分布式表。 ID 是 hash(CONTENT) 并且 CONTENT 具有足够的确定性,可以在系统的多个位置依次输入。

假设现实生活中发生了一件大事。就像有人赢得了奥运会。然后,它会以一条记录的形式进入该数据库,该记录除了时间戳外始终看起来相同。由于每台机器以略有不同的延迟观察事件。

所以。当机器同步这个分布式表时,他们会想“我们已经有了这个确切的 ID!它也不是同一行!我们应该怎么做!?”。我想以以下形式给他们答案:bool compare(row a, row b) 或者,最好是 row merge(row a, row b)

有人知道怎么做吗?我只能找到与合并两个不同表相关的“合并”内容,而实际上这是相同表,只是分布式的。

对我来说,这对于使我的系统“最终保持一致”非常重要。我想利用 postgresql 的分布式数据库机制,因为它们非常可靠,我不想重写它们。

最佳答案

PostgreSQL 没有“分布式数据库”特性。您不能重写它们或避免重写它们,因为它们不存在,我很好奇您从哪里获得可靠性信息。

我能想到的最接近的tihng是a 3rd party addon called Bucardo ,它通过冲突解决进行多主复制。

您也可能想到了 Postgres-XC ,但该项目旨在生成一个同步、一致、透明的多主集群,因此一开始就没有冲突解决方案。

还有Rubyrep;我对它的了解还不够,无法确定它是否满足您的需求。

将来 PostgreSQL 将支持类似于您所描述的内容,使用 logical replication / bi-directional replication ,但它目前是 pre-alpha 质量,并且可能最快登陆 PostgreSQL 9.5。

关于sql - 分布式postgresql ID冲突处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21497117/

相关文章:

mysql - 使用 MySQL 进行快速交叉表更新

sql - 如何重置Sql Server 2008数据库?

mysql - 在MySQL中先按数字然后按字母对记录进行排序

postgresql - 与直接 sql 相比,Postgres 9.6 函数的性能较差

MySQL:试图将数据填充到另一个表的一列中

xml - git rerere 如何找出两个冲突之间的相似之处?

sql-server-2008 - 您能否指定在 SQL Server 2008 MERGE 语句中插入不匹配行的顺序?

MySQL拒绝使用索引进行简单查询

sql - 仅当 2 个或更多列匹配时才选择 - postgresql

用于连接两个表并提取重复条目的 SQL 查询