面试题答案
一键面试writeConcern常见取值及含义
0
:- 含义:不等待服务器确认,客户端发送写入操作后立即返回。这种情况下,客户端不知道写入是否成功,甚至不确定写入操作是否已被服务器接收。
- 对写入性能影响:写入性能最高,因为不需要等待任何确认,减少了网络往返时间。但风险较大,数据可能因为网络故障、服务器崩溃等原因未成功写入而客户端却不知情。
1
:- 含义:等待主节点确认写入操作成功。主节点将数据写入内存的 oplog(操作日志) 后,就会向客户端返回确认信息。
- 对写入性能影响:相比
0
会稍慢一些,因为需要等待主节点的确认,但通常性能仍然不错。在大多数情况下能保证数据写入主节点,但如果主节点在将数据同步到从节点之前崩溃,可能会丢失数据。
majority
:- 含义:等待大多数副本集成员(超过一半)确认写入操作成功。这确保了数据在多数节点上持久化,提供了更高的数据持久性和容错性。
- 对写入性能影响:写入性能相对较低,因为需要等待多个节点的确认,涉及更多的网络往返和节点间的同步操作。但这种设置能提供很强的数据一致性保证,适合对数据一致性要求极高的场景,如金融交易数据的写入。
除了上述常见取值,还有其他如指定具体节点数等取值,原理类似,都是根据等待确认的节点数量和类型来确定数据写入的确认机制和数据安全性、写入性能的平衡。