前言
说起MongoDB,那就不得不说起NoSQL(Not Only SQL)数据库了,意为“不仅仅是SQL”,指的是非关系型数据库。传统关系型数据库中的表都是存储一些结构化的数据,每条记录的字段组成都是一样,即使不是每条记录都需要所有的字段,但数据库会为每条记录分配所有的字段。而非关系型数据库以键值对(key-value)存储,它的结构不固定,每一条记录可以有不一样的键,每条记录可以根据自己的需要增加一些自己的键值对,这样就不会局限于固定的机构,可以减少一些时间和空间的开销,因此大多数情况下效率和性能都高于关系型数据库。
NoSql简介
NoSQL现在的产品有很多,其中最典型的就是Redis和MongoDB,其一般实现存储数据的结构有以下几种:
1. 文档存储数据库
文档存储数据库采用面向文档的方法来存储数据,其理念是可讲单个实体的所有数据都存储在一个文档中,而文档可存储在集合中。其代表就是MongoDB、CouchDB。
2. 键/值数据库
该种类型的存储是最简单的NoSQL数据库,这些数据库存储数据时不采用任何模式,键可指向任何数据类型,从对象到字符串值,再到编程语言的函数。
键/值存储的有点是易于实现和添加数据因此非常适合用于提供基于键来存储和检索数据的简单存储,缺点是无法根据存储的值来查找元素。其代表是Redis。
3. 列存储数据库
列存储数据库是在键空间内以列的方式存储数据,其中键空间基于独一无二的名称、值和时间戳。这类似与键/值数据库,但列存储数据库适合用于存储根据时间戳来区分有效内容和无效内容的数据,这提供了这样的有点,即能够让数据库中存储的数据过期。部分代表 Hbase、Cassandra、Hypertable
4. 图存储数据库
图存储数据库是为能够轻松将数据表示为图,这意味着元素通过他们之间的关系相关联,而这些关系的数量是不确定的,就像家谱、社会关系、航线拓扑图或标准交通图那样。部分代表Neo4J、FlockDB
5. 对象存储
通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。其代表为db4o、Versant
6. xml数据库
高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。其代表为Berkeley、DB
NoSql数据库优缺点
在优势方面主要体现在下面几点:
简单的扩展
快速的读写
低廉的成本
灵活的数据模型在不足方面主要有下面几点:
不提供对SQL的支持
支持的特性不够丰富
现有的产品不够成熟
MongoDB简介
MongoDB是用C++语言编写的非关系型数据库。特点是高性能、易部署、易使用,存储数据十分方便,主要特性有:
1.面向集合存储,易于存储对象类型的数据
2.模式自由
3.支持动态查询
4.支持完全索引,包含内部对象
5.支持复制和故障恢复
6.使用高效的二进制数据存储,包括大型对象
7.文件存储格式为BSON(一种JSON的扩展,JSON是像字符串一样存储的,BSON是按结构存储的,BSON的存储空间和操作速度都胜于JSON)
MongoDB和关系数据库的对比
MongoDB基本概念
1.文档(document)是MongoDB中数据的基本单元,非常类似于关系型数据库系统中的行(但是比行要复杂的多)。
2.集合(collection)就是一组文档,如果说MongoDB中的文档类似于关系型数据库中的行,那么集合就如同表。
3.MongoDB的单个计算机可以容纳多个独立的数据库,每一个数据库都有自己的集合和权限。
4.MongoDB自带简洁但功能强大的JavaScript shell,这个工具对于管理MongoDB实例和操作数据作用非常大。
5.每一个文档都有一个特殊的键”_id”,它在文档所处的集合中是唯一的,相当于关系数据库中的表的主键。
MongoDB数据类型