如何仅从主要执行读取操作

时间:2013-01-29 05:00:22

标签: java mongodb java-ee

我们将Mongo DB用于基于Java Java EE的应用程序。 我们使用一个主要和两个辅助作为Mongo DB集群的一部分 Mongo DB作为我们架构的一部分不断读取/更新/写入。

由于这个原因,当我们从Mongo DB进行提取操作时,我们得到脏读(零值)。

为了解决这个问题,我试图以这样一种方式对其进行配置:读取操作总是从主要本身获取,写入/更新可以转到主要/次要。

如果可能,请告诉我(始终从主要读取并使用任何主要/次要的东西进行写入/更新)

它会对这样的设计产生负面影响吗?

2 个答案:

答案 0 :(得分:2)

由于mongoDB在插入中使用分阶段写入,因此即使在单个节点中也可能存在写入操作滞后。 http://docs.mongodb.org/manual/reference/glossary/#term-journal

使用写入关注来避免问题(使用脏数据):http://api.mongodb.org/java/2.6/com/mongodb/WriteConcern.html

您可以阅读有关写操作的更多信息: http://docs.mongodb.org/manual/core/write-operations/

其中指出不建议使用不带错误检查的写入进行生产。

答案 1 :(得分:1)

要排除从属读取,您必须设置相应的ReadPreference。请参阅Mongo连接类的文档。

这样的事情:

 mongo.setReadPreference(ReadPreference.primary());

然而,文档说,默认情况下,所有读取都应该已经转到主要:

  

默认情况下,所有读写操作都将在主数据库上进行,但可以通过更改读取首选项来读取辅助数据:

你确定你没有在应用程序中打开奴隶读取吗?