课程目的
- 熟悉MongoDB数据库各种概念
- 学会MongoDB的搭建
- 熟悉MongoDB的使用
- 简单运维
课程面向对象
- 热爱学习的小白
- 使用过一段时间MongoDB的工作人员
MongoDB的概念
- MongoDB
- mongo
- 索引
- 集合
- 复制集
- 分片
- 数据均衡
学会MongoDB的搭建
部署数据库服务
- 搭建简单的单机服务
- 搭建具有冗余容错功能的复制集
- 搭建大规模数据集群
- 完成集群的自动部署
熟悉MongoDB的使用
最基本的文档读写更新删除
各种不同类型的索引的创建与使用
复杂的聚合查询
对数据集合进行分片,在不同分片间维持数据均衡
数据备份与恢复
数据迁移
简单运维
部署MongoDB集群
处理多种常见的故障
|——单节点失效,如何恢复工作
|——数据库意外被杀死如何进行数据恢复
|——数据库发生拒绝服务时如何排查原因
|——数据库磁盘快满时如何处理
课程面向对象
- 热爱学习的小白
- 使用过一段时间MongoDB的工作人员
初级 背景知识,基本操作
中级 常见的部署操作,简单运维
高级 介绍集群及大型集群的运维经验及mangoDB的实现原理、常见问题及解决办法
如何运维一个几十T甚至上百T的数据库
如何维持几十个甚至上百个节点的数据库均衡
几个重要的网站
- MongoDB官网 www.mongodb.org
安装包下载
使用文档 - 国内官网:www.mongoing.com
- 中文MongoDB文档地址
docs.mongoing.com - github https://github.com/mongodb
源码下载 - MongoDB的jira https://jira.mongodb.org
- 两个Google groups : mongodb-user和mongo-cn
关于数据库
数据库概念:
- 有组织地存放数据
- 按照不同的需求进行查询
数据库的分类
- sql数据库:支持sql语言的数据库
Oracle,MySQL... - Nosql 数据库:不支持sql语言的数据库
Redis,MongoDB
Not only sql
sql数据库 | NoSql数据库 |
---|---|
实时一致性 | 简单便捷 |
事务 | 方便扩展 |
多表联合查询 | 更好的性能 |
为什么选择MongoDB
无数据结构限制
1. 没有表结构的概念,每条记录可以有完全不同的结构
2. 业务开发方便快捷
3. sql数据库需要事先定义表结构再使用
完全的索引支持
1. redis 的key-value
2. hbase 的单索引,二级索引需要自己实现
单键索引,多键索引:{x:1,y:1}
数据索引:["apple","lemon"]
全文索引: "i am a little bird."(中文)
地理位置索引:2D
方便的冗余与扩展
1. 复制集保证数据安全
2. 分片扩展数据规模
良好的支持
1. 完善的文档
2. 齐全的驱动支持
MongoDB运行环境简介
课程相关工具
MongoDB环境 : 64位Linux
MongoDB版本: 2.6.5
ssh工具:xshell
文本编辑器:vim 与 notepad++
编译MongoDB文件
搭建简单的MongoDB服务器
创建 mongodb_simple 文件夹,进入:
创建data 文件夹,保存数据
创建 log 文件夹,保存log
创建 conf 文件夹,存储配置文件
创建 bin 文件夹,存储数据库的二进制文件
将编译好的mongod程序复制到bin目录下。
进入conf文件夹
新建文件mongod.conf并编辑
port = 12345
dbpath = data
logpath = log/mongod.log
fork = true//启动后台进程,Windows中无效
启动mongod:
./bin/mongod -f conf/mongod.conf
MongoDB的基本操作之数据写入和查询
连接数据库
mongo 127.0.0.1:12345
查看数据库
show dbs
切换数据库(如果没有则创建):
user dbname
进入数据库后,删除数据库:
db.dropDatabase()
在MongoDB中,数据表称为集合
往集合中插入数据:
db.集合名.insert(JSONObject)
在MongoDB中使用find进行查询:
db.集合名.find()
skip(Number) 跳过number条记录
limit(Number) 限制显示number条数据
sort({key:1}) 以key排序
> db.test1.find().limit(3).sort({x:-1})
{ "_id" : ObjectId("5b65634af8dc39f7b75514af"), "x" : 5 }
{ "_id" : ObjectId("5b656347f8dc39f7b75514ae"), "x" : 4 }
{ "_id" : ObjectId("5b65633ff8dc39f7b75514ad"), "x" : 3 }
> db.test1.find().limit(3).sort({x:1})
{ "_id" : ObjectId("5b655f5cf8dc39f7b75514ab"), "x" : 1 }
{ "_id" : ObjectId("5b65631cf8dc39f7b75514ac"), "x" : 2 }
{ "_id" : ObjectId("5b65633ff8dc39f7b75514ad"), "x" : 3 }
MongoDB的基本操作之数据更新
数据的更新:
update(condition,newData)
> db.test1.update({x:1},{x:99})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test1.find()
{ "_id" : ObjectId("5b655f5cf8dc39f7b75514ab"), "x" : 99 }
{ "_id" : ObjectId("5b65631cf8dc39f7b75514ac"), "x" : 2 }
{ "_id" : ObjectId("5b65633ff8dc39f7b75514ad"), "x" : 3 }
{ "_id" : ObjectId("5b656347f8dc39f7b75514ae"), "x" : 4 }
{ "_id" : ObjectId("5b65634af8dc39f7b75514af"), "x" : 5 }
更新部分数据,使用$set操作符:
> db.test1.insert({x:1,y:2})
WriteResult({ "nInserted" : 1 })
> db.test1.update({x:1},{$set:{y:66}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test1.find({x:1})
{ "_id" : ObjectId("5b6565e9f8dc39f7b75514b0"), "x" : 1, "y" : 66 }
update的第三个参数ifInsert ,true/false
指定在更新一条不存在的数据时是否自动插入数据,默认为false
MongoDB的基本操作之更新多条数据
在MongoDB中update默认只会更新第一条找到的数据
update的第四个参数,multipleupdate,是否更新多条数据:默认为false
在使用multipleupdate的时候,更新的数据只能用$set操作
MongoDB的基本操作之数据删除
remove() 接受一个参数,不允许不传递参数
删除操作默认删除所有查找到的数据
删除集合(表):
db.表名.drop()
MongoDB的基本操作之创建索引
查看集合的索引情况:
db.集合名.getIndexes()
如果在集合的数据非常多时,不建立相应字段的索引,查询,会不返回结果
创建索引:
db.集合名.ensureIndex({key:1/-1})
key为需要创建索引的字段,
value代表方向,1代表正向排序,-1位逆向排序
当负载较重时,不能直接使用这个命令,需要在使用数据库之前就建立好索引。
本章总结
- 对数据库与MongoDB简要了解
- 熟悉课程环境
- 编译完成MongoDB所需的程序
- 搭建了简单的MongoDB服务器并进行了简单的使用
- 了解了索引的基本使用