首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB的“读取消提交”和“写锁”相互冲突吗?

MongoDB的“读取消提交”和“写锁”相互冲突吗?
EN

Database Administration用户
提问于 2014-11-16 11:34:21
回答 1查看 843关注 0票数 2

我正在阅读MongoDB文档,其中提到了reading:MongoDB allows clients to read documents inserted or modified before it commits these modifications to disk, regardless of write concern level or journaling configuration[1]和locks:Locks help guarantee that all writes to a single document occur either in full or not at all[2]。

我的问题是,如果写操作有锁,那么为什么用户可以读取未提交的数据?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2014-11-17 11:05:17

写入首先在内存中完成,然后(异步地)刷新到磁盘.任何访问文档的读者都将立即获得内存中的副本,而不是等待刷新到磁盘(否则数据库将在性能方面受到磁盘绑定)。关于锁的引用适用于内存中的部分,并保证内存中单个操作的原子性--它要么全部发生,要么不发生,读取器没有中间状态。因此,两者并不相互冲突,但您应该知道它们是如何工作的。

如果您担心对于特定写入的磁盘持久化,那么我建议您研究一下j:truew:majority的写关注点。前者只在写到日志(磁盘上)之后才返回true,而第二个只有在写入到大多数时才返回true (3中2,5中3,等等)。复制集的成员。请注意:与默认情况相比,这两个写关注点都会引起很大的延迟(以及j:true选项的IO增加),因此请确保它们是必需的,并且性能水平是可以接受的。

这两个选项(如您提供的链接)都不会阻止读者读取内存中已提交但未刷新到磁盘的数据,但j:true将向应用程序发出通知,如果写入失败,则写入失败,而w:majority将通知您是否已将其复制到其他成员(这将成为故障转移事件中的主要内容)。有了这些知识,您的应用程序就可以根据操作的成功/失败采取适当的操作(检查、重试、其他操作)。

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

https://dba.stackexchange.com/questions/82758

复制
相关文章

相似问题

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