MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
一、基础
1、数据存储阶段
文件管理阶段(.txt .doc .xls)
优点:使用简单方便
数据能够长期保存
可以存储大量数据
缺点:数据一致性差
数据的查找修改不方便
数据冗余
数据库管理阶段
优点:数据组织结构化,降低了冗余度
提高了增删改查的效率
容易扩展
方便程序调用,做自动化的处理
缺点:需要使用sql或者其他特定的语句,相对比较复杂
2、数据库相关概念
数据:能够输入到计算机中并被识别处理的信息集合。
数据结构:研究一个数据集合中数据之间关系的。
数据库:按照数据结构,存储管理数据的仓库。数据库是在数据库管理系统管理和控制下,在一定介质上的数据集合。
数据库管理系统:管理数据库的软件,用于建立和维护数据库。
数据库系统:由数据库和数据库管理系统,开发工具等组成的集合。
3、数据库类型
a、关系型数据库
采用关系模型来组织数据结构的数据库(二维表)
典型代表:Oracle DB2 SQLServer MySql SqLite(Python标准库支持)
优点:容易理解,类似我们常见的表格
使用方便,都是使用sql语句,SQL语句非常成熟
数据一致性高,冗余度低,完整性好
技术成熟,可以使用外部链接等比较复杂的操作
缺点:每次都需要sql语句的解析,消耗大
不能很好的满足高并发需求,针对含量数据的瞬间爆发读写性能不足
关系型数据库内部每一步操作都需要加锁,以保证操作的原子性,增加了数据库负担
数据扩展普遍比非关系型困难
数据一致性高,有时会浪费大量空间
b、非关系型数据库(NoSql --> Not only Sql)
优点:高并发,大数据读写能力强
支持分布式,容易扩展
弱化了数据结构,降低了数据的一致性
缺点:通用性差,没有sql语句一样的一致化操作
操作过于冗长,容易混乱
没有join,很多也不支持事务等操作
Nosql的使用情况:
* 对数据一致性要求低
* 数据库需要处理海量并发
* 数据库设计时对大小的估算不确定,需要分布拓展
* 给定的数据比较容易建立起Nosql的模型
Nosql分类:
键值型数据库:Redis、oracle、BDB、Tokyo
列存储数据库:HBase
文档型数据库:MongoDB、CouchDB
图形数据库
二、MongoDB基础
MongoDB(非关系型数据库 --》文档型数据库)
1. 由c++编写的数据库管理系统
2. 支持非常丰富的增删改查数据操作
3. 支持非常丰富的数据类型
4. 使用方便,便于部署,支持分布,容易拓展
5. 支持众多的编程语言接口 (python ruby c++ c# PHP)
1、MongoDB 安装
a、自动安装
sudo apt-get install mongodb
说明:
默认安装位置 /var/lib/mongodb
配置文件 /etc/mongodb.conf
命令集 /usr/bin /usr/local/bin
b、手动安装
1.下载MongoDB(开源)
www.mongodb.com ---》 Download ---》 community server
选择合适版本下载
2. 选择安装目录解压(/usr/local /opt)
tar解压后得到mongo文件夹
3. 将文件夹下的命令集目录(bin目录)添加到环境变量
PATH=$PATH:/opt/mongo....../bin
export PATH
将以上两句写在 /etc/rc.local
4. 重启系统
c、补充说明
将mongodb设置为开机启动
1. 新建文件夹db作为数据库数据存储了路径
cd /data
mkdir db
2. 设置mongod为开机启动
sudo vim /etc/rc.local
添加如下一行到文件/etc.rc.local 的"exit 0"行之前:
sudo /opt/mongodb-linux-x86_64-ubuntu1604-3.4.10/bin/mongod --dbpath /data/db
3. 重启
reboot
2、mongodb命令
设置数据库存储位置
mongod --dbpath 目录
设置端口号
mongod --port 8888
*如果不设置则使用默认端口号 27017
mongo
进入mongo shell界面,mongodb的交互界面用来操作数据库
退出mongo shell : quit()
3、mongodb组成结构
键值对 ---》 文档 ----》集合 ----》 数据库
4、mysql与mongodb
ID | name | age |
1 | Lily | 17 |
2 | Lucy | 18 |
mongodb数据存储格式:
{
"_id":ObjectId("abcd1234afhkasyr"),
"name":"Lily",
"age":17
},
{
"_id":ObjectId("abcd1234afasfsyr"),
"name":"Lucy",
"age":18
}
mysql | mongo | 含义 |
database | database | 数据库 |
table | collection | 表 / 集合 |
column | field | 字段 / 域 |
row | document | 记录 / 文档 |
index | index | 索引 |
三、数据库的维护
1、数据库的备份和恢复
备份
mongodump -h dbhost -d dbname -o dbdir
e.g. mongodump -h 127.0.0.1 -d stu -o student
将本机下stu 数据库备份到当前目录的student文件夹中
会在student文件夹中自动生成一个stu文件夹则为备份文件
恢复
mongorestore -h <dbhost>:<port> -d dbname <path>
e.g. mongorestore -h 127.0.0.1:27017 -d test student/stu
将student文件夹下的备份文件stu恢复到本机的test数据库
2、数据库的监测
命令:mongostat
insert query update delete :每秒增查改删的次数
getmore command 每秒运行命令次数
dirty used flushes 每秒操作磁盘的次数
vsize res 使用虚拟内存和物理内存
3、监测每个数据库的读写时长
命令:mongotop
ns total read write
数据集合 总时长 读时长 写时长