MongoDB是为快速开发互联网Web应用而设计的数据库系统。其数据模型和持久化策略就是为了构建高读/写吞吐量和高自动灾害伸缩性的系统。无论系统需要单个还是多个节点,MongoDB都可以提供高性能。如果你经历过关系型数据库的伸缩困境,那么使用MongoDB就可避免这种困境。但并非每个人都需要伸缩性操作。如果你需要的就是单台数据库服务器,那么为什么还要使用MongoDB呢?

或许开发者使用MongoDB的最大理由并非是其伸缩策略特性,而是其直观的数据模型。

MongoDB在文档里存储数据而不是在行里。下面就是一个例子。

{
	_id: 10,
	username: 'Shing',
	email: 'Shing@gmail.com'
}

这是一个简单的文档,它存储了用户的一些简单信息字段。那么这种数据模型的优势是什么?设想这种情况,需要为每个用户存储多个email。在关系型数据库里,需要创建单独的email表,然后通过外键关联起来。而MongoDB提供了非常简单的方法来解决这种问题:

{
	_id: 10,
	username: 'Shing',
	email: [
		'Shing@gmail.com',
		'Shing@163.com'
	]
}

基于文档的数据结构可以表示丰富的,多层次的数据结构。它经常用来处理无须多表关联的工作。

例如,假设要为电商网站的数据库建模,若使用标准的范式设计数据库。信息可能分割到几十个表中存储,要获得完整的数据库里存储的商品信息,则需要关联SQL查询。

相比之下,使用文档模型时,绝大多单个商品信息都可以存储在单个文档中。打开MongoDB JavaScript shell就可以轻易获取商品的类JSON数据信息。我们也可以查询或者操作它。MongoDB的查询功能是专门用于处理结构化文档操作的,所以用户从关系型数据库到非关系型数据库查询体验基本在同一层次。此外,大部分开发者使用的是面向对象语言。使用MongoDB,语言中定义的对象可以原样持久化保存。