首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB异步复制中的读取问题

MongoDB异步复制中的读取问题
EN

Stack Overflow用户
提问于 2011-07-01 15:19:21
回答 3查看 520关注 0票数 1

我是MongoDB的新手。我创建了一个使用MongoDB作为数据库的Java应用程序。我在一个副本集中配置了3台服务器。我的伪代码:{

createUser getUser updateUser

}

在这里,createUser成功地创建了用户,但getUser有时无法返回该用户。

当我分析时,它是由于数据复制延迟。

我如何克服这个问题?

有没有办法在创建数据时立即复制数据?

有没有其他方法可以不失败地获得用户?

提前谢谢你!

EN

回答 3

Stack Overflow用户

发布于 2012-06-14 02:55:22

如果您确定问题是由复制延迟引起的,那么您可以做的一件事是确保您的写入是安全的,并使用w标志。这样,MongoDB将等待数据至少复制到n节点,然后才返回。您也可以从客户端驱动程序中执行此操作。

MongoDB getLastError

你在和slaveOk=True一起读书吗?如果您从ReplicaSet主节点读取,这也不是问题。

票数 0
EN

Stack Overflow用户

发布于 2012-08-24 13:59:44

在较新的Mongo Java驱动程序版本中,slaveOk属性现在称为ReadPreference (在本例中为.SECONDARY)。这可以在Mongo/DB/Collection级别设置。请注意,当您在这些级别设置ReadPreference时,它将应用于所有调用者(即这些对象在线程之间共享)。

另一种方法是尝试ReadPreference.SECONDARY,如果失败,尝试不使用它并转到主服务器。此逻辑可以隔离到您的存储库层,因此服务层不必处理它。如果要执行此操作,则可能需要在DBQuery对象上设置ReadPreference,这是基于每次使用进行设置的。

票数 0
EN

Stack Overflow用户

发布于 2013-03-03 06:30:59

我不熟悉Java驱动程序,但有w和j选项。

W选项确认写入操作已复制到指定数量的副本集成员,包括主副本集成员。

J将仅在其已将该操作写入日志之后才确认该写入操作。

看起来您需要使用WriteConcern

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6544813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档