MongoDB简介和安装

一、什么是NoSQL

1、NoSQL简介

NoSQL是Not Only SQL的缩写,它指的是非关系型的数据库,是以key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准、ACID属性、表结构等等,这类数据库主要有以下特点:非关系型的、分布式的、开源的、水平可扩展的。

2、NoSQL数据库的优缺点

在优势方面,主要体现在下面几点:

简单的扩展,快速的读写,低廉的成本,灵活的数据模型

在不足方面,常见主要有下面几点:

不提供对SQL的支持,支持的特性不够丰富,现有产品的不够成熟

二、认识MongoDB

1、MongoDB简介

  MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的,语法有点类似Javascript面向对象的查询语言,它是一个面向集合的,模式自由的文档型数据库。

面向集合(Collenction-Orented)

意思是数据被分组存储在数据集中被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库里的表,不同的是它不需要定义任何模式。

模式自由(schema-free)

意思是集合里面没有列和行的概念,下面两个记录可以存在于同一个集合里面:

{"name" : "mongo"}

{"age" : 25}

文档型(documents)

意思是我们存储的数据是键-值对的集合,键是字符串,值可以是数据类型集合里的任意类型,包括数组和文档,每一个文档相当于关系数据库中的一条记录。

2、MongoDB特性

MongoDB的特点是高性能、易部署、易使用,存储数据非常方便,主要特性有:

  面向集合存储,易于存储对象类型的数据

  模式自由

  支持动态查询

  支持完全索引,包含内部对象

  支持复制和故障恢复

  使用高效的二进制数据存储,包括大型对象(如视频等)

  自动处理碎片,以支持云计算层次的扩展性

  文件存储格式为BSON(一种JSON的扩展)

适用场景:

  持久化缓存层

  高效的实时性

  对于对象及JSON数据的存储

  高伸缩性的场景

  大尺寸,低价值的数据存储

不适用场景:

  要求高度事务性的系统。

  传统的商业智能应用。

  复杂多表查询。

三、MongoDB的安装(Linux平台)

解压安装

# tar -zxvf mongodb-linux-i686-2.0.2.tgz
# cd mongodb-linux-i686-2.0.2
--将bin目录拷贝到/usr/local/mongodb下
# rsync -a bin /usr/local/mongodb
# mkdir data
# touch dblogs

启动mongodb

# /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data 
--logpath=/usr/local/mongodb/dblogs --fork

--dbpath执行数据库存放路径(默认是/data/db)

--fork是以Daemon(进程)方式运行,

注意:如果指定--fork参数,必须指定--logpath 日志文件路径

设置开机启动

# vi /etc/rc.local

/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/dblogs --fork

关闭mongodb服务

# pkill mongod
--或者
# killall mongod

注意:不能使用kill -9来杀掉mongod进程,这样将导致下次无法启动mongodb进程,删除mongodb存放数据的目录data下的锁文件mongod.lock后,可以重新启动mongod服务。

启动命令常用参数选项说明

--dbpath  指定数据库的目录

--port  指定数据库的端口,默认是27017

--bind_ip  绑定IP

--directoryperdb  为每个db创建一个独立子目录

--logpath  指定日志存放目录

--logappend  指定日志生成方式(追加/覆盖)

--pidfilepath  指定进程文件路径,如果不指定,将不产生进程文件

--keyFile  集群模式的关键标识

--journal  启用日志

--nssize  指定.ns文件的大小,单位MB,默是16M,最大是2GB

--maxConns  最大的并发连接数

--notablescan  不允许进行表扫描

--noprealloc  关闭数据文件的预分配功能

--fork  以后台Daemon形式运行服务

更多的参数选项利用 mongod --help 进行查看

登录mongodb客户端

[root@localhost mongodb]# /usr/local/mongodb/bin/mongo
MongoDB shell version: 2.0.2
connecting to: test
> 

退出shell控制台

Ctrl+c 或者 exit 回车

四、MongoDB的体系结构

1、逻辑结构关系对比

关系型数据库:

MySQL数据库(database)、表(table)、记录(rows)三个层次概念组成。

非关系型数据库:

MongoDB数据库(database)、集合(collection)、文档对象(document)三个层次概念组成。

MongoDB里的集合对应于关系数控里的表,但是集合中没有列、行和关系的概念,集合中只有文档,一个文档就相当于一条记录,这体现了模式自由的特点。

2、数据存储结构

MySQL的数据存储结构:

  MySQL的每个数据库存放在一个与数据库同名的文件夹中,MySQL如果使用MyISAM存储引擎,数据库文件类型就包括.frm、.MYD、.MYI。

MongoDB的数据存储结构:

  MongoDB的默认数据目录是/data/db,它负责存储所有的MongoDB的数据文件。在MongoDB内部,每个数据库都包含一个.ns文件和一些数据文件,而且这些数据文件会随着数据量的增加而变得越来越多。所以如果系统中有一个叫做mydb的数据库,那么mydb这个数据库的文件就会由mydb.ns,mydb.0,mydb.1等等组成。

3、MongoDB 数据类型

MongoDB的文档使用BSON(Binary JSON)来组织数据,BSON类似于JSON,JSON只是一种简单的表示数据的方式,只包含了6中数据类型(null、布尔、数字、字符串、数组及对象),不能完全满足复杂业务的需要,因此,BSON还提供日期、32位数字、64位数字等类型。以下对mongoDB的数据类型进行简要说明:

1)、null

nul类型用于表示空值或不存在的字段

如:{one : null}

2)、布尔类型

布尔类型有2种值,'true','false'

如:{one : true}

3)、32位整数

mongoDB的控制台使用JS引擎进行输入,而JS仅支持64位浮点数,所以32位整数将会被自动转义。

4)、64位整数

64位整数与32位整数一样,在MongoDB控制台使用时,会转义成64位浮点数。

5)、64位浮点数

MongoDB控制台数字的默认类型。

如:{one:2.02} {one:10}

6)、字符串

UTF-8字符串都可以表示为字符串类型的数据。

如:{one:"Hello World"}

7)、符号

在MongoDB控制台中不支持这种类型,将自动转义成字符串

8)、ObjectID类型

对象id是文档中唯一的12位的ID

0|1|2|3|4|5|6|7|8|9|10|11

时间戳       |机器     |PID   |计数器

如:ObjectId("5762dbf9fd0d60494e664539")

9)、日期

注意:使用的时候要加上new

如:{one : new Date()}

10)、正则表达式

文档键值可以包含正则表达式,其正则表达式采用JS语法来表示。

如:{one : /ho/i}

11)、代码

文档中可以包含JS代码

如:{one : function(){/*.................*/}}

12)、数组

文档中键值可以表示为数组,在数组内还可以嵌套数组:

如:{x:['a','b',['c','d']]}

13)、内嵌文档

文档可以包含别的文档,也可以作为值嵌入到父文档中。

如:{x:{'name':'Tom','age':20}}

 

posted on 2016-06-21 16:23  gimin  阅读(210)  评论(0)    收藏  举报