面试题答案
一键面试- writeConcern参数说明
- w:指定确认写入操作的副本集成员数。例如
w: 1
表示只要主节点确认写入即可;w: "majority"
表示需要大多数(超过一半)的副本集成员确认写入。 - j:布尔值,
j: true
表示写入操作不仅要被确认,还要等待写入操作被持久化到磁盘日志(journal)中。 - wtimeout:指定等待确认写入操作的最长时间(以毫秒为单位)。如果在这个时间内没有达到
w
指定的确认数,写入操作将失败并返回错误。
- w:指定确认写入操作的副本集成员数。例如
- 参数配合使用以平衡数据一致性和写入性能
- 低一致性、高写入性能组合:
- 参数组合:
{w: 1, j: false, wtimeout: 5000}
。 - 说明:这里
w: 1
意味着只要主节点确认写入,写入操作就返回成功,不需要等待副本节点的确认,并且j: false
表示不需要等待数据持久化到磁盘日志,这样写入速度非常快。wtimeout: 5000
设置了等待主节点确认的最长时间为5000毫秒。在网络良好的情况下,写入操作会快速完成。但在网络波动时,如果主节点出现短暂故障,可能会丢失数据,因为没有副本节点确认且未持久化到磁盘。
- 参数组合:
- 高一致性、相对低写入性能组合:
- 参数组合:
{w: "majority", j: true, wtimeout: 10000}
。 - 说明:
w: "majority"
确保大多数副本集成员确认写入,j: true
保证数据已持久化到磁盘日志,这样可以保证数据的强一致性。wtimeout: 10000
设置了等待大多数副本集成员确认写入的最长时间为10000毫秒。在网络波动时,可能由于需要等待多个节点确认和持久化,写入操作会花费更长时间,如果在10000毫秒内无法达到大多数节点确认,写入操作将失败。
- 参数组合:
- 折衷组合:
- 参数组合:
{w: 2, j: true, wtimeout: 8000}
。 - 说明:
w: 2
表示需要除主节点外至少1个副本节点确认写入,j: true
保证数据持久化到磁盘日志。wtimeout: 8000
设置等待时间为8000毫秒。这种组合在一定程度上保证了数据一致性(有额外节点确认且持久化),又不会像w: "majority"
那样等待过多节点确认而导致写入性能严重下降,在网络波动时可以在一致性和性能之间取得较好的平衡。如果在8000毫秒内无法得到2个节点(包括主节点)的确认和持久化完成,写入操作将失败。
- 参数组合:
- 低一致性、高写入性能组合: