返回顶部

收藏

压缩MongoDB的数据库文件

更多

MongoDB 采用了磁盘空间预分配的机制,为了避免磁盘碎片以及使用mmap后造成的近一步的内存碎片,但是随着数据的增删除改操作,数据文件不可避免的会产生空洞,造成磁盘空间和内存的浪费。本文说的是这方面的压缩,数据使用某些压缩算法进行压缩的讨论不在此范围。 在MongoDB 中,大概有两种方法可以解决这种问题,但是都不是无痛方式,所以并不推荐使用。 1.通过 repairDatabase; 整理数据文件 repairDatabase 是MongoDB 内置的一个db 上的方法,调用这个方法,MongoDB 会扫描db中的所有数据,并将通过重新插入来重新整理数据集合。 这种方法的代价是对这个 db; 的读写操作会变得非常之慢,甚至会出现写操作丢失的情况。所以这个时候最好直接停掉客户端的写操作。 可以创建 bar.js; 文件,写入如下代码:

// Get a the current collection size.
var storage = db.foo.storageSize();
var total = db.foo.totalSize();

print('Storage Size: ' + tojson(storage));

print('TotalSize: ' + tojson(total));

print('-----------------------');
print('Running db.repairDatabase()');
print('-----------------------');

// Run repair
db.repairDatabase()

// Get new collection sizes.
var storage_a = db.foo.storageSize();
var total_a = db.foo.totalSize();

print('Storage Size: ' + tojson(storage_a));
print('TotalSize: ' + tojson(total_a));

然后运行: $ mongo; foo; bar.js; 运行结果: MongoDB shell; version;: 1.6.4; connecting to;: foo; Storage Size;: 51351; TotalSize: 79152;


Running db.repairDatabase;()

Storage Size;: 40960; TotalSize: 65153;

2.如果应用可以接受,可以考虑使用capped collection; capped collection; 是 MongoDB; 中的一种特殊collection,它的大小可以限定,数据在这个限定大小内循环写入,在数据集合达到上限后,新数据会覆盖老的数据。这样磁盘上的空洞在一段时间后会自动消除。 参考资料:http://learnmongo.com/posts/compacting-mongodb-data-files/ 事实上使用 replication; 相关的功能也可以实现以上说的数据压缩,具体过程比较麻烦,还会涉及到客户端的切换等操作。有兴趣的同学可以自己研究一下。同时欢迎有更好的方法提供。

标签:mongodb,压缩,nodejs

收藏

0人收藏

支持

0

反对

0

相关聚客文章
  1. eshujiushiwo 发表 2015-04-08 06:36:06 MongoDB的nodejs 键值压缩driver
  2. eshujiushiwo 发表 2015-04-08 06:36:06 MongoDB的nodejs 键值压缩driver
  3. Conan Zhang 发表 2014-07-06 16:32:35 用UglifyJS2合并压缩混淆JS代码
  4. 博主 发表 2015-02-25 15:14:49 阿里云CentOS搭建MEAN
  5. Marshal 发表 2012-05-16 14:17:42 在dao代码中使用异常
  6. ErosSignum 发表 2013-05-29 16:03:37 Centos上安装nginx+nodejs+express+mongodb环境.
  7. richen 发表 2014-07-07 01:08:48 CentOS使用yum安装mongodb、redis、node.js
  8. 博主 发表 2014-05-19 06:49:05 搭建Node+Express+Mongodb环境
  9. zangw 发表 2015-03-06 04:42:25 mongoose find multiple documents
  10. Zida 发表 2015-10-20 14:55:40 MongoDB更新操作符的实践
  11. lellansin 发表 2015-12-29 10:32:42 node.js Mongodb parseError occured 导致连接断开
  12. 陈杰斌 发表 2016-07-02 12:38:53 nodejs express session的应用和存储到mongodb

发表评论