MongoDB的预分配

来源:互联网 发布:拆卸软件是什么意思 编辑:程序博客网 时间:2024/05/16 00:43

MongoDB是一个部署、使用和存储都很方便的一个No SQL数据库,但是使用过程中就发现MongoDB很消耗存储空间。

看某个库的统计数据:

> use yyms_data_2011_12_6_17

switched to db yyms_data_2011_12_6_17

> db.stats()

{

       "db" : "yyms_data_2011_12_6_17",

       "collections" : 4,

       "objects" : 6230728,

       "avgObjSize" : 256.37665325785366,

       "dataSize" : 1597413192,

       "storageSize" : 1938201600,

       "numExtents" : 37,

       "indexes" : 6,

       "indexSize" : 2291485504,

       "fileSize" : 8519680000,

       "ok" : 1

}

这里面fileSize分配了近8G的空间,但是实际存储的数据dataSize和索引indexSize加起来约3.6G,空间利用率45.65%,基本上一半的空间都是浪费的。

对于使用普通SATA硬盘可能还可以接受,但是项目里为了提高速度使用了SSD硬盘,容量只有300G,按如此的使用率只能存一天多一点的数据。

为了提高空间使用率,在启动MongoDB时使用了参数--noprealloc关闭了空间预分配,启动方式改变后查看库的统计信息:

> use yyms_data_2011_12_6_18

switched to db yyms_data_2011_12_6_18

> db.stats()

{

       "db" : "yyms_data_2011_12_6_18",

       "collections" : 4,

       "objects" : 6150619,

       "avgObjSize" : 256.32243193733837,

       "dataSize" : 1576541620,

       "storageSize" : 1938201600,

       "numExtents" : 37,

       "indexes" : 6,

       "indexSize" : 2258045760,

       "fileSize" : 6373244928,

       "ok" : 1

}

fileSize分配了近6G的空间,实际存储的数据dataSize和索引indexSize加起来约3.5G,空间利用率60.17%,看的出来有了很大的提高,如此一块SSD硬盘上可以存两天的数据了,可以达到应用的要求了。

有文章介绍说关闭预分配对性能有影响,不过从目前使用来看,并没有发现有显著的影响,也许是应用场景不一样,不同的场景可以采用不同的策略。

原创粉丝点击