MongoDB常用命令及例子详细介绍(三)(四)
通集合 和 固定集合 的区别*****
普通集合:普通集合的空间是随着你的json对象的值增多而自动增大
固定集合:在32位机上一个append collection的最大值约483.5M,64位上只受系统大小的限制。
二:capped collection(固定集合)
小命令记住鸟:
show dbs; --显示所有数据库
db --显示当前数据库
show tables; -- 显示当前库下的所有集合(也就是显示所有表)
db.c5.drop(); --删除c5集合
db.dropDatabase();
注意哈:mongodb当你插入和进入的时候会默认的给你创建数据库和集合(表)
db.createCollection("c1"); --手动创建c1集合(表)
db.c1.find();
db.c1.drop();
简单介绍:
capped collections是性能出色的有着固定大小的集合,以LRU(least recently used最近最少使用)
规则和插入顺序进行age-out(老化移出)处理,自动维护集合中对象的插入顺序,在创建时要预先执行大小
。如果空间用完,新添加的对象将会取代集合中最旧的对象。
永远保持最新的数据
功能特点:
可以插入及更新,但更新不能超出collection的大小,否则更新失败。
不允许删除,但是可以调用drop()删除集合中的所有行,但是drop后需要显示地重建集合。
在32位机上一个append collection的最大值约483.5M,64位上只受系统大小的限制(就是系统对文件大小的限制)。
属性及方法: 优点
属性1:对固定集合进行插入速度极快
属性2:按照插入顺序的查询输出速度极快
属性3:能够在插入最新数据时,淘汰最早的数据
用法1:存储日志信息
用法2:缓存一些少量的文档
创建固定集合:
createCollection命令来创建
--size是大小设置的是10M,如果你的文件超了10M之前的文件就会被自动删除(删除的规则是老的数据会被删除一次类推)
db.createCollection("my_collection",{cappend:true,size:10000000,max:5});
创建一个集合为:‘my_collection’的固定集合,大小为10000000字节。还可以限定文档个数。加上max:100属性。
注意:指定文档上限,必须指定大小。文档限制是在容量没满是进行淘汰,要是满了,就根据容量限制来进行淘汰。
当你创建集合后会自动给你创建对应的indexSize{"_id_":xxxx}索引id,能后
db.system.indexs.find(); --这个里面就会自动为你刚才建立的集合形成主键索引 创建对应的ID在这里
db.c1.stats(); --查看集合C1的状态值,大小啊什么的,索引id什么的
注意有个属性:capped为1 说明是固定集合
普通集合转固定集合:
runCommand命令
db.runCommand({converToCapped:"c2",size:10000000,max:3});
三:GridFS (大文件上传和下载,专门用来存储图片和视频)
介绍:GridFS是一种在mongodb中存储大二进制文件的机制,使用GridFS的原因以下几种:
->存储巨大的文件,比如视频、高清图片
->利用GridFS可以简化需求
->GridFS会直接利用已经建立的复制或分片机制,故障恢复和扩展都很容易
->GridFS可以避免用户上传内容的文件导致系统出现问题
->GridFS不产生磁盘碎片
GridFS使用两个表来存储数据:
files 包含元数据对象
chunks 包含其他一些相关信息的二进制块
* 为了使多个GridFS命名为一个单一的
数据库,文件和块都有一个前缀,默认情况下,前缀是fs,
所以任何默认的GridFS存储将包含fs.files和fs.chunks。
各种第三房语言可以更改其前缀。
使用GridFS mongofiles(存文件的地方)
mongofiles 是从命理行操作GridFS的一种工具
三个命令:put(存储) get(获取,下载) list(列表)
例子:
./mongofiles -h --查看支持的基本参数
./mongofiles list --查看mongofiles 的所有文件
现在模拟一个文件丢到里面去
tar czf mongosniff.tar.gz mongosniff --把mongosniff文件压缩成包
./mongofiles put mongosniff.tar.gz --把包文件上传上去
能后你在进入mongo
./mongo
show tables; --你会发现多了2个集合 fs.files 、fs.chunks
db.fs.files.find(); --查看
--出现对应的字段说明:
filename:存储的文件名
chunkSize: chunks分块的大小
uplodaDate:入库时间
md5:此文件的md5码
length:文件大小,单位”字节“
fs.files中存储的是一些基础的元数据信息,真正的内容在fs.chunks里面
db.fs.chunks.find(); --真正的文件是在这里面的哦
exit;
./mongofiles list --就可以查看到我们穿上来的文件包
./mongofiles get mongosniff.tar.gz --下载这个文件,下载到你当前执行命令的目录下
./mongofiles delete mongosniff.tar.gz --删除该文件
*注意:当你删除mongofiles下的文件时候,fs.files 、fs.chunks表下也就没东西
四:性能
一:索引管理
mongodb提供了多样性的索引支持,索引信息被保存在system.indexs中,mongodb中的_id字段在
创建的时候,默认已经建立了索引,这个索引比较特殊,并且不可删除,不过capped collection列外。
1:建立索引
一:普通索引
for(i=1;i<=10;i++){
db.c1.insert({name:"user"+i,age:i});
}
db.c1.find({name:"user5"}).explain(); --explain和MySQL一样解析一条语句,没索引就全表扫描这个可以看出来
1是升序(默认) -1是降序
db.c1.ensureIndex({name:1});
db.c1.ensureIndex({name:1},{background:true}); --如果数据较大耗时,放到后台执行,加上第二个参数即可,表示放到后台执行
db.c1.getIndexKeys(); --查看所有字段 简单信息
db.c1.getIndexes() --查看表索引 详细信息
db.c1.find({name:"user5"}).explain(); --建立完索引后,你会发现只会扫描一行,不会全表扫描
二:唯一索引
db.c1.ensureIndex({age:1},unique:1); --age字段建立唯一索引
db.c1.insert({name:"user11",age:10}); --你会发现插不进去,以为age是唯一索引
2:查看索引
db.c1.getIndexKeys(); --查看所有字段 简单信息
db.c1.getIndexes() --查看表索引 详细信息
3:删除索引
db.c1.dropIndexes(); --删除所有索引 _id删不掉哦
db.c1.dropIndex({name:1}); --指定删除name索引
二:性能优化
explain执行计划(看影响行数)
mongodb提供了一个explain命令让我们获知系统如何处理查询请求,利用explain命令
我们可以很好的观察系统如何使用索引来加快检索,同时可以针对性