MongoDB事务和隔离级别的原理

目录

写操作事务原理

读操作事务原理

隔离级别

多文档事务ACID

持久性

隔离性

一致性

原子性


写操作事务原理

保证持久性

MongoDB参数weiteConcern决定写操作落到多少个节点内存上才算成功

0 发起写操作,不关心成功

1~最大集群数 写操作需要被复杂到指定节点数才算成功

majority 写操作需要被复制到大多节点上才算成功 默认值

all 写操作需要被复制到全部节点上才算成功

journal日志

journal日志

和MySQL的redo log日志一样,都是预写日志,先持久化日志,然后根据日志对MongoDB进行修改

可以对数据进行崩溃恢复,但是不能进行备份,因为和redo log一样是覆盖写

MongoDB会先写入到journal日志,然后再进行复制节点数据到内存

false 写入到内存就返回成功 默认值

true 写入到磁盘才返回成功

一般是在性能和持久化的程度取舍

一般可以在MongoDB Shell 命令指定

读操作事务原理

readPreference参数决定MongoDB在那个节点上面读取数据

primary 只在主节点上面读数据 默认值

primaryPreferred 优先选择主节点,不可用使用从节点

seondary 只选择从节点

secondaryPreferred 优先选择从节点,如果从节点不可用使用主节点

nearest 选择最近的节点

实时性要求高的使用主节点读取,实时性不高的使用从节点读取,分布广的使用选择最近节点

一般可以在MongoDB Shell 命令指定或者当做链接参数

隔离级别

readConcern参数决定这个节点上数据那些可以读取,就是类比MySQL的隔离级别

available 读取所有这个节点上的数据

local 读取在这个节点并且完成当前分片的数据 默认值

majority 读取在大多数节点上提交完成的数据 实现原理MVCC版本控制

linearizable 保证操作线性化读取文档

snapshot 仅在事务中生效,在事务中才能设置读取最近快照中的数据 实现原理MVCC版本控制

available 和 local 类似 MySQL的读未提交

majority 类似 MySQL的读已提交

snapshot 类似 MySQL的可重复读 在事务中才能设置

linearizable 类似 MySQL的串行化

多文档事务ACID

类似MySQL的ACID 原理类比MySQL进行理解,差不多

原子性、一致性、隔离性、持久性

事务可以不用就不要用,因为涉及到事务意味着锁、节点协调、额外开销、性能影响

持久性

journal日志和参数weiteConcern决定落到多少节点返回成功实现

隔离性

使用readConcern参数决定这个节点上数据那些可以读取实现

一致性

各个节点保证一致 确保数据的正确和完整 通过持久性和隔离性实现的

原子性

要么全部成功,要么全部失败

MongoDB原子性使用方法

开启一个session、开始事务 、操作 、提交事务,有相应的API进行调用即可

MongoDB使用事务日志进行记录,只在提交的时候通过事务日志进行节点的修改,保证事务的原子性

事务日志如果是单节点的话就是 journal日志,如果是多节点需要其他日志进行协调

相关推荐
阿里云大数据AI技术11 分钟前
【跨国数仓迁移最佳实践3】资源消耗减少50%!解析跨国数仓迁移至MaxCompute背后的性能优化技术
数据库·数据分析·云计算
GBASE41 分钟前
“G”术时刻:如何用Perl DBD-ODBC成功连接南大通用GBase 8a数据库(一)
数据库
Yu_Lijing1 小时前
MySQL进阶学习与初阶复习第二天
数据库·c++·学习·mysql
孫治AllenSun1 小时前
【JSqlParser】sql解析器使用案例
数据库·windows·sql
Vinkey_Z1 小时前
MongoDB
数据库
l1t1 小时前
开源嵌入式数组引擎TileDB的简单使用
c语言·数据库·c++
飞翔的佩奇2 小时前
Java项目:基于SSM框架实现的社区团购管理系统【ssm+B/S架构+源码+数据库+毕业论文+答辩PPT+远程部署】
java·数据库·vue.js·毕业设计·mybatis·答辩ppt·社区团购
数据皮皮侠2 小时前
中国汽车能源消耗量(2010-2024年)
大数据·数据库·人工智能·物联网·金融·汽车·能源
小高Baby@2 小时前
解决幻读问题
数据库·mysql
TDengine (老段)2 小时前
TDengine 转化函数 TO_TIMESTAMP 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据