一、非关系型数据库
1.非关系型数据库也被称为NoSQL(Not0nlySQL),满足:
数据库高并发读写需求
对海量数据高效率存储与访问
数据库的高扩展性与高可用性的需求
2.常用的非关系型数据库:Mongodb、Redis、Memcache、HBase .
二、MongoDB简介
1.MongoDB使用C++编写的开源、跨平台、面向文档的数据库.
2.用它创建的数据库可以实现高性能、高可用性,且能够轻松扩展。
3.MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
4.MongoDB的运行方式主要基于两个概念:集合(collection) 与文档( document)。
5.MongoDB是一款多实例软件(同个主机上同时运行多个相同的程序)
三、MongoDB的适用领域
1.大数据
2.网站数据
3.内容管理和交付
4.移动及社会化基础设施
4.用户数据管理
5.数据中心
四、安装MongoDB(解压就可使用)
1.安装依赖包
yum -y install openssl-devel
2.安装
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.0.tgz
tar zxf mongodb-linux-x86_64-rhel70-4.4.0.tgz
mv mongodb-linux-x86_64-rhel70-4.4.0.tgz /usr/local/mongodb
3.创建MongoDB的数据存储目录和日志存储目录
mkdir -p /usr/local/mongodb/data
mkdir -p /usr/local/mongodb/logs
touch /usr/local/mongodb/logs/mongodb.log
chmod -R 777 /usr/local/mongodb/logs/mongodb.log
4.设置ulimit -n和ulimit -u的值
ulimit -n 25000 #单个进程或线程可打开的文件数
ulimit -u 25000 #这台主机上可打开的最大进程数或线程数
五、MongoDB的运行控制
1.创建MongoDB的配置文件和启动参数
cd /usr/local/mongodb/bin
vim mongodb1.conf
port=27017 #默认服务器的端口号
dbpath=/usr/local/mongodb/data #数据存储目录
logpath=/usr/local/mongodb/logs/mongodb.log #日志文件
logappend=true #使用追加方式写日志
fork=true #后台运行
maxConns=5000 #最大同时连接数,默认2000
storageEngine=mmapv1 #指定存储引擎为内存映射文件
2.启动MongoDB
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/bin/mongodb.conf
-f指定配置文件
2.停止MongoDB
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/bin/mongodb.conf --shutdown
3.编写MongoDB service控制脚本
vim /usr/local/sbin/mongod
#!/bin/bash
#MongoDB启动脚本
BinPath=/usr/local/mongodb/bin/mongod
ConfPath=/usr/local/mongodb/bin/mongodb.conf
case $1 in
start)
netstat -anptu | grep mongod > /dev/null
if [ $? = 0 ]
then
echo 'MongoDB正在运行'
else
$BinPath -f $ConfPath
fi
;;
stop)
netstat -anptu | grep mongod > /dev/null
if [ $? = 0 ]
then
$BinPath -f $ConfPath --shutdown
else
echo 'MongoDB未运行'
fi
;;
restart)
netstat -anptu | grep mongod > /dev/null
if [ $? = 0 ]
then
$BinPath -f $ConfPath --shutdown
$BinPath -f $ConfPath
else
$BinPath -f $ConfPath
fi
;;
esac
echo “exprot PATH=$PATH:/usr/local/sbin”
source /etc/profile
4.连接MongoDB
连接 /usr/local/mongodb/bin/mongo
退出 db.shutdownServer() #退出并关闭程序
六、启动MongoDB多实例
启动MongoDB多实例,将原来的配置文件复制一份,并更改配置文件名和配置文件中的端口号、数据存储目录、日志文件,然后按照之前的操作创建相应文件即可。
七、MongoDB的逻辑存储结构
1.MongoDB的逻辑结构由文档(相当于mysql的数据)、集合(相当于mysql的表)、数据库三部分组成
2.MongoDB的常用术语及说明
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 表/集合 |
row | document | 行/文档 |
column | filed | 字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
3.数据库
1)MongoDB的默认数据库时test,存放在data目录中,MongoDB无法显示空库,单个实例可容纳多个独立数据库,不同的数据库放在不同的文件中
2)admin:root数据库,如果添加一个用户到此数据库,该用户将继承所有数据库的权限,一些特定的服务器端命令也只能在这个数据库中运行,如列出所有数据库或关闭服务器
3)local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
4)config:当MongoDB用于分片设置时,config库在内部使用,用于保存分片的相关信息
2.集合
1)集合没有固定的结构,表示集合中可以插入不同格式和类型的数据
2)当一个文档被插入时,集合就会被创建
3)集合名不能是空字符串,不能含有\0(空字符),这个字符表示集合名的结尾。不能以“system.”开头,这是为系统集合保留的前缀
3.文档
1)文档是一组键值(key-value)对,(即BS0N)。MongoDB的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是MongoDB非常突出的特点。
2)文档中的键值是有序的
3)文档中值可以是双引号里面的字符串,也可以是其他几种数据类型
4)MongoDB区分类型和大小写
5)MongoDB的文档不能有重复的键
6)文档的键是字符串,可以使用utf-8字符
7).和$有特殊意义
8)以下划线“_”开头的键是保留的
八、物理存储结构
1.每个据库都含有一个.ns和一些数据文件,每张表和索引都对应一个命令空间,命名空间的源文件放在.ns文件中,它存储了分配和正在使用的磁盘空间文件大小的2倍!
2.mongodb的数据类型
数据类型 | 描述 |
---|---|
BSON | Binary JSON是二进制的格式,能将MongoDB的所有文档表示为字节字符串 |
JSON | 是一种轻量级的数据交换格式。它基于JavaScript的一个子集! |
String | 字符串,存储数据常用的数据类型。在MongoDB中UTF-8编码的字符串才是合法的 |
Integer | 整型数值。用于存储数值,根据用户的服务器,可分为32位或64位 |
Boolean | 布尔值。用于存储布尔值(真/假) |
Double | 双精度浮点值。用于存储浮点值 |
Arrays | 用于将数组或列表或多个值存储为一个键 |
Object | 用于内嵌文档 |
Null | 用于创建空值 |
Date | 日期时间。用户可以指定自己的日期时间,创建Date对象,传入年月日信息 |
Binary Data | 二进制数据。用于存储二进制数据 |
3.日志存储
1)journal:用于MongoDB崩溃恢复的保障
2)oplog:复制操作日志文件,在启动主从复制时出现
3)慢查询日志:需要在配置文件中指定profile=1(开启慢查询)、slowms=200(毫秒),查看慢查询日志:db.system.profile.find()
九、MongoDB基本操作
1.常用基本操作
操作 | 描述 |
---|---|
show dbs | 查看数据库列表 |
show users | 显示当前用户 |
use 库名 | 切换数据库 |
db.help() | 显示数据库操作命令 |
show collections/show tables | 显示当前数据库中的集合 |
db.集合名.help() | 显示集合操作命令,foo:当前数据库下的集合 |
db.集合名.find() | 看数据 |
2.登录数据库
mongod --host ip及端口 #本地登录ip可写localhost
3.创建数据库
use 库名 #如果库名不存在,则创建数据库,有则切换到该数据库
4.删除数据库
use 库名
db.dropDatabase()
5.插入集合
db.createCollection("集合名",{size: ,max: }) #size:集合大小,kb。max:文档的最大行数
6.删除集合
db.集合名.drop
7.插入文档
db.集合名.insert({"列名":"列名值"})
8.更新文档
db.集合名.update({表达式},{$set:{要修改的内容}})
9.删除文档
db.集合名.remove({表达式},true/false)
#默认false:删除所有符合表达式的文档,true:删除符合表达式的第一条文档
十、MongoDB数据备份与恢复
1.导出
mongoexport -d 库名 -c 集合名 -o 导出后的文件名 --type 格式 --port 端口
--type:格式,json和CSV(纯文本格式)
-q:指明导出数据的过滤条件
2.导入
mongoimport -d 库名 -c 集合名 --file 要导出的文件名
3.备份
mongodump -h 服务器的ip及端口 -d 库名 -o备份存放的位置
4.恢复
mongorestore -h 服务器的ip及端口 -d 库名 --dir=备份的位置
5.复制数据库(先登录数据库)
db.copyDatabase("要复制的库名","复制后的库名","主机地址及端口")
6.克隆集合(先登录数据库)
db.runCommand({"cloneCollection":"库名.集合名","from":"ip:端口"}) #无法克隆本实例的集合
十一、安全管理
1.限定监听特定ip和端口
1)限定ip(针对多个网卡的主机):bind_ip=ip
2)限定端口:port=端口
2.用户授权
1)启动授权
auth=true
2)创建用户
先进入admin库
db.creatrUser({user:"用户名",pwd:"密码",roles:[角色],"库名"})
#不指定库,默认是admin库
#角色:权限,用户角色read、readWrite
管理角色
dbAdmin:授予执行管理任务的特权
userAdmin:允许您在当前数据库上创建和修改用户和角色
dbOwner:此角色结合了以下内容:
readWrite
dbAdmin
userAdmin
3)授权
db.auth("用户名","密码")
4)删除用户
先进入用户对应的数据库
db.dropUser("用户名")
3.进程管理
1)查看正在运行的进程:
db.currentOp()
2)终止高耗资源的进程:
db.killOp(进程号)
十二、MongoDB监控
1.查看数据库的实力信息:
db.serverStatus()
2.查看当前数据库的统计信息:
db.stats()
3 .查看集合统计信息:
db.users.stats()
4.查看集合大小:
db.users.dataSize()