设为首页 收藏本站
查看: 1225|回复: 0

[经验分享] mongodb固定集合(Capped Collection)和大文件管理(GridFS)

[复制链接]

尚未签到

发表于 2015-7-7 05:53:12 | 显示全部楼层 |阅读模式
Capped Collection
固定集合(Capped Collection)是性能出色的有着固定大小的集合,以LRU(Least Recently Used最近最少使用)规则和插入顺序进行age-out(老化移出)处理,自动维护集合中对象的插入顺序,在创建时要预先制定大小,如果空间用完,新添加的对象将会取代集合中最旧的对象,永远保持最新的数据。



查看集合的状态信息
db.cot1.stats(); //查看集合cot1的状态信息

删掉指定集合
db.collection1.drop(); //删除collection1集合

mongoDB中集合创建默认是隐式创建的,可以使用createCollection显示创建集合
db.createCollection("collect");
删掉指定数据库
db.dropDatabase(); //删除当前数据库

查询所有数据库
show dbs //查询所有数据库

显示当前库中所有集合
show tables; 或者 show collections;

固定集合的功能特点
可以插入及更新,但更新不能超出collection的大小,否则更新失败,不允许删除,但是可以调用drop()删除集合中的所有行,但是drop后需要显式地重建集合.在32位机子上一个cappped collection的最大值约为482.5M,64位上只受系统文件大小的限制.

固定集合属性及用法:
属性1:对固定集合进行插入速度极快
属性2:按照插入顺序的查询输出速度极快
属性3:能够在插入最新数据时,淘汰最早的数据

用法1:储存日志信息
用法2:缓存一些少量的文档

创建固定集合
不像普通集合,固定集合需要显示的创建使用createCollection命令
eg. db.createCollection("collect",{capped:true, size:10000});
创建一个集合为collect的固定集合,大小为10000字节,还可以指定文档个数,加上Max:100属性.
注意:指定文档上限,必须指定大小,文档限制是在容量没满时进行淘汰,要是满了,就根据容量限制来进行淘汰.
  



可以再创建capped collection时指定collection中能够存放的最大文档数目,但这是要指定size,因为总是先检查size后检查maxRowNumber.可以使用validate()查看一个collection已经使用了多少空间,从而决定size设为多大.
> db.createCollection("mycappedcoll",{capped:true,size:10000,max:100})
{ "ok" : 1 }
> db.mycappedcoll.validate();
创建collection时还有一个参数”autoIndexID”,值可以为”true”和”false”,决定是否需要在”_id”上创建索引,例如
> db.createCollection("mycappedcoll",{capped:true,size:10000,max:100,autoIndexId:false})
默认情况下对一般的collection是创建索引的,但不会对capped collection创建.capped collection不能被Shard,这也是有道理的,一个经常被刷新且大小固定的表,做Sharding(分片)也没太大意义.
  
转换集合
把普通的集合转换成固定集合需要使用convertTocapped命令



db.runCommand( { convertTocapped:"test",size:10000 } );
把test普遍集合转换为固定集合,大小为10000字节.

自然排序
固定集合文档按照插入顺序储存的,默认情况下查询就是按照插入顺序返回的,也可以使用$natural调整返回顺序.



db.mycappedcolt.find().sort( {"$natural":1} );
参数1表示默认顺序,-1则相反.

判断集合是否为固定集合



db.colt.isCapped();

查看集合状态信息



db.colt.stats();

GridFS
GridFS是一种在MongoDB中存储大二进制文件的机制,使用GridFS原因有以下几种:
储存巨大的文件,比如视频、高清图片等.利用GridFS可以简化需求.
GridFS会直接利用已经建立的复制或分片机制,故障恢复和扩展都很容易.
GridFS可以避免用户上传内容的文件系统出现问题.
GridFS不产生磁盘碎片

GridFS存储数据
GrdiFS使用两个表来存储数据:
files 包含元数据对象
chunks 包含其他一些相关信息的二进制块.
为了使多个GridFS命名为一个单一的数据库,文件和块都有一个前缀,默认情况下,前缀是fs,所以任何默认的GridFS存储将包括命名空间fs.files和fs.chunks。
各种第三方语言可以更改其前缀

使用GridFS mongofiles
mongofiles是从命令行操作GridFS的一种工具
四个命令:put(存储)、get(取得/下载)、list(列表)、delete(删除)



eg. ./mongofiles put testfile.zip
./mongofiles list
./mongofiles get testfile.zip
./mongofiles delete testfile.zip
验证md5
mg5sum testfiles.zip
此时登录mongo,show tables可以看到新增2个文件fs.files和fs.chunks.
查看fs.files中的内容
db.fs.files.find();
fs.files 中存储的是一些基础的元数据信息.
db.fs.chunks.find();
fs.chunks 中存储的是一些实际的内容数据信息.
转载请注明出处:[http://www.iyunv.com/dennisit/archive/2013/01/28/2880657.html]
    

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-83835-1-1.html 上篇帖子: [mongodb]使用mongodb中数组元素的下标来做更新(update)多维数组 下篇帖子: NoSql之MongoDB(系列二)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表