MongoDB--MongoDB基础

一、非关系型数据库

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()

你可能感兴趣的:(MongoDB,mongodb)