第八章 MongoDB实战
一、 MongoDB数据存储格式
- JSON
- JSON概述:
JSON:JavaScript Object Notation(JavaScript对象表示法)
JSON是存储和交换文本信息的语法,类似 XML
JSON数据库语句可以容易被解析
Web应用大量使用
NAME-VALUE配对
MongoDB第一版支持 - JSON语法:
JSON就是一串字符串 只不过元素会使用特定的符号标注
{} 双括号表示对象
[] 中括号表示数组
“” 双引号内是属性或值
: 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)
- BSON
- BSON是一种类JSON的二进制编码存储形式,简称Binary JSON
- BSON和JSON一样,支持内嵌的文档对象和数组对象
- BSON有JSON没有的一些数据类型,如Date和BinData类型
二、 MongoDB的关键特性
- 高性能
- MongoDB提供高性能的数据持久化。尤其是支持嵌入式数据模型,可减少数据库系统上的I/O活动。
- 索引支持更快的查询,包括嵌入式文档和数组的键
- 丰富的查询语言
- MongoDB支持丰富的查询语言:
普通查询、条件查询、limit限制结果集数量、高级查询 - 支持读写操作、数据聚合、文本搜索和地理空间查询
- 高可用性和数据持久化
- MongoDB的复制集(副本集)提供:
数据冗余,自动故障转移 - 数据持久化:
副本集是一组保持相同数据集的MongoDB服务器,提供冗余增加数据可用性
- 水平可扩展
- MongoDB的缺点
- 空间的预分配;
- 字段名所占用的空间
- 删除记录不能释放空间
三、 MongoDB的数据逻辑结构
-
层次关系
文档(document)、集合(collection)、数据库(database)、实例
-
数据库命名的规则
- 不能是空字符串
- 不能含有空格,$,/,\,\0
- 全部小写
- 最多64个字节
- 不能与系统保留库同名,如admin,local以及config
四、 MongoDB架构部署
部署模型演化:MongoDB部署可以从简单逐步演化到非常强大也相当复杂
- 主从操作日志oplog
- MongoDB的Replica Set架构是通过一个日志oplog来存储写操作的
- 从节点主动从主服务器上获取oplog。执行进而完成增量式的数据同步
- 主从集群可以使用单台也可以使用多台,但一般不超过个位数
- 副本集
- 副本集是一种进化的主从结构,可以将副本集看做一个整体。
- 副本集自动会选举一个活动active节点。这个节点被用来直接访问。其他副本则成为从服务器进行数据同步
- 当活动节点整体失效时,副本集自动选举一个新的active节点来提供服务。
- 分片部署集群
MongoDB创建一个分片集群需要三种角色:
- 分片服务器用于存储数据的分片,每个分片可以是一个实例或实例的副本集
- 配置服务器分用于存储所有分片节点的配置信息、每个数据块的分片键范围、每个数据块在分片的分布情况、该集群中所有数据库和集合的分片的配置信息
- 路由进程是前段路由,客户端由前段路由进入访问
- 副本集与分片集群结合
- 分片:
使用副本集,确保每个数据节点都具有备份、自动容错转移和自动恢复能力 - 配置服务器:使用三个配置服务器,确保元数据的完整性
- 路由进程:使用三个路由进程,实现负载平衡,提高客户端接入性能。
五、 MongoDB应用场景
- 游戏场景
使用MongoDB存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新。 - 物流场景
使用MongoDB存储订单信息,订单状态在运送过程中会不断更新,以MongoDB内嵌数组的形式来存储,一次查询就能将订单所 有的变更读取出来。 - 社交场景
使用MongoDB存储存储用户信息,以及用户发表的朋友圈信息, 通过地理位置索引实现附近的人、地点等功能。 - 物联网场景
使用MongoDB存储所有接入的智能设备信息,以及设备汇报 的日志信息,并对这些信息进行多维度的分析。 - 视频直播
使用MongoDB存储用户信息、礼物信息等。