定义

MongoDB是一个由C++语言编写,基于分布式文件存储的数据库。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
它是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的一个。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

优点

与关系型数据库相比,mongodb主要具有一下几个优点

  • 弱一致性(最终一致),更能保证用户的访问速度 

举个例子,在传统的关系型数据库中,类似COUNT类型的操作会锁定数据集,因为这样可以保证得到“当前”情况下的精确值。这在某些情况下,例如通过ATM查看账户信息的时候很重要,但对于 Wordnik来说,数据是不断更新和增长的,这种“较精确”的保证却几乎没有任何意义,反而产生的巨大延迟是不可接受的。这些场景需要的是一个“大约”的数字以及更快的处理速度。Mongodb使用了下面的优化方式来避免锁定。 每次更新前,我们会先进行查询记录,查询操作会将对象放入内存,于是更新会尽可能的迅速。在主/从部署方案中,从节点可以设置“- pretouch”参数,也可以得到相同的效果。

  • 文档结构的存储方式,能够更便捷的获取数据。

对于一个层级式的数据结构来说,将这样的数据转化为扁平式的,表状的结构来保存数据,无论是在查询还是获取数据时都十分困难。 

  • 内置 GridFS,支持大容量的存储。

GridFS 是一个出色的分布式文件系统,支持海量的数据存储。内置了GridFS的MongoDB,能够满足对大数据集的快速范围查询。

  • 内置 Sharding。

提供基于 Range 的 Auto Sharding 机制:一个 collection 可按照记录的范围,分成若干个段,切分到不同的 Shard 上。Shards 可以和复制结合,配合 Replica sets 能够实现Sharding+fail-over,不同的 Shard 之间可以负载均衡。查询是对客户端是透明的。客户端执行查询,统计,MapReduce等操作,这些会被 MongoDB 自动路由到后端的数据节点。这让我们更多地关注于自己的业务。

  • 第三方支持丰富。

现在很多NoSQL开源数据库完全属于社区型的,没有官方支持,给使用者带来了很大的风险。而开源文档数据库MongoDB背后有商业公司10gen为其提供供商业培训和支持,MongoDB社区非常活跃。很多主流开发框架都迅速提供了对MongDB 的支持,不少知名大公司和网站也在生产环境中使用 MongoDB。 

  • 性能优越

在使用场合下,千万级别的文档对象,近10G的数据,对有索引的ID的查询不会比mysql慢,而对非索引字段的查询,则是完全碾压。 mysql 实际无法胜任大数据量下任意字段的查询,而mongodb的查询性能属实令人惊讶。写入性能同样很令人满意,同样写入百万级别的数据,mongodb基本10分钟以下可以解决。