本文要介绍的MongoDB关键特性主要包含如下内容sql
官方概述:数据库
数据库很大程度上是由其数据模型定义的,MongoDB的数据模型是面向文档的。编程
MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB文档相似于JSON对象。字段的值能够包括其余文档,数组和文档数组。json
文档的优势:数组
注意事项:服务器
MongoDB以二进制JSON格式存储文档数据,或者叫作BSON。BSON有类似的数据结构,是专门为文档存储设计。当咱们查询Mongo并返回结果的时候,这些数据会转化为易于阅读的数据格式。网络
关系数据库中包含表,MongoDB拥有集合。换句话说,Mysql、Oracle等关系型数据库在表的行里保存数据,而MongoDB在集合的文档里保存数据(集合相似于表)。数据结构
MongoDB的集合中的数据存储在硬盘上,并且大部分查询须要指定查询的目标集合。架构
概述:编程语言
ad hoc queries(主动查询模式,也有翻译为“即席查询”的)是指不须要事先定义系统接收何种查询。
举例说明:
以关系型数据库来讲,假设A表存储了整个医院门诊患者的基本信息,B表存储了患者的挂号信息,若是想查询张三医生接诊的年龄大约50的患者信息。
SELECT * FROM A LEFT JOIN B ON A.pat_no = B.pat_no WHERE A.age > 50 AND B.doctor = '张三';
等价的MongoDB查询,使用document文档做为匹配器。($gt:大于)
db.A.find({'doctor': '张三', 'age': {'$gt', 50}});
注意:
关系型数据库查询依赖于严格的范式模型,数据分别存放在A、B两张表中,MongoDB假设数据都存在每一个A集合中。
以上两种方式都演示了任意组合属性的功能,这也是ad hoc查询的功能。
建立索引缘由:
随着数据库中添加的文档数量约来越多,查询的成本会变得约来越高,有时无异于大海捞针。
使用索引的好处:
索引相似于图书的目录,咱们能够经过目录,快速查找想要知道的内容。
MongoDB的索引:
MongoDB中的索引使用了B-树(平衡树)数据结构,B-树索引也大量使用于许多关系型数据库中。
使用MongoDB,每一个集合咱们能够建立64个索引,例如升序、降序、复合键、哈希、文本以及地理空间索引等
概述:
Mongo提供了数据库的复制特性,叫作可复制结合(replica set)。
MongoDB如何保证复制:
在多个机器上分布式存储数据,当服务器或网络出错时,实现数据冗余存取和自动灾备。
与其余数据库主从复制相似,可复制集合的主节点能够同时接受读/写操做,可是从节点只能进行读取操做。若是服务主节点失败,集群会选择一个从节点,并自动提高为主节点。当以前的主节点主节点恢复后,自动做为从节点进行工做。
写入速度(write speed):
数据库给定的时间内插入、更新、删除的容量。
持久化(durability):
数据库写操做被永久保存的保证级别。
伸缩数据库的最简单的方式就是升级服务器硬件(添加更快的磁盘、更多的内存、更强的CPU来接触数据库性能瓶颈)。
垂直扩展(vertical scaling 或 scaling up)
提高单节点参数的作法一般称为垂直扩展,垂直扩展很是简单、可靠,可是达到某个点后成本很高,最终达到一个没法低成本垂直扩展的临界点。
水平扩展(horizontally 或 scaling out)
水平扩展指的是在多台机器上分布式存储数据库,而不是提高单个节点的配置。水平扩展架构能够运行在许多台很小的、很廉价的机器上,一般能够减小硬件的成本。而且分布式存储数据能够下降宕机带来的丢失数据的后果。
MongoDB的伸缩性
MongoDB采用基于范围的分区机智来实现水平扩展,称为分片机智,它能够自动化管理每一个分布式节点存储的数据。(另外,还有基于哈希和基于tag的分片机制)
分片系统处理额外的分片节点,并且它还会自动化灾备,每一个独立的节点是一个可复制集合,至少由2台机器组成,确保节点失败的时候能够自动回复。
总的来讲,Mongo的概念理解起来不算太难,有关系型数据库相关经验的能够对比着进行学习。