MongoDB (芒果)
一. 基础概念
- 数据: 能够输入到计算机中并被识别处理的信息集合
- 数据结构: 研究一个数据集合中,数据之间关系的学科
- 数据库: 按照数据结构,存储管理数据的仓库。数据仓库是在数据库管理系统管理控制下在一定介质中构建的。
- 数据管理系统 :数据库管理软件,用于维护建立数据库
- 数据库系统:是数据库和数据库管理系统等开发工具的集合
二. 关系型数据库 OR 非关系型数据库
- 关系型数据库 :采用关系模型(二维表)来组织数据结构的数据库
【1】常见关系型数据库:Oracle DB2 SQLServer MySql SQLite
【2】优缺点
优点: * 逻辑清晰,容易理解,结构类似常见的表格
* 使用sql语句操作,技术成熟,使用方便
* 数据一致性高
* 关系型数据库比较成熟,复杂的数据操作较多
缺点: * 每次操作需要专门sql语句解析,降低了速度
* 关系型数据库内部往往进行加锁处理,也影响了处理速度
* 不能很好的处理海量数据并发请求的需要,读写能力差
- 非关系型数据库 (NoSql–》Not only sql)
【1】 常见非关系型数据库
- 键值型数据库: Redis
- 列存储数据库: HBase
- 文档型数据库: Mongodb CouchDB
- 图形数据库: Graph
【2】 优缺点
优点: * 读写速度快,可以更好应对并发请求
* 使用灵活,容易扩展
缺点: * 没有sql那样同一的成熟的语句操作
* 技术成熟度较差,缺少复杂的数据操作
【3】 应用场景
- 对数据的格式要求比较灵活
- 对数据处理速度特别是并发情况下处理速度读要求较高
- 某些特定场景:做缓存等
三. MongoDB数据库
- 特点
【1】 非关系型数据库,是文档型数据库
【2】 开源数据库,使用广泛,更新较快
【3】 由c++编写的数据库管理系统
【4】 支持丰富的存储类型和数据操作
【5】 方便扩展,部署,众多语言提供了操作接口 - MongoDB安装
- Linux : sudo apt-get install mongodb
- Mac OS : brew install mongodb
- Windows :www.mongodb.com 下载软件安装
Linux 安装目录
安装位置:/var/lib/mongodb....
配置文件:/etc/mongodb.conf
命令集:/usr/bin
cookie :
环境变量 : 系统指定的查找路径。当加载一个文件时如果当前目录找不到会自动从环境变量目录查找
四. MongoDB 命令
- mongod 配置mongodb基本信息
【1】 mongod -h 查看帮助信息
【2】 mongod --port 8888 设置端口号
【3】 mongod --dbpath [dir] 设置数据库存储路径 - mongo 进入数据库 mongoshell 界面
【1】 mongo 进入mongoshell界面,即可操作数据库
【2】 quit() crtl-c 退出界面
五. MongoDB 数据库数据结构
- 数据组织结构: 键值对 --> 文档 --> 集合 --> 数据库
e.g.:
ID | NAME | AGE |
1 | Lily | 17 |
2 | Lucy | 18 |
{
"_id":1,
"NAME":"Lily",
"AGE":17
},
{
"_id":2,
"NAME":"Lucy",
"AGE":18
}
- 概念对比
mysql | mongodb | 含义 |
database | database | 数据库 |
table | collection | 表/集合 |
culumn | field | 字段/域 |
row | document | 记录/文档 |
index | index | 索引 |
六. 数据库操作
- 创建数据库: use [database]
e.g. 创建一个stu数据库
use stu
- use实际为选择使用哪个数据库,当这个数据库不存在时会自动创建
- 使用use创建数据库不会立即创建,而是需要插入数据时才真正被创建
- 查看系统中数据库: show dbs
- 数据库命名规则
【1】 使用utf-8字符
【2】 不能含有: 空格 . / \ ‘\0’
【3】 不超过64字节
【4】 不要已有数据库重名 - 全局变量db : 代表当前正在使用的数据库
- 如果不选择任何数据库则 db表示‘test’
- 删除数据库: db.dropDatabase()
- 数据库的备份和恢复
【1】 数据库备份命令
mongodump -h [host] -d [database] -o [path]
e.g. 备份当前主机中stu数据库到bak目录下
mongodump -h localhost -d stu -o ./bak
【2】 数据库恢复
mongorestore -h [host:port] -d [db] [bak_dir]
e.g. 将stu数据库恢复到当前主机中student数据库下
mongorestore -h 127.0.0.1:27017 -d student bak/stu
- 数据库监控
- 查看数据库运行状态: mongostat
insert | query | update | delete | 每秒增查改删的次数 |
command : 每秒mongo命令的执行次数
flushes : 每秒的磁盘刷新频率
vsize res:使用虚拟内容和物理内存情况
time:时间
- 监控数据库中数据读写情况: mongotop
ns | 数据集合 |
total | 每秒读写时长 |
read | 每秒读时长 |
write | 每秒写时长 |
七. 集合操作
- 创建集合
【1】 db.createCollection(collectionName)
e.g. 创建集合class1
db.createCollection(‘class1’)
【2】 插入数据时,如果指定集合不存在会自动创建
e.g. 如果class2不存在则自动创建
db.class2.insert({'name':'宝强','age':32})
【3】 查看数据库中集合: show collections
【4】 集合命名规则:
- 使用utf-8字符
- 不能含有’\0’字符
- 不要以system.开头,这是系统集合默认开头
- 不要和关键字重名
- 删除集合: db.collection.drop()
e.g. 删除class集合
db.class.drop() - 集合的重命名 : db.collection.renameCollection(newname)
e.g. 将集合class重命名为class0
db.class.renameCollection(‘class0’)
八. 文档
- 什么是文档?
- 文档是mongodb数据库中基本的数据组织单元
- 文档由多个键值对构成,每个键值对表达一个数据项
- mongodb中文档数据实际为bson数据格式
- 文档键值对
特点:
- 文档中键值对是无序的
- 文档中的键不能够重复
- 文档通过键取值
- 文档的键为utf-8格式,不能有\0
键 : 表示文档的数据域,即数据的信息含义
值 : 即数据库中存储的数据
数据类型支持 : 见 图 mongo_type
String 字符串
Int 整型
Double 浮点型
Boolean 布尔类型 true false
ObjectId ID对象
- 在插入数据时,如果不自己指定_id域则会自动添加这个域,值为ObjectId数据,用于作为文档主键
e.g.:
“_id”:ObjectId(“5c95abfcc8c4cf7482cfbadd”)
- 集合中的文档设计
【1】一个集合中的文档尽量表达相同的数据内容
【2】集合中文档的层次嵌套不宜特别多,如果层次过多时考虑可否拆分为多个集合
【3】集合中文档相互独立,可以根据实际情况选择不同的域结构
九. 数据基本操作
- 插入文档
【1】 插入单个文档
命令: db.collection.insertOne(doc)
e.g. 向class0中插入一个文档
db.class0.insertOne({‘name’:‘Lucy’,age:18,sex:‘w’})
- 数据操作时,键可以不加引号,默认为utf-8字符串
- 可以自己添加_id域,但是_id域的值不能重复
【2】 插入多个文档
命令:db.collection.insertMany([doc,...])
e.g. 同时插入多条文档
db.class0.insertMany([{name:'Abby',age:18,sex:'w'},{name:'Tom',age:17,sex:'m'}])
【3】 一个综合函数
命令: db.collection.insert()
说明:综合insertOne,insertMany功能。官方不推荐
【4】 save保存文档
命令: db.collection.save()
说明: 使用方法同insert(),但是当_id重复时会覆盖原有文档
补充 :
获取集合对象方法: db.getCollection(collectionName)
作业 :
- 能够回答关系型数据库和非关系型数据库的区别
- 熟练掌握mongo数据库,集合的创建和插入文档
- 将mysql中"银行"数据库结构使用mongodb创建,并插入对应文档。