1. MongoDB简介

MongoDB是一个跨平台的基于Key_Value键值对形式保存数据的NoSQL文档类型数据库。

NoSQL(not only sql)数据库,泛指非关系型数据库。

1.1 NoSQL数据库的特点

l 不需要预定义模式

不需要事先定义数据模式,预定义表结构。数据中的每条记录都可能有不同的属性和格式。当插入数据时,并不需要预先定义它们的模式。

l 无共享架构

相对于将所有数据存储的存储区域网络中的全共享架构。NoSQL往往将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。

l 弹性可扩展

可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。

l 分区

相对于将数据存放于同一个节点,NoSQL数据库需要将数据进行分区,将记录分散在多个节点上面。并且通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。

l 异步复制

和RAID存储系统不同的是,NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会被网络传输引起迟延。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能会丢失少量的数据。

l BASE

相对于事务严格的ACID特性,NoSQL数据库保证的是BASE特性。BASE是最终一致性和软事务。

1.2 NoSql数据库的分类

分类

Examples举例

典型应用场景

数据模型

优点

缺点

键值(key-value)

Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB

内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。

Key 指向 Value 的键值对,通常用hash table来实现

查找速度快

数据无结构化,通常只被当作字符串或者二进制数据

列存储数据库

Cassandra, HBase, Riak

分布式的文件系统

以列簇式存储,将同一列数据存在一起

查找速度快,可扩展性强,更容易进行分布式扩展

功能相对局限

文档型数据库

CouchDB, MongoDb

Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容)

Key-Value对应的键值对,Value为结构化数据

数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构

查询性能不高,而且缺乏统一的查询语法。

图形(Graph)数据库

Neo4J, InfoGrid, Infinite Graph

社交网络,推荐系统等。专注于构建关系图谱

图结构

利用图结构相关算法。比如最短路径寻址,N度关系查找等

很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。

1.3 MongoDB数据库特点

MongoDB数据库有以下特点:

l 跨平台、支持语言众多

l 模式自由

l 支持文件存储

l 易于水平扩展

l 复制集机制

l 多级索引

l 面向集合存储

l 丰富的查询语句

综合以上特点,MongoDB适用于大数据量、高并发、弱事务的互联网应用。

2. MongoDB安装

这里主要介绍在windows平台下的安装(其他平台的安装请到官方对应的安装介质)。

2.1 下载安装介质

MongoDB下载地址如下: https://www.mongodb.org/downloads

下载对应的windows平台下的版本。

MongoDBVUE(可视化工具)下载地址:http://www.mongovue.com/downloads/

2.2 安装

下载完成之后,直接点击安装即可。

2.2.1 将MongoDB添加到环境变量

即将MongoDB安装目录的bin目录路径,如下所示:C:\Program Files\MongoDB\Server\3.0\bin

添加到环境变量path中去。要想检测是否添加成功,可以在命令行里,输入Mongo –version查看安装的mongodb的版本号,结果如下图所示:

\

2.2.2 启动MongoDB

在启动mongodb之前,需要先为其指定对应的Data(即数据存储)目录,log(日志)目录,目录结构如下图所示:

\

然后在命令行里输入以下命令:

C:\WINDOWS\system32>mongod --dbpath D:\MangoDB\Data --logpath D:\MangoDB\Log\mongodb.log –logappend

该命令主要是为mongodb指定了数据存储目录和日志目录,在里输入:

http://localhost:27017

看到如下内容,即表明服务已经启动了:

\

It looks like you are trying to access MongoDB over HTTP on the native driver port.

如果该命令窗口关闭,则该服务就停止了。但是这样有一个问题,每次开启服务的时候,都需要输入这行命令,会很费事。我们有两种方式去解决这个问题,如下:

l 将以上的命令保存为一个bat文件,每次启动服务的时候点击即可(即上图中所示的Start文件)

l 将MongoDB添加到服务中去,以服务的形式启动,如下所示:

在命令行中输入以下命令:

C:\WINDOWS\system32>mongod --dbpath D:\MangoDB\Data --logpath D:\MangoDB\Log\mongodb.log --install --serviceName "MongoDB"

在命令行里输入:net start MongoDB

结果如下:

输入:net stop MongoDB,停止服务。

3. MongoDB数据模型

MongoDB是面向集合存储的文档型数据库,其基本概念与常用的关系型数据库有所不同。

3.1 文档

文档是MongoDB最核心的的概念,本质上是一种类JSON的BJSON格式的数据。

BSON是在JSON的基础上加入了一些新的数据类型,包括日期、int32,int64等。

BSON是由键值对组成,具有轻量性、可遍历、高效性三个特性。

3.2 集合

将一组相关的文档放到一起就组成了集合。

文档相当于关系数据库中的一条信息,集合就相当于关系型数据库中的表。

3.3 数据库

多个文档组成集合,多个集合组成数据库。一个MongoDB示例可以承载多个数据库,每个数据库都有独立的权限。

3.4数据类型

3.4.1 基本数据类型

Null: 空值或不存在的字段

布尔:true或false

数值类型:只支持int32,int64,double

字符串:

二进制数据:可以保存由任意字节组成的字符串

正则表达式:主要用于查询。

例如:{name:/olive