<mongoDB-1> 简介

一、简介
MongoDB是一种强大灵活可扩展的数据存储方式。它扩展了关系型数据库的众多有用功能,如辅助索引,范围查询和排序。MongoDB的功能非常丰富,比如内置的对MapReduce式聚合的支持,以及对地理空间索引的支持。

1.1 丰富的数据类型
MongoDB是 面向文档的数据库(所谓的文档就是一种结构化的数据,类似JSON对象), 不是关系型数据库。放弃关系模型的主要原因就是为了获得更加方便的扩展性,当然还有其他好处。

基本的思路就是将原来 “行”(row)的概念换成更加灵活的 “文档”(document)模型。面向文档的方式可以将文档或者数组内嵌进来,所以用一条记录就可以表示非常复杂的层次关系。使用面向对象语言的开发者恰恰这么看待数据,所以感觉非常自然。

MongoDB没有模式:文档的键不会事先定义也不会固定不变。由于没有模式需要更改,通常不需要迁移大量数据。不必将所有数据都放到一个模子里面,应用层可以处理新增或者丢失的键。这样开发者可以非常容易地变更数据模型。 个人理解的“模式(schema)”就是这样的模子定义,比如关系型数据库里每张表的列都是固定的,每一行数据都必须按照这个模子来增删改查。但是MongoDB不必这样,每条记录可以拥有不同类型不同数量的字段。

1.2 容易扩展
应用数据集的大小在飞速增加。量大到很多数据库都应付不来。T级别的数据现在随处可见。
由于开发者要存储的数据不断增长,他们面临一个困难的选择:该如何扩展数据库?升级(买更好的服务器)还是扩展(将数据分散到很多服务器上)?升级通常是最省力的做法,但是达到了物理极限的话花再多的钱都买不到更好的服务器。而扩展就不同了,不但经济而且可以持续添加:想要增加存储空间或者提升性能,只需要买台一般的服务器加入集群就好了。
MongoDB从最初设计的时候就考虑到了扩展的问题。它所采用的面向文档的数据模型使其可以自动在多台服务器之间分割数据。它还可以平衡集群的数据和负载,自动重排文档。这样开发者就可以专注于编写应用,而不是考虑如何扩展。要是需要更大的容量,只需要在集群中添加新机器,然后让数据库来处理剩下的事。


1.3 丰富的功能
1)索引
MongoDB支持通用辅助索引,能进行多种快速查询,也提供唯一的、复合的和地理空间索引能力。

2)存储JavaScript
开发人员不必使用存储过程了,可以直接在服务端存取JavaScript的函数和值。

3)聚合
MongoDB支持MapReduce和其他聚合工具。


4)固定集合
集合的大小是有上限的,这对某些类型的数据(比如日志)特别有用。

5)文件存储
MongoDB支持用一种容易使用的协议存储大型文件和文件的元数据。
[b]有些关系型数据库的常见功能MongoDB并不具备,比如join和复杂的多行事务。这个架构上的考虑是为了提高扩展性,因为这两个功能是在很难在一个分布式上实现。[/b]

1.4 不牺牲速度
卓越的性能是MongoDB的主要目标,也极大地影响了设计上的很多决定。MongoDB使用 MongoDB传输协议作为与服务器交互的主要方式(与之对应的协议需要更多的开销,如HTTP/REST)。 它对文档进行动态填充,预分配数据文件,用空间换取性能的稳定。默认的存储引擎中使用了内存映射文件,将内存管理工作交给操作系统去处理。动态查询优化器会“记住”执行查询最高效的方式。总之,MongoDB在各个方面都充分考虑了性能。

虽然MongoDB功能强大,尽量保持关系型数据库的众多特性,但是它并不是要具备所有的关系型数据库的功能。它尽可能地将服务器端处理逻辑交给客户端(由驱动程序或者用户的应用程序处理)。这样精简的设计使得MongoDB获得了非常好的性能。


1.5 简便的管理
MongoDB尽量让服务器自治来简化数据库的管理。除了启动数据库服务器之外,几乎没有什么必要的管理操作。如果主服务器挂掉了,MongoDB会自动切换到备份服务器上,并且将备份服务器提升为活跃服务器。在分布式环境下,集群只需要知道有新增加的节点,就会自动集成和配置新节点。
MongoDB的管理理念就是尽可能让服务器自动配置,让用户能在需要的时候调整设置。

就目前本人应用,MongoDB存储项目中的大字段,比如一段html代码,xml文件等;属性很多的对象,比如商品,因为无模式,不需要关联查询。其余一般还是存在关系型数据库里。还可以参考:
http://blog.csdn.net/offbye/article/details/40371395
http://www.admin10000.com/document/2500.html
http://www.cnblogs.com/zs234/p/3388065.html

参考:
《MongoDB权威指南》

猜你喜欢

转载自zoroeye.iteye.com/blog/2222501