Mongodb是否有一种方法可以保证从Secondaries读取的数据没有失效

问题描述 投票:0回答:2

问题陈述:

  • 我正在尝试将负载分配给次级。
  • 阅读占主导地位。

从次级读取未过期的数据。

我尝试过的。-阅读偏好为最近-写关注-多数(以确保大多数服务器同步)

@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

mongodb spring-data-mongodb
2个回答
1
投票

复制集不是在MongoDB集群中分配负载的方法。这就是分片集群的用途,每个分片负责数据的子集。

确保文档在副本集的所有成员上同步的唯一方法是使用与副本集的成员数量相等的写关注,因为只有在所有成员都收到并应用了该写操作后,才会确认该写操作至少要记入日志。但是,将写关注点设置为成员数,则会失去副本集的故障转移功能。如果您的副本集的一个成员失败,则无法再解决写关注点,并且将不接受其他写操作。


0
投票

通过设计,次要对象可能会落后于主要对象。通常,当需要不是最新数据时,从辅助目录读取是合适的。

要使辅助副本包含最新数据,可以在写入关注方面等于副本集中数据承载节点的数量的情况下进行写入。这将影响可用性(任何发生故障的节点都会停止写入)。

最大陈旧度是对陈旧度的估计],可用于调整复制延迟,通常,应用程序在查询次要对象时可以接受。这不是获得多数阅读的方法。

© www.soinside.com 2019 - 2024. All rights reserved.