面试题答案
一键面试选择合适的writeConcern
- 对于社交类应用中用户发布动态的写入操作:
- 可以考虑选择
writeConcern: {w: 1}
。
- 可以考虑选择
- 选择依据:
- 性能方面:社交类应用用户发布动态频繁,对写入性能要求较高。
writeConcern: {w: 1}
表示只要主节点确认写入成功,就返回给客户端成功响应。这大大减少了等待多个节点确认写入的时间,能够快速响应客户端,提升用户体验,满足高频率发布动态的需求。 - 可靠性方面:虽然只等待主节点确认,但现代数据库主节点通常有一定的容错机制,并且大多数情况下主节点能够可靠地保存数据。在一些简单场景或对数据可靠性要求不是绝对严格的情况下,这种方式可以在一定程度上保证数据不会轻易丢失。
- 性能方面:社交类应用用户发布动态频繁,对写入性能要求较高。
- 可能带来的权衡:
- 可靠性权衡:与更高的
w
值(如w: majority
)相比,w: 1
的可靠性相对较低。如果主节点在确认写入后但还未将数据复制到其他节点时发生故障,可能会导致数据丢失。不过,在社交类应用场景中,用户动态数据的丢失概率相对可接受,因为社交数据并非如金融数据等对绝对不丢失要求那么高。 - 性能权衡:如果选择更高的
w
值,如w: majority
,虽然能极大提升数据可靠性,确保数据在大多数节点上保存后才返回成功,但会显著增加写入延迟。因为需要等待多个节点确认写入,这在高并发写入(如社交应用中用户频繁发布动态)场景下,可能导致写入性能下降,用户等待时间变长,影响用户体验。而writeConcern: {w: 1}
则通过牺牲部分可靠性换取了更好的写入性能。
- 可靠性权衡:与更高的