Java MongoDB负载平衡的Hibernate配置

Java MongoDB负载平衡的Hibernate配置,java,mongodb,hibernate,database-replication,hibernate-ogm,Java,Mongodb,Hibernate,Database Replication,Hibernate Ogm,我有一个带有3个节点的小型mongoDB集群(没有切分,只有复制)。现在,对主节点的插入正在按预期将新数据传播到辅助节点(基本复制)。我正在使用java和hibernate 现在,我想要的是在整个副本集中对读取请求进行负载平衡,而不是始终使用主节点来服务数据。是否有某种方式可以让hibernate(通过查询字符串)知道可用的服务器,并以某种方式hibernate(随机或系统地)分发请求?实现负载平衡的正确方法是什么?您要查找的设置称为“读取首选项”。如果查看,您会发现: hibernate.og

我有一个带有3个节点的小型mongoDB集群(没有切分,只有复制)。现在,对主节点的插入正在按预期将新数据传播到辅助节点(基本复制)。我正在使用java和hibernate


现在,我想要的是在整个副本集中对读取请求进行负载平衡,而不是始终使用主节点来服务数据。是否有某种方式可以让hibernate(通过查询字符串)知道可用的服务器,并以某种方式hibernate(随机或系统地)分发请求?实现负载平衡的正确方法是什么?

您要查找的设置称为“读取首选项”。如果查看,您会发现:

hibernate.ogm.mongodb.read\u首选项

指定对MongoDB数据存储发出读取时要应用的ReadPreference。可能的设置为( ReadPreferenceType枚举):主要、主要优先、次要、, 次优且最近


在这种情况下,您可能会使用SECONDARY_PREFERRED,这实际上意味着读取操作将默认路由到从属节点,但如果主节点是唯一可用的节点,hibernate将返回到主节点。

看起来很有希望,尝试一下。知道如何记录hibernate读取操作的主机名吗?只是想交叉确认设置此属性实际上是从辅助节点读取数据。您可以在org.hibernate上临时启用跟踪日志。这有点冗长,但确实起到了作用。这里缺少的是,根据写关注点的不同,从二级读取不一定会返回与从一级读取相同的数据。复制只提供最终的一致性。