初识MongoDB

到了新公司,没想到公司有用Mongo数据库,这让从未接触过MongoDB的我有点手足无措,只能恶补了。

前言:
2010年,NoSQl在国内掀起了一股热潮,其中风头最大的莫过于MongoDB了。越来越多的公司准备或已经将MongoDB投放到生产环境中,很多创业团队也将MongoDB作为自己的首选数据库,创造出眼花缭乱的互联网应用。
简介:
特性:强大、灵活、可扩展。它扩展了关系型数据库的众多有用功能,如辅助索引、范围查询(range query)、和排序。MongoDB功能非常丰富,内置支持MapReduce式聚合,支持地理空间索引。此外,MongoDB致力于容易上手、便于使用。对于开发者,MongoDB有非常友好的数据模型;对于管理者,MongoDB的配置选项非常轻松。目前绝大多数语言已经支持MongoDB,并且附有强大的驱动程序。MongoDB自己也有一个JavaScript Shell,完美支持js,并且配合MongoDB做了一些易于操作数据库的语法。
丰富的数据模型:
MongoDB是面向文档的数据库,不是关系型数据库。因此,MongoDB有很强的扩展性。所谓的面向文档的数据模型就是关系型的行替换成MongoDB的‘文档’。面向文档的数据模型可以将文档或数组内嵌进来,所以用一条记录就可以表示非常复杂的层次关系。符合面向对象的开发模式。
MongoDB没有模式:文档的键不用事先定义,也不用固定不变。由于没有模式需要更改,通常不需要大量迁移数据。不必将所有数据都放在一个模子里,应用层可以很方便的增加或者删除键。所以开发者也可以很容易的变更数据模型。
容易扩展:
MongoDB设计之初就考虑了扩展的问题,面向文档的数据模型使其可以在多台服务器之间分割数据,并且可以平衡集群之间的数据和负载,自动重排文档。这样开发者就可以专注开发应用,而不用考虑数据库负载。若需增加存储空间或提升性能,只是增加一台或几台机器即可,然后MongoDB处理剩下的事。
丰富的功能:
索引:MongoDB支持辅助索引 ,能够进行多种快速查询,也能提供唯一的、复合的及地理空间索引功能。
存储JS:开发人员不必在使用存储功能了,可以在服务器端存取JS函数或值。
聚合:MongoDB支持MapReduce和其他聚合工具。
固定集合:集合的大小是有上限的,这对某些数据(比如日志)特别有用。
文件存储:MongoDB使用一种容易使用的协议储存大型文件和文件的元数据。
有些关系数据库的常见功能MongoDB并不支持,比如联接(join)和复杂的多行事物。这样的架构主要是考虑MongoDB的扩展性,因为这两个功能很难在一个分布式系统上实现。
卓越的性能:
MongoDB的主要目标就是具有卓越的性能,这样也极大的影响了设计的决策。MongoDB使用MongoDB传输协议作为与服务器交互的主要工具(常用的网络协议需要更多的开销,如HTTP/REST),它对文档进行动态填充,遇分配数据空间,用空间换取性能。默认的存储引擎使用了内存映射文件,将内存管理工作交与操作系统。动态查询优化器会“记住”执行查询速度最快的方式。MongoDB尽可能的将服务器处理逻辑交与客户端(驱动程序或用户应用程序)。这样的设计获得了非常好的性能。
管理简便:
MongoDB尽量让服务器自治来简化数据库的管理。除了开启数据库,几乎没有别的操作。如果服务器挂掉了,MongoDB会自动切换掉备份的机器上。在分布式系统上,集群只知道有新增的节点,就会自动集成并配置新节点。

转载请注明出处,原文地址:http://www.sundabao.com/%E5%88%9D%E8%AF%86mongodb/