mongodb - 使用 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 实例,没有配置从属或辅助。
解决方案
写关注不影响读取。
您很可能在您的应用程序或您的用户系统(如他们的网络浏览器)中有一些您忽略的缓存。
第二个可能的原因是您正在从辅助阅读(即使用除主要阅读偏好之外的任何内容)。
推荐阅读
- python - 如何选择点击的内容?
- java - 从一个队列推到另一个队列后如何拒绝消息?
- recursion - 如何在递归函数中返回正确的布尔值?
- mysql - Laravel database returns undefined index error
- java - 泛型方法在实例化方法中传递的泛型类型时返回一个列表
- spring - Can i use springboot for designing a middleware application
- ember.js - How to call action of child component on parent events in ember JS
- c# - How to reversely play a video in unity?
- laravel - Laravel : Controller not found
- angular - angular 4 Production Build issue