每个技术或者产品的出现,都有其背景,并不是臆造或者凭空出现的,都是为特定的历史发展时期解决特定的问题而生。我们来看看横空出世的MongoDB具体能解决什么问题。

先回顾下NoSQL的概念,NoSQL的常见的解释一般有两种,一是不仅仅是SQL(Not Only SQL),二是非关系型(Non-relatonal)。在这里我们理解为非关系型数据库。非关系型数据库的种类比较多,主要有MongoDB为代表的文档存储型(Document store),Cassandra为代表的列存储型(Wide column store),Redis为代表的键值型(Key-Value store)等,更详细的信息可以从DB-Engine网站了解。

现在说说MongoDB的情况,MongoDB的名字由来,Humongous Database=MongoDB,中文意思就是巨大无比的数据库,顾名思义,MongoDB就是为处理大数据而生,以解决海量数据的存储和高效查询使用为使命。可以看出,它的使命不是为替代关系型数据库为目的,而是为对关系型数据库的补充。

MongoDB的特点:

1、非关系型

既然是非关系型,那就肯定不适用复杂的多文档(多表)的级联查询,如果有这样的需求,我们还是用关系型数据库吧,MongoDB不适合。

2、模型自由(Schema-Free)

MongoDB一个数据库实例可以有多个Collection(集合)(对应关系型数据库的表Table),一个Collection里有多个Document(对应关系型数据库的行Row),所谓模型自由,用关系型数据库的话说,就是表Table的列Column的数量和类型不确定。是不是很意外?确实是这样的,也就是说在一个Collection里的多个Document,每个Document都可以有任意个属性,并且每个属性的类型都可以不一样。如果我们的程序的数据校验大部分都依赖于后台数据库的校验,用MongoDB肯定会获得数据错乱,反过来说,我们可以获取到巨大的自由,随时根据需要扩充属性字段,同时有一个棒棒的后台。

3、副本集和分片集群(Replica Sets and Sharded Clusters)

MongoDB提供副本集和分片集群技术,从先天上支持数据库的高扩展性和高伸缩性,可以简单的是使用基于X86的小服务器集群,提供强大的处理能力,而且很容易扩展,目前3.0版本已经支持高达50个副本集。分片集群会让不停增长的数据始终如一的提供初始的访问性能,而不会随着数据的增长,系统的访问速度越来越慢。