文档数据库MongoDB的功能与特点
MongoDB是一个基于分布式文件存储的开源数据库系统,它是介于关系型数据库和非关系型数据库之间的产品,在非关系型数据库当中功能最丰富,最像关系型数据库。它支持的数据结构非常松散,可以存储比较复杂的数据类型。MongoDB最大的特点是查询语言非常强大,其语法类似于面向对象的查询语言,可以实现类似关系型数据库单表查询的绝大部分功能,而且还支持对任意字段的数据建立多级索引,因此可以获得不错的访问效率。
MongoDB是以文档为基本单位的,即一个文档拥有一个键-值对(key-value)。文档是一些属性或字段的组合,但不同文档不需要设置相同的字段,并且相同的字段也不需要具有相同的数据类型,这与关系型数据库有很大的区别,也是MongoDB非常突出的特点。
MongoDB是按集合(Collection)存储的,集合就是MongoDB文档组,类似关系型数据库中的表。每个集合在数据库中都有一个唯一的标志名,并且可以包含无限数目的文档。集合不需要有严格的模式定义,因此通常不需要知道存储在集合中的文件的结构定义;如果需要,可以将不同结构的文件存储在同一个数据库中。
存储在集合中的文档被存储为键-值对的形式。键用于标志一个文档,值可以是各种类型的文件,文件用二进制形式存储。这种存储形式称为BSON(Binary Serialized Document Format),网络数据交换也使用这种存储形式。
HBase在物理存储上将列族拆分,而MongoDB则不会对文档进行分开存储。MongoDB的这个特点有点像行式存储。
集合存储在数据库中,它没有固定的结构,对集合可以插入不同格式和类型的数据,但通常情况下插入集合的数据都会有一定的关联性。
MongoDB支持的数据类型非常丰富,其主要支持的数据类型如下所述。
(1)String:字符串,存储数据常用的数据类型。在MongoDB中,UTF-8编码的字符串才是合法的。
(2)Integer:整型数值,用于存储数值。根据所在的服务器,分为32位或64位两种。
(3)Boolean:布尔值,用于存储布尔值(真/假)。
(4)Double:双精度浮点值,用于存储浮点值。
(5)Min/Max Keys:将一个值与BSON(二进制的JSON)元素的最低值和最高值相对比。
(6)Arrays:用于将数组、列表或多个值存储为一个键。
(7)Timestamp:时间戳,用于记录文档修改或添加的具体时间。
(8)Object:用于内嵌文档。
(9)Null:用于创建空值。
(10)Symbol:符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
(11)Date:日期时间,用UNIX时间格式来存储当前日期或时间。
(12)Object ID:用于创建文档的ID。
(13)Binary Data:用于存储二进制数据。
(14)Code:代码类型,用于在文档中存储JavaScript代码。
(15)Regular Expression:正则表达式类型,用于存储正则表达式。
MongoDB与HBase的主要区别如下所述。
(1)HBase依赖于HDFS,而MongoDB直接存储在本地磁盘中。
(2)HBase按照列族将数据存储在不同的文件中;MongoDB不分列,整个文档都存储在一个或者一组文件中。
(3)HBase根据文件的大小来控制域的拆分,而MongoDB根据负载情况来决定如何分片(Shards)。
一般来说,MongoDB的读效率比写效率高,而HBase适合写多读少的情况。