Postgresql冗余只读查询,按需刷新



我想知道是否有任何postgresql工具可以根据需要方便地复制到只读服务器。以下是问题描述:

  • 每个数据更改过程都是作为多个事务运行的(过程很复杂,例如加载数据、运行计算、运行更多数据等)。在过程完成之前,我认为数据库的报告不一致。

  • 报告应该只使用一致的数据,但不应该等待数据更改过程完成——它们应该使用旧的(连续)数据。

理想情况下,报告应该在数据库的一致快照上运行。解决这个问题的思路如下:

  • 有两个服务器-主服务器和从服务器。最初两者都有完全相同的数据
  • 所有数据更改过程都将在master上运行
  • 所有报告任务都将在从属服务器上运行
  • 一旦数据更改过程完成,就会触发从机的刷新。例如,触发器是:运行一些命令,在文件系统上创建一个文件,等等。不允许读取部分刷新的slave。
    • 这不会花费太长时间-应该与master上更改的大小成比例

Slave不会用于故障转移,这不是目的。

这个问题有什么好的解决办法吗?或者也许可以用不同的方式解决?

看起来有一个很好的解决方案。Postgres>=9.2可以导出当前事务的快照id。每个使用相同快照id的事务在开始时都会看到相同的数据。

在我的情况下,我可以创建一个"伪"事务并导出它的快照。伪事务不会做任何事情,它会在流程开始时开始,在流程结束时结束。所有报告都将使用此快照id来报告创建虚拟事务时可见的数据。

有关快照的详细信息,请点击此处:https://www.willglynn.com/2013/10/25/postgresql-snapshot-export/

最新更新