MST

星途 面试题库

面试题:MongoDB writeConcern与复制集的关系及应用场景

在MongoDB复制集环境下,writeConcern参数的设置如何与复制集的特性相结合,以确保数据的一致性和可用性?请举例说明不同writeConcern设置在特定业务场景中的应用。
33.4万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试
  1. writeConcern与复制集特性结合确保数据一致性和可用性
    • 复制集特性:MongoDB复制集由一个主节点(primary)和多个从节点(secondary)组成。主节点处理写操作,然后将操作日志同步到从节点。
    • writeConcern参数
      • writeConcern: {w: 1}:这是默认设置,表明写操作只要在主节点上成功就返回。这种设置提供了最高的写性能,但数据一致性相对较弱。如果主节点在写操作后、同步到从节点前崩溃,可能会丢失数据。
      • writeConcern: {w: "majority"}:表示写操作要在大多数节点(包括主节点)上成功才返回。这样能保证数据的强一致性,因为即使主节点崩溃,新选举出的主节点也会包含这些已确认写入的数据。但这种设置会降低写性能,因为需要等待多数节点确认。
      • writeConcern: {w: }:这里的<number>指定了需要确认写操作的节点数。例如,{w: 3}表示写操作要在3个节点上成功才返回。如果复制集节点数小于<number>,写操作会失败。这在一些对数据一致性要求较高,但节点数有限的场景下有用。
  2. 不同writeConcern设置在特定业务场景中的应用
    • writeConcern: {w: 1}
      • 场景:实时数据采集系统,例如物联网设备大量上报数据。
      • 应用:这种场景下对写入性能要求极高,因为设备数量众多且数据实时性强。少量数据丢失在可接受范围内,例如一些非关键传感器数据。采用w: 1可以快速将数据写入主节点并返回,减少设备等待时间,保证系统的高吞吐量。
    • writeConcern: {w: "majority"}
      • 场景:银行转账业务。
      • 应用:在银行转账场景中,数据一致性至关重要。使用w: "majority"确保转账操作写入到大多数节点,这样即使某个节点出现故障,也不会丢失转账记录,保证了资金的安全和交易的完整性。虽然写性能会有所下降,但对于金融业务来说,数据一致性是首要考虑因素。
    • writeConcern: {w: }
      • 场景:小型企业的财务记录系统,复制集节点数为5个。
      • 应用:假设企业对财务数据一致性要求较高,可设置writeConcern: {w: 3}。这样写操作需要在3个节点上成功,既能保证一定的数据一致性,又不会像w: "majority"那样影响性能过于严重,因为5个节点中3个节点确认相对比多数节点确认(4个节点)更容易达成。