mongodb文档说
要压缩此空间,请从 mongo shell 运行 db.repairDatabase() (请注意,此操作会阻塞并且速度很慢)。
in http://www.mongodb.org/display/DOCS/Excessive+Disk+Space
我想知道如何让 mongodb 释放已删除的磁盘空间自动地 ?
附注我们在mongodb中存储了很多下载任务,多达20GB,并且在半小时内完成了这些任务。
一般来说,如果您不需要收缩数据文件,则根本不应该收缩它们。这是因为在磁盘上“增长”数据文件是一项相当昂贵的操作,并且 MongoDB 可以在数据文件中分配的空间越大,碎片就越少。
因此,您应该尝试为数据库提供尽可能多的磁盘空间。
However如果必须缩小数据库,您应该记住两件事。
MongoDB 的数据文件增长方式为
加倍,因此数据文件可能是
64MB,然后 128MB,依此类推,直至 2GB(在
它停止加倍的点
保留文件直至 2GB。)
与大多数数据库一样...
进行诸如缩小之类的操作
需要安排一个单独的工作
这样做,没有“自动收缩”
MongoDB。事实上主要的 noSQL 数据库
(讨厌这个名字)只有Riak
会自动缩小。所以,你需要
使用您的操作系统创建作业
调度程序来运行收缩。您可以使用 bash 脚本,或者让作业运行 php 脚本等。
服务器端 JavaScript
您可以使用服务器端 Javascript 进行收缩,并通过作业(如 cron 或 Windows 调度服务)定期通过 mongo 的 shell 运行该 JS ...
假设一个集合名为foo您可以将下面的 javascript 保存到名为的文件中bar.js并运行...
$ mongo foo bar.js
javascript 文件看起来像......
// 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));
这将运行并返回类似...
MongoDB shell version: 1.6.4
connecting to: foo
Storage Size: 51351
TotalSize: 79152
-----------------------
Running db.repairDatabase()
-----------------------
Storage Size: 40960
TotalSize: 65153
按计划运行(在非高峰时段),您就可以开始了。
上限集合
然而还有另一种选择,上限集合.
上限集合是固定大小的
具有非常高的收藏
性能自动 FIFO 老化功能
(过期时间取决于插入顺序)。
它们有点像“RRD”概念
如果你熟悉的话。
另外,有上限的集合
自动、高性能、
维护插入顺序
集合中的对象;这是
对于某些用例来说非常强大
例如日志记录。
基本上,您可以限制集合的大小(或文档的数量),例如 20GB,一旦达到该限制,MongoDB 将开始丢弃最旧的记录,并在新的记录进入时将其替换。
这是保留大量数据的好方法,随着时间的推移丢弃旧数据并保持相同数量的磁盘空间使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)