MongoDB学习笔记参阅<<MongoDB权威指南>>
MongDB
丰富的数据模型
一:面向文档 MongDB是面向文档的数据库,基本的思路就是把关系型数据库中的"行(row)"的概念换成更加灵活的"文档(document)"模型。面向文档的方式可以将文档或数组内嵌进来,所以用一条记录就可以表示非常复杂的层次关系。
二:MongoDB没有模式,文档的键不会事先定义也不会固定不变。由于没有模式需要更改,通常不需要迁移大量数据。不必将所有的数据都放在一个模子里面,应用层可以处理 新增或者丢失的键。这样开发者可以非常容易地变更数据模型。
扩展性
面向文档的数据模型使其可以自动在多台服务器之间分割数据,它还可以平衡集群的数据和负载,自动重排文档。要是需要更大的容量,只需在集群中添加新机器,然后让数据库来处理剩下的事
丰富的功能
索引 支持辅助索引,能进行多种快速查询,也提供唯一的、复合的和地理空间索引能力
存储JavaScript 开发人员不必使用存储过程了,可以直接在服务端存取JavaScript的函数和值
聚合 MongoDB支持MapReduce和其他聚合工具
固定集合 集合的大小是有上限的,这对某些类型的数据(比如日志)特别有用。
文件存储 MongoDB支持用一种容易使用的协议存储大型文件和文件的元数据
缺点
有些关系型数据库的常见功能MongoDB并不具备,比如联接(join)和复杂的多行事务。这个架构上的考虑是为了提高扩展性,因为这两个功能实在很难在一个分布式系统上实现。
性能
卓越的性能是MongoDB的主要目标,也极大地影响了设计上的很多决定。MongoDB使用MongoDB传输协议作为与服务器交互的主要方式(与之对应的协议需要更多的开销,如HTTP/REST)。它对文档进行动态填充,预分配数据文件,用空间换取性能的稳定。默认的存储引擎中使用了内存映射文件,将内存管理工作交给操作系统去处理
。动态查询优化会“记住”执行查询最高效的方式。总之,MongDB在各个方面都充分考虑了性能。MongoDB尽可能将服务端处理 逻辑交给客户端(由驱动程序或者用户的应用程序处理 )。这样精简的设计使用MongoDB获得了非常好的性能。
简便的管理
MongoDB尽量让服务器自治来简化数据库的管理。除了启动数据库服务器之外,几乎没有什么必要的管理操作。如果主服务器挂掉了,MongoDB会自动切换到备份服务器上,并且将备份服务器提升为活跃服务器。在分布式环境下,集群只需要知道新增加的节点,就会自动集成和配置新节点。
MongoDB的管理理念就是尽可能地让服务器自动配置,让用户能在需要的时候调整设置(但不强制)。