mongodb 事务_mongodb事务(Transaction)学习

二十四、

MongoDB 创建基础索引、组合索引、唯一索引以及优化

https://blog.csdn.net/xiamoyanyulrq/article/details/81456894​blog.csdn.net

二十三、

删除副本集

https://blog.csdn.net/qq_35209838/article/details/85126338​blog.csdn.net

二十二、

当你设置了 副本集以后,主副本挂掉,选举新副本后,ip+端口号发生了变化,服务器如何连接到新的ip+端口地址去?

只需要这样写:(要连接到副本集,请传递以逗号分隔的主机列表以连接到而不是单个主机。)

mongoose.connect('mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]' [, options]);
Connecting to MongoDB​mongoosejs.com

二十一、

2c1ae3228df136fa25e07fd1fcff2868.png
MongoDB副本集的原理,搭建 - 差点点温柔 - 博客园​www.cnblogs.com

二十、

哨兵机制

a4b8877fe06ad758bf28a9851f9af160.png

十九、

那么搭建了这套主从结构的集群是不是就能应付商用环境呢?我们发现还是有几个问题亟待解决的:

  • 主节点挂了能否自动切换连接?目前需要手工切换
  • 主节点的写压力过大如何解决?
  • 从节点每个上面的数据都是对数据库全量拷贝从节点压力会不会过大?
  • 就算对从节点路由实施路由访问策略能否做到自动扩展?

解决这几个问题就要靠下面介绍的副本集模式了

MongoDB官方已经不建议使用主从模式了替代方案是采用副本集的模式那什么是副本集呢?简单地说,副本集就是有自动故障恢复功能的主从集群,或者说主从模式其实就是一个单副本的应用,没有很好的扩展性和容错性。而副本集具有多个副本保证了容错性,就算一个副本挂掉了还有很多副本存在,更棒的是副本集很多地方都是自动化的,它为你做了很多管理工作。聪明的读者已经发现,主从模式的第一个问题手工切换已经得到解决了,难怪MongoDB官方强烈推荐使用这种模式。我们来看看MongoDB副本集的架构图:

949b61a9be2440e7b32a5385a2dec3f1.png
由图可以看到客户端连接到整个副本集不关心具体哪一台机器是否挂掉主服务器负责整个副本集的读写副本集定期同步数据备份一旦主节点挂掉副本节点就会选举一个新的主服务器这一切对于应用服务器不需要关心我们看一下主服务器挂掉后的架构
干货满满 | MongoDB集群实战攻略​www.360doc.com
645d9f5aa2d12f8026db349520be350f.png

十八、

  session.startTransaction({
    readConcern: { level: 'snapshot' },
    writeConcern: { w: 'majority' },
    readPreference: 'primary'
  });
Transactions - MongoDB Manual​docs.mongodb.com
109e0dd4549c0dca2eed07fc57332280.png

十七、

错误: MongoError: not master

What is a TransientTransactionError in Mongoose (or MongoDB)?​stackoverflow.com
656d1a2f4acdedff41fbf7890133539a.png

十六、

6、切换主从方式

  • 主服务器宕机primary自动进行选举
  • 手动切换
    • rs.freeze(30) 暂停30s
    • rs.stepDown(60,30)维持从服务器状态60s 等待30s使主节点和从节点同步

rs.status() 查看主从状态

十五、

Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 }

SECONDARY是不允许读写的

【MongoDB】MongoDb的“not master and slaveok=false”错误及解决方法​www.bbsmax.com

十四、

单机复制集

MongoDB复制集搭建(单机多实例与不同服务器)-走了多远,又是多远-51CTO博客​blog.51cto.com
a145ad21f434cd67ddf2785a7f92c1e3.png

十三、

都是坑啊

multiple instances of Mongo DB on same server​stackoverflow.com
656d1a2f4acdedff41fbf7890133539a.png

十二、

mongodb复制集 (详细配置 操作)

MongoDB配置复制集-许你一生的远方-51CTO博客​blog.51cto.com
a145ad21f434cd67ddf2785a7f92c1e3.png

十一、

这篇文章写的好,有具体操作。。

目前事务回滚只能在复制集上操作单独的mongodb server是不能操作事务的

人类身份验证 - SegmentFault​segmentfault.com

