首页 > 解决方案 > 使用 Mongo 和 SpringData 读取过时的数据

问题描述

对于我们基于 MongoDB Spring 框架的应用程序,我们正面临一些用户的陈旧问题陈旧读取问题。这是一个非常低容量的应用程序,每天的点击量不到 10K,而且创纪录的数量不到 100K 甚至更少。以下是我们的应用技术栈。

Mongo DB 版本 db 版本 v3.2.8。
编译组:'org.springframework.data',名称:'spring-data-mongodb',版本:'1.5.5.RELEASE'
编译组:'org.mongodb',名称:'mongo-java-driver',版本:'2.13.2'。

用户报告说,在插入或更新新记录的情况下,该值在一定时间内无法读取,例如半小时。之后,最新的阅读值得到反映,可供所有用户阅读。但是,当与 mongo 终端连接时,我们能够看到 DB 中的最新值。

我们确认报告的流中不涉及应用程序级缓存。同样对于 JSP,我们在报告的页面上添加了时间戳,并尝试了隐私浏览模式以排除任何浏览器问题。

我们还尝试在 MongoClient 和 Mongo Template 中更改 Write 关注点,但行为没有改变:

MongoClientOptions.builder().writeConcern(WriteConcern.FSYNCED).build(); //Mongo Client

mongoTemplate.setWriteConcern(WriteConcern.FSYNCED);  // Spring Mongo template
mongoTemplate.setWriteResultChecking(WriteResultChecking.LOG);

此外,数据库日志看起来很干净,MongoDB 日志上似乎没有生成异常或错误。

我们也没有引入任何新的库或数据库更改,并且此设置在过去 2 年中运行良好。任何指针都会有所帮助。

注意:它是一个单一的 mongo 实例,没有配置从属或辅助。

标签: mongodbspring-data-mongodb

解决方案


写关注不影响读取。

您很可能在您的应用程序或您的用户系统(如他们的网络浏览器)中有一些您忽略的缓存。

第二个可能的原因是您正在从辅助阅读(即使用除主要阅读偏好之外的任何内容)。


推荐阅读