Mongodb固定集合和性能优化

db.stats();
show tables;
db.c5.drop();
show dbs;
db.dropDatabase();
db.createCollection("c1");


Capped Collection(固定集合)
简单介绍
capped collections是性能出色的有着固定大小的集合,以LRU(Least Recently Used最近最少使用)
规则和插入顺序进行age-out(老化移出)处理,自动维护集合中对象的插入顺序,在创建时需要预先
指定大小。如果空间用完,新添加的对象将会取代集合中最旧的对象
永远保持最新的数据
功能特点
可以插入及更新,但更新不能超出collection的大小,否则更新失败。不允许删除,但是
可以调用drop删除集合中的所有行,但是drop后需要显式地重建集合。在32位机上一个capped
collection的最大值约为482.5M,64位上只受系统文件大小的限制。


   属性1: 对固定集合进行插入数据极快。
   属性2:按照插入顺序的查询输出速度极快。
   属性3:能够在插入最新数据时,淘汰最早的数据。
   
   用法1:储存日志信息(后面的日志往前递增,前面的日志自动删减,保证日志总量的大小固定)
   用法2:缓存一些少量的文档
   
   
创建固定集合
不像普通集合,固定集合需要显式的创建和使用
db.createCollection("my_collection", {capped:true,size:10000});


创建一个集合为my_collection的固定集合,大小为10000字节。还可以限定文档
个数。加上:Max:100属性。
注意:指定文档上限,必须指定大小。文档限制是在容量没有满时进行淘汰,要是满了,
就根据容量限制来进行淘汰。
 
db.c1.stats();
db.createCollection("c2",{capped:true,size:1000000,max:5});
普通集合转为固定集合
db.runCommand({convertToCapped:"c1",size:100000,max:3});


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


[root@localhost bin]#./mongofiles put mongosniff.tar.gz
> show tables;
> db.fs.files.find();
> db.fs.chunks.find();
[root@localhost bin]# ./mongofiles list
[root@localhost bin]# du -sh mongosniff.tar.gz
[root@localhost bin]# rm -rf mongosniff.tar.gz
[root@localhost bin]# ./mongofiles get mongosniff.tar.gz
[root@localhost bin]# ./mongofiles delete mongosniff.tar.gz




性能优化
索引管理
  MongoDB提供了多样性的索引支持,索引信息被保存在system.indexs中,MongoDB中_id字段
在创建的时候,默认已经建立了索引,这个索引比较特殊,并且不可删除,不过Capped Collections
例外。
    建立索引(普通索引)
db.fs.chunks.drop();
db.fs.files.drop();
db.system.indexs.find();
> for (i=1;i<=10;i++) {
>... db.c1.insert({name:"user"+i,age:i});
>... }
    开始建立索引
db.c1.ensureIndex({name:1});
db.c1.getIndexKeys();
db.c1.getIndexes();
db.c1.find({name:"user5"}).explain();
添加唯一索引
db.c1.ensureIndex({age:1},{unique:1});
db.c1.getIndexes();
db.c1.dropIndex({age:1});
db.c1.dropIndexes();
性能优化
    explain();查看索引使用情况

慢查询
MongoDB Database Profiler是一种慢查询日志功能,可以作为我们优化数据库的依据。
    上面profile的级别可以取0,1,2三个值,它们表示:
0- 不开启
1- 记录慢命令(默认为>100ms)
2- 记录所有命令
    db.getProfilingLevel();
db.setProfilingLevel(1);
    启动时可以修改默认慢查询参数100ms


性能监控
Mongosniff
此工具可从底层监控到底有哪些命令发送给MongoDB去执行。
[root@localhost bin]# ./mongosniff --source net lo
[root@localhost bin]# ./mongostat

你可能感兴趣的:(Mongodb固定集合和性能优化)