如何自动将只读事务分派给slave

时间:2013-11-09 19:12:16

标签: postgresql spring-transactions master-slave

我希望我的Spring-Hibernate应用程序在只读事务中执行的所有查询都可以调度到PostgreSQL从服务器,并且所有读写事务查询都可以发送给主服务器。

在Spring中使用注释驱动的事务时,如果事务被定义为只读,则PostreSQL驱动程序只允许执行选择查询,这很明显,但是没有提到驱动程序在主服务器中的行为方式奴隶配置。例如,MySQL驱动程序具有复制连接类,该类自动将只读事务查询分派给从属。

一种解决方案是使用多个Hibernate会话工厂,并使用指向slave的一个用于选择而另一个用于更新,但这将是太多的手动处理。我该如何设计呢?

1 个答案:

答案 0 :(得分:0)

这是一个非常复杂的问题,答案并不简单。您需要记住,您必须以这样的方式调度此调度,以便执行调度的层知道事务是否可能是只读的。

最干净的解决方案可能是在中间件中实现调度。这有一个功能派遣的优势 - 我们知道我们想要做什么,所以让我们在那里发送......当然,功能可以在只读和写入内容中创造一点知识差距....

第二种选择是人们可能会派遣类似PGPool之类的东西。我希望您可能希望在这些情况下避免服务器端准备的查询,因为您提供中间层的知识越多,您将遇到的问题就越少。