MongoDB常用命令及例子详细介绍(三)(四)

2015-01-21 11:32:22 · 作者: · 浏览: 22
通集合 和 固定集合 的区别***** 普通集合:普通集合的空间是随着你的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命令 我们可以很好的观察系统如何使用索引来加快检索,同时可以针对性