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}}
浙公网安备 33010602011771号