二十四、
MongoDB 创建基础索引、组合索引、唯一索引以及优化
https://blog.csdn.net/xiamoyanyulrq/article/details/81456894blog.csdn.net二十三、
删除副本集
https://blog.csdn.net/qq_35209838/article/details/85126338blog.csdn.net二十二、
当你设置了 副本集以后,主副本挂掉,选举新副本后,ip+端口号发生了变化,服务器如何连接到新的ip+端口地址去?
只需要这样写:(要连接到副本集,请传递以逗号分隔的主机列表以连接到而不是单个主机。)
mongoose.connect('mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]' [, options]);
二十一、
![2c1ae3228df136fa25e07fd1fcff2868.png](https://img-blog.csdnimg.cn/img_convert/2c1ae3228df136fa25e07fd1fcff2868.png)
二十、
哨兵机制
![a4b8877fe06ad758bf28a9851f9af160.png](https://img-blog.csdnimg.cn/img_convert/a4b8877fe06ad758bf28a9851f9af160.png)
十九、
那么,搭建了这套主从结构的集群是不是就能应付商用环境呢?我们发现还是有几个问题亟待解决的:
- 主节点挂了能否自动切换连接?目前需要手工切换。
- 主节点的写压力过大如何解决?
- 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大?
- 就算对从节点路由实施路由访问策略能否做到自动扩展?
解决这几个问题就要靠下面介绍的副本集模式了。
MongoDB官方已经不建议使用主从模式了, 替代方案是采用副本集的模式, 那什么是副本集呢?简单地说,副本集就是有自动故障恢复功能的主从集群,或者说主从模式其实就是一个单副本的应用,没有很好的扩展性和容错性。而副本集具有多个副本保证了容错性,就算一个副本挂掉了还有很多副本存在,更棒的是副本集很多地方都是自动化的,它为你做了很多管理工作。聪明的读者已经发现,主从模式的第一个问题手工切换已经得到解决了,难怪MongoDB官方强烈推荐使用这种模式。我们来看看MongoDB副本集的架构图:
![949b61a9be2440e7b32a5385a2dec3f1.png](https://img-blog.csdnimg.cn/img_convert/949b61a9be2440e7b32a5385a2dec3f1.png)
由图可以看到客户端连接到整个副本集, 不关心具体哪一台机器是否挂掉。 主服务器负责整个副本集的读写, 副本集定期同步数据备份, 一旦主节点挂掉, 副本节点就会选举一个新的主服务器, 这一切对于应用服务器不需要关心。 我们看一下主服务器挂掉后的架构:干货满满 | MongoDB集群实战攻略www.360doc.com
![645d9f5aa2d12f8026db349520be350f.png](https://img-blog.csdnimg.cn/img_convert/645d9f5aa2d12f8026db349520be350f.png)
十八、
session.startTransaction({
readConcern: { level: 'snapshot' },
writeConcern: { w: 'majority' },
readPreference: 'primary'
});
![109e0dd4549c0dca2eed07fc57332280.png](https://img-blog.csdnimg.cn/img_convert/109e0dd4549c0dca2eed07fc57332280.png)
十七、
错误: MongoError: not master
What is a TransientTransactionError in Mongoose (or MongoDB)?stackoverflow.com![656d1a2f4acdedff41fbf7890133539a.png](https://img-blog.csdnimg.cn/img_convert/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](https://img-blog.csdnimg.cn/img_convert/a145ad21f434cd67ddf2785a7f92c1e3.png)
十三、
都是坑啊
multiple instances of Mongo DB on same serverstackoverflow.com![656d1a2f4acdedff41fbf7890133539a.png](https://img-blog.csdnimg.cn/img_convert/656d1a2f4acdedff41fbf7890133539a.png)
十二、
mongodb复制集 (详细配置 操作)
MongoDB配置复制集-许你一生的远方-51CTO博客blog.51cto.com![a145ad21f434cd67ddf2785a7f92c1e3.png](https://img-blog.csdnimg.cn/img_convert/a145ad21f434cd67ddf2785a7f92c1e3.png)
十一、
这篇文章写的好,有具体操作。。
目前事务回滚只能在复制集上操作,单独的mongodb server是不能操作事务的
人类身份验证 - SegmentFaultsegmentfault.com十、
究极教程:
Mongoose v5.6.2: Transactionsmongoosejs.com九、
管方传送链接:
MongoDB 4.0 will take ACID | ZDNetwww.zdnet.com![2865759921c56fb5cac026c2312c8c5a.png](https://img-blog.csdnimg.cn/img_convert/2865759921c56fb5cac026c2312c8c5a.png)
八、
mongo shell 下的一波操作
提交
![5ccbcce1b9d7247fc11506647c86c2cf.png](https://img-blog.csdnimg.cn/img_convert/5ccbcce1b9d7247fc11506647c86c2cf.png)
回滚
![46cb50b55bc9609ae81aa605c2cc5d8c.png](https://img-blog.csdnimg.cn/img_convert/46cb50b55bc9609ae81aa605c2cc5d8c.png)
七、
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()回滚事务)
![09ef990953e9e1908e5bba1473417056.png](https://img-blog.csdnimg.cn/img_convert/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
五、
这篇文章还是狗屁没说
- MongoDB是如何实现事务的?有哪些局限?
- MongoDB的一致性是如何保证的?
WiredTiger引擎
MongoDB的事务、ACID和一致性www.jianshu.com![abcf5de7496bf7c3d3479c99236b7ea2.png](https://img-blog.csdnimg.cn/img_convert/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/81199435blog.csdn.net三、
没什么有价值的信息
https://blog.csdn.net/popvip44/article/details/71487425blog.csdn.net二、
术语:
ACID => Atomicity、 Consistency、 Isolation、 Durability
Transaction(事务)
Transaction processing(事务过程)
Rollback(回滚)
acid(数据库事务正确执行的四个基本要素的缩写)_百度百科baike.baidu.com![ebddbf475ac024d0211ae045ef494f2c.png](https://img-blog.csdnimg.cn/img_convert/ebddbf475ac024d0211ae045ef494f2c.png)
一、
从4.0+开始mongodb支持事务操作
事务原理: mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。mongodb各个节点常见的搭配方式为:一主一从、一主多从。主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
为什么至少需要两个节点?是为了方便回滚保证隔离性么?
mongodb 事务学习总结 - 兜_兜 - 博客园www.cnblogs.com![79d282a1d934097abb2c86241a934a06.png](https://img-blog.csdnimg.cn/img_convert/79d282a1d934097abb2c86241a934a06.png)