最近在做的项目用到的存储库是 Mongodb , 因为用到的数据是实时通信的, 数据量比较大, 而且还要存到数据库里,所有就想写一个脚本给数据库进行定时的清除处理, 可是一段时间后发现服务器空间快满了, 我才发现Mongodb 不会释放已经占用的磁盘空间, 即使drop collection也不行, 除非drop database. 这就导致如果一个db曾经有大量的数据一段时间后又删除的话,硬盘空间就是一个问题。
解决磁盘空间释放的问题有两种方法:
第一种是dump & restore:
1. mongodump -d databasename -o /path/to/dump_dir 2. echo 'db.dropDatabase()' | mongo <databasename> 3. mongorestore -d <databasename> /path/to/dump_dir如果数据量不大,dump不需要太长时间的情况下,或者经常备份有dump文件的情况的下,这种方法很简单。
第二种repair database
即在mongo shell中运行db.repairDatabase() , 或者 db.runCommand({ repairDatabase: 1 }) , 第二种方法可以带其他几个参数
{ repairDatabase: 1, preserveClonedFilesOnFailure: <boolean>, backupOriginalFiles: <boolean> }repairDatabase是官方文档中认为唯一可以回收磁盘空间的方法。
repairDatabase is the appropriate and the only way to reclaim disk space.
当你有多个shard的且数据量巨大时,dump & restore方法会花费巨大的时间,这时第二种方法的优势就很明显,就是分别在每个shard上运行repairDatabase,结果会快很多。
不过我的项目这部分是要对实时数据进行存储的,而repairDatabase在执行的时候可能会锁,从而影响数据库的读写,所以在这里不适合解决我的问题,后来我试过将实时数据存在redis缓存里,结果因为是实时数据,而且数据更新的比较快,所以就会报内存溢出的错误,最后,我用node的fs写文件的方式,模拟数据库的读写功能,将数据存成了文件夹,这样就没问题了
相关推荐
首先一点就是mongodb 不会释放已经占用的硬盘空间,即使drop collection也不行,除非drop database。如果一个db曾经有大量的数据一段时间后又删除的话,硬盘空间就是一个问题,如何收回被mongdodb占用的多余空间?...
OpenStack Ceilometer用MongoDB解决占用磁盘空间过大问题 背景:Ceilometer使用MongoDB作为数据库,不断进行采样,导致数据量膨胀,占用过多的磁盘空间。 知识背景 1.数据库文件类型 1.1. journal 日志文件 跟...
然而,当我们在MongoDB中删除文档或集合后,MongoDB不会立即释放这些已占用的磁盘空间,而是保留空记录列表供后续插入操作使用。这可能导致磁盘空间利用率低下,尤其是在频繁进行增删改操作的环境中。为了优化空间...
1. **存储引擎改进**:MongoDB 3.2默认使用 WiredTiger 存储引擎,相比之前的MMAPv1,WiredTiger提供更好的写入性能和内存管理,同时降低了磁盘占用。 2. **查询优化器**:查询优化器的改进使得MongoDB能更好地选择...
这种预分配策略可以保证写入性能的稳定性,防止因频繁分配磁盘空间而导致的阻塞。如果不需要预分配,可以通过启动参数`--noprealloc`关闭此功能。 数据库的结构包括名字空间和盘区。名字空间是数据库的组成部分,每...
本实例将详细解释如何在MongoDB集群中进行数据目录重构,以释放已被删除数据所占用的磁盘空间。 一、MongoDB 集群重构的背景与原因 MongoDB 数据库在删除文档后,由于其存储引擎的特性(如MMAPv1或WiredTiger),...
- 这种策略有助于避免小规模数据库占用过多磁盘空间,同时保证大规模数据库有足够的预留空间。 - **内存压缩与优化:** - MongoDB定期执行内存压缩操作,以释放未使用的内存区域,减少内存碎片。 - 通过移动数据...
2. **WiredTiger存储引擎**:MongoDB 3.0开始支持WiredTiger作为默认存储引擎,它提供了更好的压缩比,降低了磁盘空间占用,并且支持事务处理,增强了数据库的稳定性和安全性。 3. **自动化Sharding**:3.0版本的...
10. **文件存储**:MongoDB 使用其自有的文件存储系统WiredTiger,提供高效的存储和压缩机制,降低磁盘空间占用。 综上所述,MongoDB 3.2.4版本是一个强大的数据库解决方案,适合处理各种规模和类型的数据。通过...
Nagios通过定期执行插件来检查服务的状态,如CPU使用率、内存占用、磁盘空间等。如果插件返回的状态不符合预设的阈值,Nagios就会发送报警通知。对于MongoDB监控,我们需要一个专门的Python插件,它可以连接到...
WiredTiger 提供了更高的性能和更低的内存占用,通过使用压缩技术有效地减少了磁盘空间的使用。此外,WiredTiger 的缓存策略也被优化,能够更高效地利用内存资源,进一步提升了查询速度。 在安全性方面,SSL支持...
同时,增加足够的磁盘空间和合理的磁盘分区,避免磁盘空间不足导致的碎片和性能下降。 4. **调整MongoDB配置参数** MongoDB的配置参数也可以直接影响IO性能。例如,增大`working_set_size`可以帮助更多的数据驻留...
相比于原来的MMapV1存储引擎,WiredTiger利用压缩技术减少了磁盘空间的占用,同时通过更有效的缓存策略提升了数据访问速度。 此外,MongoDB 3.0.2还强化了安全特性,包括认证、授权和审计功能。例如,新增的SCRAM-...
--smallfiles 选项有助于保持数据文件的大小较小,这样可以减少单个文件的大小,特别是在有大量数据库的情况下,使用 --noprealloc 和 --smallfiles 可以减少存储空间的占用。对于有成千上万的集合和索引的情况,...
- 磁盘占用情况显示复合索引比单一索引多占用一定空间,但非线性增长,这与MongoDB的数据预分配策略有关。 - **Case2**:测试批量导入数据的耗时,每次导入的数据量翻倍。 - 每次导入200万条数据,共导入1000万条...