4

我希望在只读事务中执行的 Spring-Hibernate 应用程序中的所有查询都被分派到 PostgreSQL 从属服务器,并将所有读写事务查询分配给主服务器。

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

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

4

1 回答 1

0

这是一个令人惊讶的复杂问题,答案并不简单。您需要记住,您必须以这样一种方式进行分派,即进行分派的层知道事务是否可能是只读的。

最干净的解决方案可能是在中间件中实现调度。这具有作为函数式调度的优点——我们知道我们正在尝试做什么,所以让我们在那里调度......当然,函数可以在什么是只读的和什么是可写的方面造成一些知识差距......

第二种选择是可以使用 PGPool 之类的东西进行调度。我希望您可能希望在这些情况下避免使用服务器端准备好的查询,因为您提供的中间层知识越多,您遇到的问题就越少。

于 2013-12-07T09:42:46.533 回答