【问题标题】:Mongodb normal exit before applying a write lockMongodb在申请写锁之前正常退出
【发布时间】:2013-08-05 10:07:40
【问题描述】:

我正在为我的网络抓取项目使用 python、scrapy、MongoDB。我曾经每天抓取 40Gb 数据。在 mongodb.conf 文件中是否有方法或设置,以便 MongoDB 在由于磁盘已满错误而在 db 上应用写锁定之前正常退出?

因为每次我在 MongoDB 中遇到磁盘已满错误的问题。然后我必须手动重新安装 MongoDB 以从 db 中删除写锁。我无法在数据库上运行修复和压缩命令,因为运行此命令还需要可用空间。

【问题讨论】:

    标签: mongodb scrapy


    【解决方案1】:

    在某些情况下,MongoDB 不能很好地处理磁盘已满错误,但您不必卸载然后重新安装 MongoDB 来删除锁定文件。相反,您可以只使用mongod.lock 文件。只要您启用了日记功能,您的数据就应该是好的。当然,此时,您无法向 MongoDB 数据库添加更多数据。

    您可能不需要 repaircompact 只有在您确实从 MongoDB 中删除数据时才有帮助。 compact 确实压缩数据,所以这仅在您确实删除了数据时才有用。

    不断添加,然后再删除可能会导致碎片和大量磁盘空间未使用。您可以通过使用可以在集合上设置的userPowerOf2Sizes option 来防止这种情况。 compact 也通过重写数据库文件来缓解这种情况,但正如您所说,您需要可用的磁盘空间。我建议您还添加一些监控,以在您的数据大小达到完整磁盘空间的 50% 时向您发出警告。在这种情况下,仍然有足够的时间使用compact 来回收未使用的空间。

    【讨论】:

    • 删除 mongod.lock 文件有助于在我的情况下它再次出现。
    • 如何为mongodb添加监控服务,因为我所有的抓取工作都是由cronjob执行的
    • 如果 MongoDB 启动了,肯定会再次出现。它应该这样做。对于监控,您可以使用如下内容:cyberciti.biz/tips/shell-script-to-watch-the-disk-space.html — 但这超出了您的问题范围。
    猜你喜欢
    • 1970-01-01
    • 2021-01-20
    • 2015-08-27
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多