MongoDB是一个可扩展、高性能的下一代数据库。MongoDB中的数据以文档形式存储,这样就能在单个数据对象中表示复杂的关系。文档可能由
以下几 部分组成:独立的基本类型属性、“内嵌文档”或文档数组。
这样的灵活性让开发者能以一种易于管理且灵活的方式来对大量的问题进行建模,不必将数据打散到不同的数据表中。在数据不宜被构造成单独文档的情况
下,MongoDB有“DBRef”的概念,这是从文档的一个属性指向另一个文档的指针。
从MongoDB数据库中获取和查询数据是十分灵活的——可以基于主文档、文档中的任意属性、任意内嵌文档、数组中的任意文档来动态地查询文档。可
以通过 “点”符号来访问内嵌文档。
一直以来,MongoDB的目标都不是处理少数问题的特殊数据库,而是一种新型数据库,是可以为开发者解决大量现实问题的数据库。
MongoDB项目的重点是将非关系模型的优点和传统数据库中常见的重要特性结合起来,前者包括高可扩展性、性能和易于开发,后者在重要的操作型数
据存储中很有用。
MongoDB不是在实验室里设计出来的,它源自于我们自己在构建大规模高可用系统方面的经验。
例如,在一个关系型数据库中,一篇博客(包含文章内容、评论、评论的投票)会被打散在多张数据表中。在MongoDB中,能用一个文档来表示一篇博客,评
论与投票作为文档数组,放在正文主文档中。这样数据更易于管理,消除了传统关系型数据库中影响性能和水平扩展性的“JOIN”操作。
从操作角度来讲,MongoDB可以根据应用程序的需要以两种模式来运行。第一种是“单主”(single
master)模式,只有一台主服务器来处理所有的写操作。读操作能从中分离出去,通过任意数量的从服务器来进行读操作,这有利于提高读的可扩展性(使用
场景:Sourceforge)。
对于那些写数据量很大或写频率过高,单台主服务器无法处理的应用程序,可以使用MongoDB的自动分片模式(正处于alpha阶段)。该模式下写
操作会自动分配到任意数量的“片”中(一般是一台或一组MongoDB服务器),它们负责这部分数据集的写和读。
无论使用哪种模式,MongoDB都会采取“强
一致性
”方法(你可以把MongoDB看成CAP
理论中的C-P系统)。
高可用性是通过将数据复制到多个MongoDB节点来实现的,每个节点都能及时成为一个分片的主服务器——MongoDB会自动处理故障转移。这能让你在
维持相当高的写可用性的同时,拥有强一致性特性,这对一些用例来说非常重要。
10gen设计了MongoDB,以此来解决应用程序开发社区中的大量现实问题。我们可以把MongoDB用作很多有数据库后端的应用程序的数据存
储部分,实际的客户部署情况也证明了这一点。
今天,10gen为那些在生产应用程序中使用了MongoDB的客户提供支持
、咨询和培训
。在不久的将来,10gen将提供基于云的服务(例如托管的
MongoDB服务)以及针对大规模MongoDB集群的高级管理工具。