【1】MongoDB简介

文档数据库

特点:高性能、易部署、易使用,存储非常方便。

【1.1】主要功能特性

(1)面向集合存储,存储对象类型的数据,文件存储格式为BSON(JSON的扩展)

(2)支持查询、动态查询

(3)支持完全索引,包含内部对象

(4)支持复制和故障恢复

(5)使用高效的二进制数据存储,包括大型对象(如视频)

(6)自动处理碎片,以支持云计算层次的扩展性

(7)支持多种语言,如RUBY,PYTHON,JAVA,C++,C#,PHP

(8)可以通过网络访问

【1.2】适用场景

(1)网站数据:MongoDB非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性(复制、高可用等)

(2)缓存:由于性能很高,MongoDB也适合作为信息基础设施的缓存层,支持缓存层持久化

(3)大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据可能比较昂贵,再次之前很多程序猿往往会选择传统的文件进行存储。

(4)高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。MongoDB的路线发展中,已经包含了对MapReduce引擎的内置支持。

(5)用于对象(比如图片、视频)及JSON数据的存储:MongoDB的BSON数据格式非常适合文档化格式的存储及查询

【1.3】不适用场景

(1)高度事务性的系统:例如银行或会计系统,传统的关系型数据库目前还是更适用于大量原子性复杂事物的应用程序。

 

【2】MongoDB体系结构

【2.1】Mondb对象概念

  

MongoDB二进制对象占空间吗 mongodb 存储二进制_客户端

【2.2】MongoDB与关系型数据库对应关系概念

  

MongoDB二进制对象占空间吗 mongodb 存储二进制_数据_02

 

 table joins 对应的 MongoDB 操作,是叫文档嵌入

服务端和客户端进程与访问:

  

MongoDB二进制对象占空间吗 mongodb 存储二进制_客户端_03

 

 

【3】MongoDB的数据类型

【3.1】基本数据类型

(1)数值:32位整型、64位整型、64位浮点;系统会根据情况自动判断

(2)字符型:UTF-8 字符串

(3)时间:从标准济源开始的毫秒数;如:打印当前时间:{"date":new Date()}

(4)数组:值的集合或者列表;如:["string1","string2"."string3"]

(5)内嵌文档:文档可以作为文档中某个Key的value

(6)其他:ObjectId、DBRef、null、undefined

【3.2】音乐、图像等二进制类型数据如何保存?

(1)小型类可以使用 BSONBinary 类型

(2)较大文件(超过16MB)可以使用 GridFS功能。

 

【4】MongoDB数据库架构

【4.1】五大模式

(1)单机模式

(2)主从模式(4.0之前,分离备份,扩展读,可多个从服务器)  --------已弃用

(3)副本集模式(自动化HA(选举),还具备主从特性)

(4)传统分片模式(分布式数据读写,分布入口,分布集群配置存储,无复制(无故障转移与数据备份)-----已弃用

(5)分片+复制模式(分片所有特性,副本集所有特性)

【4.2】单机模式

   就一台机器,上面运行着 MongoDB 实例,客户端访问即可

【4.3】主从模式(适用于4.0以下版本)

其实就相当于mysql的异步主从复制,从库往主库拉oplog日志到本机重做。

建议从数量为个位数,最佳3-5个。

  

MongoDB二进制对象占空间吗 mongodb 存储二进制_MongoDB二进制对象占空间吗_04

 

【4.4】副本集模式

1个副本集对外可以看成一个整体。1个副本集至少3台机器,且是奇数节点以便来仲裁投票故障转移。

副本集内部主机是相互复制的,3台都是主,互相同步。且有类似于哨兵选举机制,实现故障切换。

也可以通过haproxy+keepalived 实现读写负载均衡。

 

  

MongoDB二进制对象占空间吗 mongodb 存储二进制_MongoDB二进制对象占空间吗_05

 

【4.5】传统分片

三个结构

  (1)路由分片:客户端访问过来,根据配置访问对应的分片主机

  (2)mongodb配置信息

  (3)分片主机(这个主机也可以是一个集群)

 

  

MongoDB二进制对象占空间吗 mongodb 存储二进制_数据_06

 

 

【4.6】分片+复制模式

其实,就是讲 3个模块都做上集群,保证3个模块没有单点故障。

分片组内,是要有奇数个节点,以便仲裁故障转移。

由route来分片,由config来配置 分片机器的副本集集群信息

一个客户端过来,route接受,查看配置信息,最终转发访问到对应的分片组集群

  

MongoDB二进制对象占空间吗 mongodb 存储二进制_MongoDB二进制对象占空间吗_07