mongoDb固定集合与性能优化

固定集合:

属性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

此工具是实时动态监视的,需要打开另一个客户端进行命令操作

此工具会将这些操作数据记录输出到一个日志文件中








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