如何检测PostgreSQL从站是否与主站上的已知事务一致?

时间:2014-04-06 02:35:50

标签: postgresql replication

我正在为我的Web应用程序制定一个主/从架构,其中从从站读取的前端只有在从站始终与请求客户端触发的最后一次已知写入时保持一致时才必须这样做。只要它们与其他用户的写入不一致,而不是请求用户的写入,从属设备可能与主设备不一致。

所有写入都发送到主设备这很容易,但诀窍是知道何时向主设备发送读取而不是从设备。

我想做的是:

  • 在写入请求中,在提交所有写入之后的请求处理阶段结束时,请对数据库的当前事务指针进行某种读取,并将其存储在客户端响应的cookie中。

  • 在读取请求中,从此cookie获取值,并首先检查从属是否已捕获到此事务指针位置。如果它被抓住了,删除cookie并愉快地从奴隶那里读。如果没有,请从主人那里读取并保留cookie。

我不确定在主服务器和从服务器上使用什么特定功能来实现它,或者它们是否存在。我想避免在表中必须显式更新和查询的专用计数器的开销,因为我认为PG已经以某种方式为我做这个。但是,如果有必要,我可以这样做。

主人的{p> pg_current_xlog_location和奴隶的pg_last_xlog_replay_location看起来很有希望,但是,我不知道这些是否能够可靠地完成工作:

  • 空闲主机和被锁定的从机总是会报告这些功能完全相同的值吗?

  • 他们的返回值的语法让我感到困惑,例如0/6466270 - 如何将这个字符串转换为一个整数,我可以可靠地做一个简单的大于或小于比较

注意:我打算在热备用模式下使用带有从服务器的流复制,如果这会影响可用的解决方案。我目前正在使用9.1,但如果有帮助,我会接受升级。

0 个答案:

没有答案