一、文档数据模型
文档是一组属性名和属性的集合。相较于关系数据库复杂的规范化,面向文档的数据模型很容易以聚合的形式来表示数据。文档采用无Schema的形式,这种做法带来了一定的优势:首先,由应用程序,而非数据库来保证数据结构;其次,无Schema的模型允许用真正可变属性来表示数据。
二、即时查询
即时查询:无需预先定义系统接受的查询类型。关系型数据库必备的性质,文档数据库提供了类似SQL查询的功能。但是,如Key-Value数据库不能实现即时查询功能。
三、二级索引
通常采用B树实现类似RDBMS的索引,对查询进行优化。
四、复制
MongoDB采用副本集(replica set)的拓扑结构提供复制功能。副本集将数据分布到多台机器上实现冗余,在服务器或网络故障时能够提供自动故障转移。复制功能还能用于扩展数据库的读能力(对于一个读密集的应用,可以把数据库读操作分散到副本集集群中的各台机器)。
副本集由一个主节点(Primary node)和一个或多个从节点(secondary node)构成。当主节点down掉后,集群会选择一个从节点自动将它提升为主节点,先前的主节点恢复后变成一个从节点。主节点既能够读也能够写,而从节点是只读的。图中官方文档给出的当主节点故障后MongoDB处理方式。
五、速度和持久化折中
通过开启Journaling日志记录,控制速度和持久化之间的平衡。
六、水平扩展能力
水平扩展与垂直扩展。垂直扩展,升级硬件,已暂时消除数据库的性能瓶颈。优势在于简单、可靠。缺点:成本过高,硬件水平有限。
水平扩展,通过集群,将数据分布到多台机器,而不是只提升单个节点的性能。优点:成本降低、可以降低故障带来的影响。
参考资料:MongoDB in Action,MongoDB文档