MST

星途 面试题库

面试题:MongoDB事务中写关注的常见级别及含义

在MongoDB事务里,写关注有多种级别,请列举并解释常见的写关注级别及其对数据持久性保证的影响。
12.4万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

常见写关注级别及对数据持久性保证的影响

  1. WriteConcern.NONE
    • 解释:不等待服务器确认写入操作,直接返回。这是最快的写操作模式,但不提供任何数据持久性保证。
    • 持久性影响:无法保证数据是否真正写入到服务器,可能因为网络问题等导致数据丢失。
  2. WriteConcern.UNACKNOWLEDGED
    • 解释:与NONE类似,客户端发送写操作后不等待服务器确认就返回。这是MongoDB 2.6版本之前的默认写关注级别。
    • 持久性影响:同样不能保证数据已被服务器接收并持久化,数据丢失风险较高。
  3. WriteConcern.ACKNOWLEDGED
    • 解释:这是MongoDB 2.6及之后版本的默认写关注级别。服务器会确认已收到写操作,并且将数据写入到内存中的journal(预写日志),但此时数据可能还未刷盘。
    • 持久性影响:在正常情况下,数据不会丢失。但如果服务器在journal数据刷盘之前崩溃,可能会丢失部分未刷盘的数据。
  4. WriteConcern.W1
    • 解释:等同于ACKNOWLEDGED,确保写操作被主节点确认,数据写入到主节点的journal。
    • 持久性影响:主节点崩溃时可能丢失未刷盘数据,对于副本集,从节点可能还未同步到此数据。
  5. WriteConcern.W2
    • 解释:写操作不仅要被主节点确认,还要被至少一个从节点确认。
    • 持久性影响:增加了数据的持久性,因为即使主节点崩溃,至少有一个从节点保存了数据。但从节点同步可能存在延迟,极端情况下可能丢失数据。
  6. WriteConcern.W3
    • 解释:写操作需要被主节点和至少两个从节点确认。
    • 持久性影响:进一步提高数据持久性,更多的节点保存了数据副本,但会增加写操作的延迟。
  7. WriteConcern.MAJORITY
    • 解释:写操作需要被大多数节点(副本集内超过一半的节点)确认。这确保了数据在大多数节点上持久化,提供了很高的数据持久性保证。
    • 持久性影响:在大多数节点存活的情况下,即使主节点崩溃,新选举的主节点也能保证数据的一致性和持久性,数据丢失的可能性极小。
  8. WriteConcern.JOURNALED
    • 解释:确保写操作不仅被主节点确认,而且数据已经写入到主节点的journal文件并持久化到磁盘。
    • 持久性影响:提供了很高的数据持久性保证,即使主节点崩溃,重启后可以从journal文件恢复数据。但由于涉及磁盘I/O,写操作性能会有所下降。