mongoDB入门
基础信息
相关网站
www.mongodb.org
www.mongoing.com
docs.mongoing.com/manual-zh/
www.github.com/mongodb
jira.mongodb.org
mangoDb的概念
MangoDB
特点
无数据结构限制
完全的索引支持
方便的冗余与扩展
复制集保证数据安全
分片扩展数据规模
完善的文档支持和驱动支持
相关工具:
环境:64位linux
版本:
ssh工具:xshell
文本编辑器:vim与notepad++
编译mongodb文件
解压后执行scons all -j 12
mongo
索引
集合
复制集
分片
数据均衡
MongoDB数据库搭建
部署数据库
搭建简单的单机服务
搭建具有冗余容错功能的复制集
搭建大规模数据集群
完成集群的自动部署
mongoDB的使用
最基本的文档的读写更新删除
不同类型索引的创建与使用
复杂的聚合查询
对数据集合进行分片,在不同分片间维持数据均衡
数据备份与恢复
数据迁移
简单运维
部署MongoDB集群
处理多种常见的故障
单节点失效,如何恢复工作
数据库意外被杀死如何进行数据恢复
数据库发生拒绝服务时如何排查原因
数据库磁盘快满时如何处理
安装与配置
mkdir mongodb_simple
cd mongodb_simple
mkdir data
mkdir log
mkdir conf
mkdir bin
配置文件
port=12345
dbpath=data
logpath=log/mongod.log
fork=true
启动:./bin/mongod -f conf/mongod.conf
连接数据库
./bin/mango 127.0.0.1:1234
关闭数据库
db.shutdownServer()
查看日志
tail -f log/mongod.log
数据库操作
连接数据库
.bin/mango 127.0.0.1:12345
显示数据库
show dbs
使用数据库,没有则自动创建
use imooc
删除数据库
db.dropDatabase()
插入数据
db.imooc_collection.insert({x:1})
for(i=3;i<100,i++)db.imooc_collection.insert({x:i})
显示表
show collection
查询
db.imooc_collection.find()
db.imooc_collection.find({x:1})
db.imooc_collection.find().count()
db.imooc_collection.find().skip(3).limit(2)sort({x:1})
更新
db.imooc_collectio.update({x:1},{x:999})
db.imooc_collectio.update({z:100},{$set:{y:999}}) $set部分更新符
db.imooc_collectio.update({z:100},{z:999},true) 改数据不存在则新增
db.imooc_collectio.update({z:100},{$set{z:999}},false,true) 默认更新一条,这样之后更新多条
删除remove
db.imooc_collectio.remove({x:1})
索引
查看索引
db.imooc_collectio.getIndexes()
创建索引
db.imooc_collectio.ensureIndex({x:1})
常见索引
索引的种类
_id索引
自动生成唯一_id索引
单键索引
不会自动创建
{x:1,y:2,z:3}
多键索引
与单键索引创建形式相同,区别在于字段的值
单键索引:值为一个单一的值,如字符串,数字或日期
多键索引:具有多个值,例如数组
复合索引
db.imooc_collectio.ensureIndex({x:1},{y:1})
过期索引
说明:
在一段时间后会过期的索引
索引过期后相应数据会删除
登录信息、存储的日志等
创建
db.imooc_collectio.ensureIndex({x:1},{expreAfterSeconds:10})
限制
存储在过期索引字段的值必须为制定的时间类型
如果制定了ISODate数组,则按照最小的时间进行删除
过期索引不能是符合索引
删除时间不精确
全文索引
说明:
对字符串与字符串数组创建全文可搜索索引
使用情况:
{author:"",title:""}
创建方法
db.imooc_collectio.ensureIndex({k:"text"})
db.imooc_collectio.ensureIndex({k_1:"text",k_2:"text"})
db.imooc_collectio.ensureIndex({"$**":"text"})
查询:
db.imooc_collectio.find({$test:{$serch:'aa'}})
db.imooc_collectio.find({$test:{$serch:'aa bb cc'}})空格代表或
db.imooc_collectio.find({$test:{$serch:'aa bb -cc'}})-代表不包含cc
db.imooc_collectio.find({$test:{$serch:"\"aa\",\"bb\""}})\代表或
相似度
{score:{$meta:"textScore"}}
写在查询条件后面可以返回结果的相似度
与sort一起使用,可达到很好的使用效果
使用限制
每次查询,只能指定一个$text查询
$text查询不能出现在$nor查询中
查询中包含$text,hint不再起作用
不支持中文
索引属性
名字 name
db.imooc_collectio.ensureIndex({},{name:"text"})
唯一性 unique
db.imooc_collectio.ensureIndex({},{unique:true/false})
稀疏性 sparse
db.imooc_collectio.ensureIndex({},{sparse:true/false})
db.imooc_collectio.ensureIndex({m,{$exists:true}})
是否定时删除:expreAfterSeconds
地理位置索引
概念:将一些点的位置存储在mongodb中,创建索引后,可以按照位置来查找其他点
子分类:
2D索引,用于存储和查找平面上的点
2dsphere索引,用于存储和查找球面上的点
查找方式
查找距离某个点一定距离内的点
查找包含在某区域内的点
2d索引:
创建:
db.imooc_collectio.ensureIndex({w:"2d"})
位置表示方式:经纬度
取值范围:精度[-180,180],维度[-90,90]
2dsphere索引
创建:
db.imooc_collectio.ensureIndex({w:"2dsphere"})
位置表示方式:
GeoJson:描述一个点,一条直线,多边形等
格式:
{type:"",coorddinates:[<coorddinates>]}
查询方式
$near:查询距离某个点最近的点,用$maxDistanse表示最远距离(2d索引不支持)
$geoWithin:查询某个形状内的点
geoNear查询:
使用runCommand命令进行使用
形状的表示
矩形{$box:[[<x1>,<y1>],[<x2>,<y2>]}
圆形{$center:[[<x1>,<y1>],r]}
多边形{$polygon:[[<x1>,<y1>],[<x2>,<y2>],[<x2>,<y2>]}
索引构建情况分析
优点
加快索引相关查询
缺点
增加磁盘空间消耗,降低写入性能
评判当前索引构建情况
mongostat工具
查看运行状态的程序
使用说明:
mongostat -h 127.0.0.1:12345
profile工具
db.getProfilingStatus()
db.getProfilingLevel()
db.setProfilingLevel()
...
db.system.profile.find().sort({$natural:-1}).limit(1)
日志
配置verbose=vvvvv
explain分析
db.find({x:1}).explain()
mongoDB安全
安全概览
最安全的是物理隔离:不现实
网络隔离
防护墙隔离
用户名密码
auth=true开启权限
创建用户|角色 User|Role
createUser createRole
用户角色详解
数据库角色 read,readWrite,dbAdmin.dbOwner,userAdmin
集群角色 clusterAdmin,clusterManager
备份角色 backup,restore
特殊权限 DBAdminAnyDatabase