第九章Mongodb数据库
9.1mongodb入门
9.1.1 NoSQL入门
NoSQL是not only SQL的缩写,它指的非关系型数据库,是以key-value形式存储,和传统数据不一样,比如不遵循sql标准。随着大数据时代的到来,NoSQL有助于解决传统数据库扩展困难,读写慢,成本高,有限的支撑容量问题.因为它在扩展和性能方面做了提升,对于事务性的要求还不能代替传统数据库。目前新浪微博的redis数据库,视觉中国的mongodb都属于NoSQL数据库范畴。
9.1.2认识mongodb
Mongodb是一个介于关系数据库和非关系数据之间的产品,它语法类似javascript语言。数据是键与值的一种组合,格式如{“age”:25}形式,数据以集合存储。目前已超过百家网站使用mongodb。
9.1.3 mongodb的安装
首先到mongodb.org上下载相应版本。
Tar zxvf mongodb-linux-x86-2.2.2.tgz //解压
Cd mongodb-linux-x86-2.2.2 //解压完毕后即成为可执行程序
9.1.4 启动mongodb
Mkdir /usr/local/mongodb
Mkdir /usr/local/mongodb/data
Rsync -auvz /root/mongo-linux-ix86-2.2.0/bin/ /usr/local/mongodb/
Touch /usr/local/mongodb/dblogs
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb –logpath=/usr/local/mongodb/dblogs –fork //启动mongodb
Echo “/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb –logpath=/usr/local/mongodb/dblogs --fork” >>/etc/rc.local //开机启动
一般使用pkill mongod //终止进程,避免使用kill -9杀死进程,因为容易造成mongodb死锁。
/usr/local/mongodb/bin/mongo 进入字符界面
9.1.5mongodb体系结构
Mongodb数据库不同于传统的关系数据结构,它包括文档,集合和数据三级结构组成。物理结构为一个ns文件一些数据库.0和数据库.1组成。Mongodb数据类型,包括null、布尔、数字、字符串、数组以及对象六种数据类型组成。
9.1.6 mongodb基本命令
>Show dbs //显示所有数据库
>db.dropDatabase(); //删除当前数据库
>use mydb //建立新的数据库
>db.user.insert({name:”user1”,age:25}); //插入数据
>db.user.find(); //查看数据
>db.user.drop({name:”user1”}); //删除记录
>db.user.update({_id:1},{name:”user2”}); //修改记录
9.2 mongodb的高级操作
9.2.1 insert的操作
>db.user.save({name:”user2”}); //保存数据
save和insert一般有同样的插入效果。 但是当主键id相同时,save便会只做修改不做插入的操作。
Db.cl.remove();删除所有记录,如果加上记录字段则删除相应字段。
批量插入数据
Js方式插入数据
9.2.2 find查询的操作
Db.c1.find();查询语句
Find命令也可以指查找指定字段,字段值为1为真显示,为0为假。
条件查询,gt大于,lt小于,e等于,ne不等于,gte大于等于,lte小于等于,用$定义。
Sort用于排序排列,用sort排列,-1位倒叙,1位正序排列
Limit用来控制显示输出个数,skip用来排除前面多少个
in用来进行范围查找
$or或的查询,$nor非,or与in区别是:or可以接不同字段,in需要接同一个字段。
插入数组,用elemMatch查找数组,代替post.title
查询控制两种方法
查询数组记录,必须在第二个字段进行
9.2.3 update更新的操作
Db.collection.update(criteria,objNew,upsert,multi);
Criteria:用于设置查询条件的对象
Objnew:用于设置更新内容
Upsert:如果记录村子啊就更新它,否则新增一记录
Multi:如果多个符合条件的记录,只会更新第一个符合条件的记录
Upsert第三个参数,意思是如果字段不存在则增加该字段
$set可以用于改变源字段值或增加新字段
$inc字段每个年龄增加一岁,inc对字段曾进行增减值的更改
$unset删除字段,当age为真时删除字段
$push增加数组字段
$pop删除上条记录,如为-1则从前数,$pushAll一次插入多条记录
addToSet只能插入不同值记录
$addToSet和$each一起用一次加入多个值
$pull删除数组指定值,$pullAll删除多个指定值
$rename更改字段名
9.2.4 创建capped collection固定集合
固定集合是固定大小的数据存储方式,它速度处理更快
Db.createCollection(c6,{capped:true,size:10000,max:5}); //数据大小10kB,记录5条,填满了则取代前面的记录
Db.runCommand({convertTocapped:”test”,size:10000});
9.2.5 GridFS大存储类型
GridFS是一种大二进制文件,可以存储一些大文件。包含.files元数据对象和.chunks二进制块信息。
加载GridFS数据类型:
Cd /usr/local/mongodb/bin
Tar zcvf mongofiles.tar.gz mongosniff
./mongofiles put mongofiles.tar.gz
Mongofile是进行文件上传下载的工具,put上传,get下载
9.3 mongodb性能管理
性能优化,如同大多数数据库一样索引可以很好地完成优化工作。可以通过explain()查看数据查询记录的次数。
9.3.1 mongodb的索引管理
>db.c1.ensureIndex({name:1}); //建立索引
>db.c1.getIndexes(); //查看索引
再执行explain()便可以看到次数变为8->1
Db.c1.dropIndexes(); //删除索引
9.3.2 profile慢查询
profile是一种慢查询日志功能。可以通过两种方式开启:
1、 启动mongodb是可以加上—profile=级别
2、 使用db.setProfilingLevel(级别,时间); 定义级别
0-:不开启;1-:记录慢查询;2-:记录所有密令
最后通过>db.getProfilingLevel();查看级别
9.3.3 mongodb优化方案
首先建立索引可以提高执行效率
其次使用limit();可以减少资源的消耗量
再次capped collection固定空间功能可以提高效率
再次,查询时指定字段而不是所有字段,提高速度
最后使用慢查询功能,优化语句。
9.3.4 mongodb性能监控
mongosniff命令可以监控数据库操作历史
Mongostat命令可以查看mongodb实时结果
本文转自zsaisai 51CTO博客,原文链接:http://blog.51cto.com/3402313/989251