固定集合:
属性1.对固定集合进行插入速度极快
属性2:按照插入顺序的查询输出速度极快
属性3:能够在插入最新数据时,淘汰最早的数据
用法1:存储日志信息
用法2:缓存一些少量的文档
创建固定集合
不像普通集合,固定集合需要显式的创建使用createCollection命令来创建
db.createCollection("my_collection", {capped:true, size:10000})
创建一个集合为'my_collection"的固定集合,大小为10000字节,还可以限定文档个数,加上Max:100属性
注意:指定文档上限,必须指定大小。文档限制是在容量没有满时进行淘汰,要是满了,就根据容量限制来进行淘汰。
转换集合
把普通集合转换成固定需要使用convertTocapped命令
db.renCommand({convertTocapped:"test", size:10000})
把test普通集合转换为固定集合,大小为10000字节
自然排序
固定集合文档按照插入顺序存储的,默认情况下查询就是按照插入顺序返回的,也可以使用$natural调整返回顺序
db.my_collection.find().sort({"$natural":1})
判断用db.test.isCapped();
显示状态:db.test.status();
GridFS
GridFS是一种在MongoDB中存储大二进制文件的机制,使用GridFS的原因有以下几种:
1.存储巨大的文件,比如视频、高清图片等
2.利用GridFS可以简化需求
3.GridFS会直接利用已经建立的复制或分片机制,故障恢复和拓展都很容易
4.GridFS可以避免用户上传内容的文件系统出现问题
5.GridFS不产生磁盘碎片
GridFS使用两个表来存储数据
file包含元数据对象
chunks包含其他一些相关信息的二进制块
为了使多个GridFS命名为一个单一的数据库,文件盒块都有一个前缀,默认情况下,前缀是fs,所以任何默认的GridFS存储将包括命名空间fs.files和fs.chunks。
各种第三方语言可以更改其前缀
使用GridFS mongofiles命令
mongofiles是从命令行操作GridFS的一种工具
三个命令:put(存储) get(取得) list(列表)
索引
MongoDB提供了多样性的索引支持,索引信息被保存在system.indexes中,MongoDB中_id字段在创建的时候,默认已经建立了索引,这个索引比较特殊,并且不可删除,不过Capped Collections例外
建立索引
1.建立普通索引
建立普通索引函数:ensureIndex()
在name上建立索引,1表示升序,-1表示降序,默认为1
db.persons.ensureIndex({name:1});
当系统已有大量数据时,创建索引非常耗时,需在后台执行,只需指定“backgroud:true"即可
db.persons.ensureIndex({name:1},{background:true});
2.建立唯一索引
只需在ensureIndex命令中指定"unique:true"即可创建唯一索引
db.test.ensureIndex({name:1}, {unique:true});
3.查看索引命令:
db.test.getIndexes();
db.test.getIndexKeys();
4.删除索引
删除test表中所有索引
db.test.fropIndexes();
删除test表中name索引
db.test.dropIndex({name:1});
分析sql语句的使用索引情况命令:
db.test.find().explain();
性能优化:
explain执行计划
mongoDB提供了一个explain命令获知系统如何处理查询请求。利用explain命令可以很好的观察系统如何使用索引来加快检索,同时可以针对性优化索引
explain返回参数含义:
curser: 返回游标类型(BasicCursor 或 BtreeCursor)
nscanned: 被扫描的文档数量
nscannedObjects
n: 返回的问的航数量
millis:耗时(毫秒)
indexBounds: 所使用的索引
优化器profile
MongoDB Database Porfiler是一种慢查询日志功能
开启Profiling功能
有两种方式可以控制Profiling的开关和级别
启动MongoDB时加上--profile=级别即可
1.db.setProfilingLevel(2);
profile的级别可以取0,1,2:
0表示不开启
1表示记录慢命令(默认查询时间为100ms)
2表示记录所有命令
设置慢查询时间
1.db.setProfilingLevel(1, 10);//第二个参数为慢查询时间
2.通过添加--slowms启动参数配置
性能监控:
Mongosniff
此工具可从底层监控到底有哪些命令发送给MongoDB去执行
./mongosniff --source NET lo
此工具是实时动态监视的,需要打开另一个客户端进行命令操作
此工具会将这些操作数据记录输出到一个日志文件中