ITPub博客

首页 > Linux操作系统 > Linux操作系统 > MongoDB简介

MongoDB简介

原创 Linux操作系统 作者:turingbooks 时间:2011-06-21 16:15:07 0 删除 编辑
     
      MongoDB 是一种强大、灵活、可扩展的数据存储方式。它扩展了关系型数据库的众多有用功能,如辅助索引、范围查询(range query)和排序。MongoDB 的功能非常丰富,比如内置的对MapReduce 式聚合的支持,以及对地理空间索引的支持。
      要是不能用的话,再牛的技术也是空谈,MongoDB 致力于容易上手、便于使用。MongoDB 的数据模型对开发者来说非常友好,配置选项对手管理员来说也很轻松,并且由驱动程序和数据库shell 提供的自然语言式的API。MongoDB 会为你扫除障碍,让你关注编程本身而不是为存储数据烦恼。
  • 丰富的数据模型
        MongoDB 是面向文档的数据库,不是关系型数据库。放弃关系模型的主要原因就是为了获得更加方便的扩展性,当然还有其他好处。
        基本的思路就是将原来“行”(row)的概念换成更加灵活的“文档”(document)模型。面向文档的方式可以将文档或者数组内嵌进来,所以用一条记录就可以表示非常复杂的层次关系。使用面向对象语言的开发者恰恰这么看待数据,所以感觉非常自然。
        MongoDB 没有模式:文档的键不会事先定义也不会固定不变。由于没有模式需要更改,通常不需要迁移大量数据。不必将所有数据都放到一个模子里面,应用层可以处理新增或者丢失的键。这样开发者可以非常容易地变更数据模型。
  • 容易扩展
        应用数据集的大小在飞速增加。传感器技术的发展、带宽的增加,以及可联网手持设备的普及使得当下即便很小的应用也要存储大量数据,量大到很多数据库都应付不来。T 级别的数据原来是闻所未闻的,现在已经司空见惯了。
        由于开发者要存储的数据不断增长,他们面临一个非常困难的选择:该如何扩展他们的数据库?升级呢(买台更好的机器),还是扩展呢(将数据分散到很多机器上)?升级通常是最省力气的做法,但是问题也显而易见:大型机一般都非常昂贵,最后达到了物理极限的话花多少钱都买不到更好的机器。对于大多数人希望构建的大型Web 应用来说,这样做既不现实也不划算。而扩展就不同了,不但经济而且还能持续添加:想要增加存储空间或者提升性能,只需要买台一般的服务器加入集群就好了。
        MongoDB 从最初设计的时候就考虑到了扩展的问题。它所采用的面向文档的数据模型使其可以自动在多台服务器之间分割数据。它还可以平衡集群的数据和负载,自动重排文档。这样开发者就可以专注于编写应用,而不是考虑如何扩展。要是需要更大的容量,只需在集群中添加新机器,然后让数据库来处理剩下的事。
  • 丰富的功能
        很难界定什么才算作一个功能:上面提及的算是功能吗?关系型数据库做不到的算吗?都可以说Memcached 做不到的呢?其他面向文档的数据库做不到的又如何呢?但无论界定的标准是什么,都可以说MongoDB 拥有一些真正独特的、好用的工具,其他方案不具备或不完全具备这些工具。
  • 索引
        MongoDB 支持通用辅助索引,能进行多种快速查询,也提供唯一的、复合的和地理空间索引能力。
  • 存储JavaScript
        开发人员不必使用存储过程了,可以直接在服务端存取JavaScript. 的函数和值。
  • 聚合
        MongoDB 支持MapReduce 和其他聚合工具。
  • 固定集合
        集合的大小是有上限的,这对某些类型的数据(比如日志)特别有用。
  • 文件存储
        MongoDB 支持用一种容易使用的协议存储大型文件和文件的元数据。

        有些关系型数据库的常见功能MongoDB 并不具备,比如联接(join)和复杂的多行事务。这个架构上的考虑是为了提高扩展性,因为这两个功能实在很难在一个分布式系统上实现。
  • 不牺牲速度
        卓越的性能是MongoDB 的主要目标, 也极大地影响了设计上的很多决定。MongoDB 使用MongoDB 传输协议作为与服务器交互的主要方式(与之对应的协议需要更多的开销,如HTTP/REST)。它对文档进行动态填充,预分配数据文件,用空间换取性能的稳定。默认的存储引擎中使用了内存映射文件,将内存管理工作交给操作系统去处理。动态查询优化器会“记住”执行查询最高效的方式。总之,MongoDB 在各个方面都充分考虑了性能。
        虽然MongoDB 功能强大,尽量保持关系型数据库的众多特性,但是它并不是要具备所有的关系型数据库的功能。它尽可能地将服务器端处理逻辑交给客户端(由驱动程序或者用户的应用程序处理)。这样精简的设计使得MongoDB 获得了非常好的性能。
  • 简便的管理
        MongoDB 尽量让服务器自治来简化数据库的管理。除了启动数据库服务器之外,几乎没有什么必要的管理操作。如果主服务器挂掉了,MongoDB 会自动切换到备份服务器上,并且将备份服务器提升为活跃服务器。在分布式环境下,集群只需要知道有新增加的节点,就会自动集成和配置新节点。
        MongoDB 的管理理念就是尽可能地让服务器自动配置,让用户能在需要的时候调整设置(但不强制)。
  • 其他内容
        在本书中,我们还会花些时间追溯一下在开发MongoDB 的过程中一些决定的原因和动机,希望通过这种方式来阐释MongoDB 的理念。毕竟,MongoDB 的愿景是对自身最好的诠释——建立一种灵活、高效、易于扩展、功能完备的数据库。

——节选自《MongoDB权威指南》一书

MongoDB权威指南.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14730899/viewspace-700428/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-07-02

  • 博文量
    52
  • 访问量
    93947