让我们假设我们有一个带有ID,CONTENT和TIMESTAMP的分布式表。该ID是散列(CONTENT),并且CONTENT具有足够的确定性,可以在系统的多个位置输入,紧接着彼此。
假设发生了某种现实生活事件。就像有人赢得奥运会一样。然后,除了时间戳之外,它总是在一个总是看起来相同的记录中进入这个数据库。因为每台机器都会以稍微不同的延迟来观察事件。
因此。当机器同步这个分布式表格时,他们会想知道“我们已经拥有了这个确切的ID!它也不是一个完全相同的行!我们该怎么做!?”。我想以下列形式给出答案:bool compare(row a, row b)
或者最好是row merge(row a, row b)
。
有谁知道怎么做?我只能找到与合并两个不同表相关的“合并”内容,而事实上这只是相同的表,只是分发。
对我来说,这对于让我的系统“最终保持一致”非常重要。我想利用postgresql的分布式数据库机制,因为它们非常可靠,我不想重写它们。
答案 0 :(得分:2)
PostgreSQL没有“分布式数据库”功能。你不能重写它们或避免重写它们,因为它们不存在,我很好奇你从哪里获得可靠性信息。
我能想到的最接近的是a 3rd party addon called Bucardo,它通过冲突解决方案进行多主复制。
您也可能考虑Postgres-XC,但该项目旨在生成同步,一致,透明的多主集群,因此首先不会解决冲突。
还有Rubyrep;我不知道它是否符合你的需要。
将来,PostgreSQL将支持类似于你所描述的内容,logical replication / bi-directional replication,但它现在是pre-alpha质量,并且很可能最终落在PostgreSQL 9.5中。