我们在基于 Java EE 的应用程序中使用 Mongo DB。根据我们应用程序的架构,Mongo DB 通过不同的线程不断更新(保持 Mongo DB 始终忙碌)。
因此,Mongo DB 一直忙于读取、写入和更新。
我们有一个担忧。我们观察到的是,当 Mongo DB 处于其 peek 利用率时(通过top
linux 中的命令知道),来自 Mongo DB 的读取会获取错误的值。
有时这是可重现的,有时则不是,这取决于负载。
请让我们知道如何解决此问题。
我们在基于 Java EE 的应用程序中使用 Mongo DB。根据我们应用程序的架构,Mongo DB 通过不同的线程不断更新(保持 Mongo DB 始终忙碌)。
因此,Mongo DB 一直忙于读取、写入和更新。
我们有一个担忧。我们观察到的是,当 Mongo DB 处于其 peek 利用率时(通过top
linux 中的命令知道),来自 Mongo DB 的读取会获取错误的值。
有时这是可重现的,有时则不是,这取决于负载。
请让我们知道如何解决此问题。
由于使用 SlaveOk:true 时 mongoDB 中的异步复制,您还从辅助节点读取,但数据肯定不存在。特别是当你有很大的负载时,网络上的复制会变慢,这称为复制滞后,你可以检查它:http://docs.mongodb.org/manual/reference/method/db.printSlaveReplicationInfo/#db。 printSlaveReplicationInfo
如果您使用 slaveOk : false 关闭从辅助节点的读取,您的应用程序将从主节点读取,以减少在这种情况下使用分片的负载,并且如果您有适当的复制结构,则不必担心主节点会出现故障,一个辅助节点将接管。