Mongodb有没有一种方法可以保证不会从Secondaries读取过时的数据



问题陈述:

  • 我正在尝试将负载分配到辅助设备
  • 里德占主导地位

从没有过时的辅助设备中读取数据。

我试过了。-将首选项读取为最接近-写问题-大多数(以确保大多数服务器同步(

@Override
@ConditionalOnProperty(value = "mars.mongodb.readWrite.concern.majority", havingValue = "true")
@Bean
public MongoTemplate mongoTemplate() throws Exception {
MongoTemplate template = new MongoTemplate(this.mongoDbFactory(), this.mappingMongoConverter());
template.setReadPreference(ReadPreference.nearest());
template.setWriteConcern(WriteConcern.MAJORITY);
return template;
}

一些阅读:

https://docs.mongodb.com/manual/core/causal-consistency-read-write-concerns/

https://docs.mongodb.com/manual/core/read-isolation-consistency-recency/#sessions

借助@alex-blex和@Markus W Mahlberg的一些见解,我在博客中整理了我的发现,并提供了一些从中学阅读的方法。

https://medium.com/@arun2pratap/mongodb-rad-从二次到主机性能-dca938a680ac

副本集不是在MongoDB集群中分配负载的手段。这就是分片集群的作用,每个分片负责数据的一个子集。

确保文档在副本集中的所有成员上同步的唯一方法是使用与副本集中的成员数相等的写入问题,因为只有当所有成员都收到并至少将其应用于日志时,写入才会得到确认。但是,如果将写问题设置为成员数,则会失去副本集的故障切换功能。如果复制副本集的一个成员出现故障,则写入问题将无法再匹配,也不会接受进一步的写入。

根据设计,二级可能落后于一级。通常,当不需要最新数据时,从辅助数据读取是合适的。

要使您的辅助文件包含最新的数据,您可以使用与副本集中的数据承载节点数相等的写问题进行写入。这将影响可用性(任何节点出现故障都将暂停写入(。

最大陈旧性是对陈旧性的粗略估计,可用于指定复制滞后的程度,通常情况下,应用程序在查询辅助设备时可以接受。这不是获得多数人阅读的一种方式。

最新更新