关于Mongodb的事务

博客介绍了事务的隔离级别,如未提交读、已提交读等。重点阐述了MongoDB的部署方式,包括单机模式、高可用复制集和可扩展分片集群,还提及了WriteConcern的不同参数设置及影响,同时分析了可能遇到的数据丢失等问题及解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于事务:

     事务的隔离级别:未提交读(脏读数据)  已提交读  不可重复读  幻读(串行化 Serializable解决)

     uncommitted - read 解决:

     unrepeat - read 解决: 

 

MongoDB的部署方式:

单机模式:

    一个Primary:(在内存中)

             包含:一个DataBuffer    一个JournalBuffer

  步骤: 磁盘中有对应的DataFile   JournalFile 

     用户发送请求给Primary,先将数据日志缓冲到JournalBuffer,再将数据缓冲到DataBuffer 然后将数据返回给用户

     之后JournalBuffer 数据刷盘到 JournalFile (刷新频率较高 约100ms一次)最后DataBuffer数据刷盘到DataFile(大概60s一次)

高可用复制集:

     一个Primary  一个Secondary  多个Secondary

    Primary中包括:

           DataBuffer  JournalBuffer  Oplog  其他操作和单机模式一样

    复制集的优点:

     复制集在完成主从复制的基础上,通过心跳机制,一旦primary节点出现宕机,则触发选举一个新的主节点,剩下的secondary节点指向新的primary

           不同的是在数据缓冲到DataBuffer之后 会将 缓冲操作日志缓冲到Oplog中 然后在数据返回给用户之后,Oplog中的日志缓冲记录会同步到Secondary中 (频率最快 大概1ms一次)

可扩展分片集群:

 

有关WriteConcern:

     w = 0 / 1 / 2 / majority;

     j  =  1;

w = 0的时候性能最好 但是最不安全  会出现网络丢包 无效数据都不提醒 属于 UnAcknowledged

w = 1的时候属于 Acknowledged 是默认的状态

w = majority 属于推荐的状态

j = 1 时候安全性最高 但是性能损耗也是最大

 

可能会碰到的问题:

    journalData还没数据刷盘到JournalFile时候宕机 会导致数据丢失 使用 j = 1可以解决 

解决方式是:保证日志落盘后返回确定信息

    Oplog缓冲日志的时候系统宕机:

这个时候需要保证日志同步到一个节点才返回确认信息给客户端 需要使用w = 2 / majority / j = 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值