
4.1.4 文档数据库
文档数据库不同于关系数据库,关系数据库是高度结构化的,而文档数据库允许创建许多不同类型的非结构化的或任意格式的字段,与关系数据库的主要不同在于,它不提供对参数完整性和分布事务的支持,但和关系数据库也不是相互排斥的,它们之间可以相互交换数据,从而相互补充、扩展。
文档数据库是非关系数据库中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似JSON的BJSON格式,因此可以存储比较复杂的数据类型。MongoDB是典型的文档数据库,最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
文档型数据库可以看作是键值数据库的升级版。国内文档数据库SequoiaDB已经开源。MongoDB整体架构如图4.4所示。MongoDB内部架构如图4.5所示。
MongoDB的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
1)面向集合存储,易存储对象类型的数据。
2)模式自由。
3)支持动态查询。
4)支持完全索引,包含内部对象。
5)支持查询。
6)支持复制和故障恢复。
7)使用高效的二进制数据存储,包括大型对象(如视频等)。

图4.4 MongoDB整体结构

图4.5 MongoDB内部架构
8)自动处理碎片,以支持云计算层次的扩展性。
9)支持RUBY、Python、Java、C++、PHP等多种语言。
10)文件存储格式为BSON(一种JSON的扩展)。
11)可通过网络访问。
所谓面向集合就是数据被分组存储在数据集中,称为一个集合(Collection)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(Table),不同的是它不需要定义任何模式(Schema)。模式很自由,意味着对于存储在MongoDB数据库中的文件,不需要知道它的任何结构定义。如果需要,则完全可以把不同结构的文件存储在同一个数据库里。存储在集合中的文档是“键-值”对的形式。“键”用于唯一标识一个文档,为字符串类型,而“值”则可以是各种复杂的文件类型。这种存储形式称为BSON(Binary Serialized Document Format)。
MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB。
MongoDB把数据存储在文件中(默认路径为/data/db),为提高效率使用内存映射文件进行管理。