MongoDB 是一种强大、灵活、可扩展的数据存储方式。它扩展了关系型数据库的众多有用功能,如辅助索引、范围查询(range query)和排序。MongoDB 的功能非常丰富,比如内置的对MapReduce 式聚合的支持,以及对地理空间索引的支持。
要是不能用的话,再牛的技术也是空谈,MongoDB 致力于容易上手、便于使用。MongoDB 的数据模型对开发者来说非常友好,配置选项对手管理员来说也很轻松,并且由驱动程序和数据库shell 提供的自然语言式的API。MongoDB 会为你扫除障碍,让你关注编程本身而不是为存储数据烦恼。
基本的思路就是将原来“行”(row)的概念换成更加灵活的“文档”(document)模型。面向文档的方式可以将文档或者数组内嵌进来,所以用一条记录就可以表示非常复杂的层次关系。使用面向对象语言的开发者恰恰这么看待数据,所以感觉非常自然。
MongoDB 没有模式:文档的键不会事先定义也不会固定不变。由于没有模式需要更改,通常不需要迁移大量数据。不必将所有数据都放到一个模子里面,应用层可以处理新增或者丢失的键。这样开发者可以非常容易地变更数据模型。
由于开发者要存储的数据不断增长,他们面临一个非常困难的选择:该如何扩展他们的数据库?升级呢(买台更好的机器),还是扩展呢(将数据分散到很多机器上)?升级通常是最省力气的做法,但是问题也显而易见:大型机一般都非常昂贵,最后达到了物理极限的话花多少钱都买不到更好的机器。对于大多数人希望构建的大型Web 应用来说,这样做既不现实也不划算。而扩展就不同了,不但经济而且还能持续添加:想要增加存储空间或者提升性能,只需要买台一般的服务器加入集群就好了。
MongoDB 从最初设计的时候就考虑到了扩展的问题。它所采用的面向文档的数据模型使其可以自动在多台服务器之间分割数据。它还可以平衡集群的数据和负载,自动重排文档。这样开发者就可以专注于编写应用,而不是考虑如何扩展。要是需要更大的容量,只需在集群中添加新机器,然后让数据库来处理剩下的事。
虽然MongoDB 功能强大,尽量保持关系型数据库的众多特性,但是它并不是要具备所有的关系型数据库的功能。它尽可能地将服务器端处理逻辑交给客户端(由驱动程序或者用户的应用程序处理)。这样精简的设计使得MongoDB 获得了非常好的性能。
MongoDB 的管理理念就是尽可能地让服务器自动配置,让用户能在需要的时候调整设置(但不强制)。
要是不能用的话,再牛的技术也是空谈,MongoDB 致力于容易上手、便于使用。MongoDB 的数据模型对开发者来说非常友好,配置选项对手管理员来说也很轻松,并且由驱动程序和数据库shell 提供的自然语言式的API。MongoDB 会为你扫除障碍,让你关注编程本身而不是为存储数据烦恼。
- 丰富的数据模型
基本的思路就是将原来“行”(row)的概念换成更加灵活的“文档”(document)模型。面向文档的方式可以将文档或者数组内嵌进来,所以用一条记录就可以表示非常复杂的层次关系。使用面向对象语言的开发者恰恰这么看待数据,所以感觉非常自然。
MongoDB 没有模式:文档的键不会事先定义也不会固定不变。由于没有模式需要更改,通常不需要迁移大量数据。不必将所有数据都放到一个模子里面,应用层可以处理新增或者丢失的键。这样开发者可以非常容易地变更数据模型。
- 容易扩展
由于开发者要存储的数据不断增长,他们面临一个非常困难的选择:该如何扩展他们的数据库?升级呢(买台更好的机器),还是扩展呢(将数据分散到很多机器上)?升级通常是最省力气的做法,但是问题也显而易见:大型机一般都非常昂贵,最后达到了物理极限的话花多少钱都买不到更好的机器。对于大多数人希望构建的大型Web 应用来说,这样做既不现实也不划算。而扩展就不同了,不但经济而且还能持续添加:想要增加存储空间或者提升性能,只需要买台一般的服务器加入集群就好了。
MongoDB 从最初设计的时候就考虑到了扩展的问题。它所采用的面向文档的数据模型使其可以自动在多台服务器之间分割数据。它还可以平衡集群的数据和负载,自动重排文档。这样开发者就可以专注于编写应用,而不是考虑如何扩展。要是需要更大的容量,只需在集群中添加新机器,然后让数据库来处理剩下的事。
- 丰富的功能
- 索引
MongoDB 支持通用辅助索引,能进行多种快速查询,也提供唯一的、复合的和地理空间索引能力。
- 存储JavaScript
开发人员不必使用存储过程了,可以直接在服务端存取JavaScript. 的函数和值。
- 聚合
MongoDB 支持MapReduce 和其他聚合工具。
- 固定集合
集合的大小是有上限的,这对某些类型的数据(比如日志)特别有用。
- 文件存储
MongoDB 支持用一种容易使用的协议存储大型文件和文件的元数据。
有些关系型数据库的常见功能MongoDB 并不具备,比如联接(join)和复杂的多行事务。这个架构上的考虑是为了提高扩展性,因为这两个功能实在很难在一个分布式系统上实现。
- 不牺牲速度
虽然MongoDB 功能强大,尽量保持关系型数据库的众多特性,但是它并不是要具备所有的关系型数据库的功能。它尽可能地将服务器端处理逻辑交给客户端(由驱动程序或者用户的应用程序处理)。这样精简的设计使得MongoDB 获得了非常好的性能。
- 简便的管理
MongoDB 的管理理念就是尽可能地让服务器自动配置,让用户能在需要的时候调整设置(但不强制)。
- 其他内容
——节选自《MongoDB权威指南》一书
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14730899/viewspace-700428/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14730899/viewspace-700428/