加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MongoDB是什么,怎么用?看完你就知道了

发布时间:2019-06-07 00:34:25 所属栏目:MySql教程 来源:Java识堂
导读:一、概述 1.MongoDB是什么?用一句话总结 MongoDB是一款为web应用程序和互联网基础设施设计的数据库管理系统。没错MongoDB就是数据库,是NoSQL类型的数据库。 2.为什么要使用MongoDB? (1)MongoDB提出的是文档、集合的概念,使用BSON(类JSON)作为其数

提供主从复制能力,热备能力,故障转移能力

2.构建方式

  1. rs.initiate() 
  2. rs.add("localhost:40001") 
  3. rs.add("localhost:40002",{arbiterOnly:true}) 

3.监控

  1. db.isMasrter() 
  2. rs.status() 

4.副本集的工作原理

实际上MongoDB对副本集的操作跟mysql主从操作是差不多的,先看一下mysql的主从数据流动过程

  1. 主binlog -> 从relay.log -> 从bin.log -> 从数据库 

而MongoDB主要依赖的日志文件是oplog

  1. 主oplog -> 从oplog 

写操作先被记录下来,添加到主节点的oplog里。与此同时,所有从结点复制oplog。首先,查看自己oplog里最后一条的时间戳;其次,查询主节点oplog里所有大于此时间戳的条目;最后,把那些条目添加到自己的oplog里并应用到自己的库里。从节点使用长轮询立即应用来自主结点oplog的新条目。

当遇到以下情况,从节点会停止复制

  • 如果从节点在主节点的oplog里找不到它所同步的点,那么会永久停止复制
  • 一旦某个从节点没能 在主节点的oplog里找到它已经同步的点,就无法再保证这个从结点的完美副本

local数据库保存了所有副本集元素据和oplog日志

  • replset.minvalid 包含指定副本集成员的初始化同步信息
  • system.replset 保存在副本集配置文档
  • system.indexes 标准索引说明容器
  • me slaves 主要用于写关注

可以使用以下命令查看复制情况

  1. db.oplog.rs.findOne() 
  • ts 保存了该条目的BSON时间戳
  • t 是从纪元开始的描述
  • i是计数器
  • op 表示操作码
  • ns 标明了有关的命名空间

5.心跳检测

每个副本集成员每秒钟ping一次其他所有成员,可以通过rs.status()看到节点上次的心跳检测时间戳和健康状况。

6.故障转移

这个点没必要过多描述,但是有一个特殊场景,如果从节点和仲裁节点都被杀了,只剩下主节点,他会把自己降级成为从节点。

7.提交与回滚

如果主节点的数据还没有写到从库,那么数据不能算提交,当该主节点变成从节点时,便会触发回滚,那些没写到从库的数据将会被删除,可以通过rollback子目录中的BSON文件恢复回滚的内容。

8.驱动与复制

(1)使用单节点链接

只能链接到主节点,如果链接到从节点的话,会被拒绝写入操作,但是如果没有使用安全模式,因为mongo的fire and forget 特性,会把拒绝写入的异常给吃掉。

(2)使用副本集方式链接

能根据写入的情况自动进行故障转移,但是当副本集进行新的选举时,还是会出现故障,如果不使用安全模式,依旧会出现写不进去,但现实成功的情况。

(3)写关注

可以使用写关注来关注数据是否已经被写入MongoDB的库中,使用写关注会消耗性能,需要在速度和持久性之间做出权衡。

七、分片

分片是数据库切分的一个概念实现,这里也是简单总结为什么要使用分片以及分片的原理,操作。

1.为什么需要分片

当数据量过大,索引和工作数据集占用的内存就会越来越多,所以需要通过分片负载来解决这个问题

2.分片的工作原理

(1)分片组件

  • 分片:每个分片都是一个副本集
  • mongos路由器:是一个路由器,将读写请求指引到合适的分片上
  • 配置服务器config:持久化分片集群的元数据,包括:全局集群配置;每个数据库、集合和特定范围数据位置;一份变更记录,保存了数据在分片之间进行迁移的历史信息。配置服务器之间不是副本集形式存在,mongos向配置服务器提交信息时是两阶段提交,保证配置服务器之间的一致性。

(2)分片的核心操作

分片一个集合:分片是根据一个属性的范围进行划分的,MongoDB使用所谓的分片键让每个文档在这些范围里找到自己的位置

块:是位于一个分片中的一段连续的分片键范围,可以理解为若干个块组成分片,分片组成MongoDB的全部数据

(3)拆分与迁移

块的拆分:初始化时只有一个块,达到最大块尺寸64MB或100000个文档就会触发块的拆分。把原来的范围一分为二,这样就有了两个块,每个块都有相同数量的文档。

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读