如何压缩MongoDB的数据文件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
MongoDB采用了磁盘空间预分配的机制,为了避免磁盘碎片以及使用mmap后造成的近一步的内存碎片,但是随着数据的增删除改操作,数据文件不可避免的会产生空洞,造成磁盘空间和内存的浪费。
怎样压缩MongoDB的数据文件
1.通过repairDatabase整理数据文件
repairDatabase是MongoDB内置的一个db上的方法,调用这个方法,MongoDB会扫描db中的所有数据,并将通过重新插入来重新整理数据集合。
这种方法的代价是对这个db的读写操作会变得非常之慢,甚至会出现写操作丢失的情况。所以这个时候最好直接停掉客户端的写操作。
可以创建bar.js文件,写入如下代码:
//Getathecurrentcollectionsize.
varstorage=db.foo.storageSize();
vartotal=db.foo.totalSize();
print('StorageSize:'+tojson(storage));
print('TotalSize:'+tojson(total));
print('-----------------------');
print('Runningdb.repairDatabase()');
print('-----------------------');
//Runrepair
db.repairDatabase()
//Getnewcollectionsizes.
varstorage_a=db.foo.storageSize();
vartotal_a=db.foo.totalSize();
print('StorageSize:'+tojson(storage_a));
print('TotalSize:'+tojson(total_a));
然后运行:
$mongofoobar.js
运行结果:
MongoDBshellversion:1.6.4
connectingto:foo
StorageSize:51351
TotalSize:79152
-----------------------
Runningdb.repairDatabase()
-----------------------
StorageSize:40960
TotalSize:65153
怎样压缩MongoDB的数据文件
2.如果应用可以接受,可以考虑使用cappedcollection
cappedcollection是MongoDB中的一种特殊collection,它的大小可以限定,数据在这个限定大小内循环写入,在数据集合达到上限后,新数据会覆盖老的数据。这样磁盘上的空洞在一段时间后会自动消除。
事实上使用replication相关的功能也可以实现以上说的数据压缩,具体过程比较麻烦,还会涉及到客户端的切换等操作。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。