十、

究极教程:

Mongoose v5.6.2: Transactions​mongoosejs.com

九、

管方传送链接:

MongoDB 4.0 will take ACID | ZDNet​www.zdnet.com
2865759921c56fb5cac026c2312c8c5a.png

八、

mongo shell 下的一波操作

提交

5ccbcce1b9d7247fc11506647c86c2cf.png

回滚

46cb50b55bc9609ae81aa605c2cc5d8c.png
https://blog.csdn.net/qq_33774822/article/details/84065571​blog.csdn.net

七、

Session是 MongoDB 3.6 版本引入的概念引入这个特性主要就是为实现多文档事务做准备Session本质上就是一个「上下文」。

在以前的版本MongoDB 只管理单个操作的上下文mongod服务进程接收到一个请求为该请求创建一个上下文源码里对OperationContext),然后在服务整个请求的过程中一直使用这个上下文内容包括请求耗时统计请求占用的锁资源请求使用的存储快照等信息。有了Session之后,就可以让多个请求共享一个上下文让多个请求产生关联从而有能力支持多文档事务。

> s = db.getMongo().startSession()
session { "id" : UUID("3bf55e90-5e88-44aa-a59e-a30f777f1d89") }
> s.startTransaction()
> session.getDatabase("mytest").coll01.insert({x: 1, y: 1})
WriteResult({ "nInserted" : 1 })
> session.getDatabase("mytest").coll02.insert({x: 1, y: 1})
WriteResult({ "nInserted" : 1 })
> s.commitTransaction()  (或者 s.abortTransaction()回滚事务)
MongoDB 4.0 事务实现解析​yq.aliyun.com
09ef990953e9e1908e5bba1473417056.png

六、

  • 事务必须用在副本集情景下否则会报错:Multi-document transactions are available for replica sets only.
  • mongodb版本在4.0以上.

使用事务步骤:

  • 获取session:session = db.getMongo().startSession()
  • 开启事务:session.startTransaction()
  • 获得collection:yun1 = session.getDatabase(“database”).yun1
  • 操作:yun1.insert({“ggggggg”:1})
  • 回滚事务:session.abortTransaction()
  • 提交事务:commitTransaction
https://blog.csdn.net/yuanfengyun/article/details/83819815​blog.csdn.net

五、

这篇文章还是狗屁没说

  • MongoDB是如何实现事务的有哪些局限?
  • MongoDB的一致性是如何保证的?

WiredTiger引擎

MongoDB的事务、ACID和一致性​www.jianshu.com
abcf5de7496bf7c3d3479c99236b7ea2.png

四、

支持会话的概念 session

可以使用start_transaction()和commit_transaction()方法将多个数据库命令包含在单个MongoDB事务中

MongoDB的多文档事务仅适用于使用WiredTiger存储引擎的服务器,且当前仅支持单个副本集。4.2版本将带来分片集群支持。

多文档事务具有一些限制例如无法影响数据库目录即列出索引和集合),并且无法执行不属于CRUD和信息列表范围内的命令。

这些事务只能使用readPreference和readConcern,local或majority事务内的readPreference会覆盖掉在集合数据库和客户端级别设置的readPreference。

查询游标在事务中是隔离的这意味着事务中的getMore操作只能在内部使用然后事务外的只能在事务外使用MongoDB提供了大量用于支持事务操作的命令。

https://blog.csdn.net/sD7O95O/article/details/81199435​blog.csdn.net

三、

没什么有价值的信息

https://blog.csdn.net/popvip44/article/details/71487425​blog.csdn.net

二、

术语:

ACID => Atomicity、 Consistency、 Isolation、 Durability

Transaction(事务)

Transaction processing(事务过程)

Rollback(回滚)

acid(数据库事务正确执行的四个基本要素的缩写)_百度百科​baike.baidu.com
ebddbf475ac024d0211ae045ef494f2c.png

一、

从4.0+开始mongodb支持事务操作

事务原理: mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。mongodb各个节点常见的搭配方式为:一主一从、一主多从。主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

为什么至少需要两个节点?是为了方便回滚保证隔离性么?

mongodb 事务学习总结 - 兜_兜 - 博客园​www.cnblogs.com
79d282a1d934097abb2c86241a934a06.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值