【问题标题】:Why is MongoDB data saved when I remove all files from /data/db?当我从 /data/db 中删除所有文件时,为什么会保存 MongoDB 数据?
【发布时间】:2010-12-23 10:25:54
【问题描述】:

我刚开始在 Rails 3 中使用 MonogDB。在做了一些基准测试后,我发现它的执行速度比 Postgresql/pg 快 5-10 倍。

我决定检查数据的存储方式,因此我从 /data/db 中删除了所有文件(该文件夹包含“mydb.0”、“mydb.1”等文件。

但是我仍然可以从我的 Rails 应用程序中访问数据!即使在重新加载服务器之后。

那么是否有任何类型的临时或缓存文件夹包含所有带有数据的 .json 文件?

【问题讨论】:

    标签: ruby-on-rails mongodb disk


    【解决方案1】:
    1. 在不停止 MongoDB 的情况下无法删除“数据文件”。
    2. MongoDB 使用caching,但如果 MongoDB 停止,缓存日期也会清空。
    3. 如果您停止了 MongoDB 并删除了数据文件夹,则无法再访问数据。
    4. MongoDB 将所有数据保存为 bson,而不是 json。

    【讨论】:

    • 我明白了 :) 我在 Mac 上,我将文件移动到垃圾箱。显然,当文件被发送到垃圾箱时,Mac OS 并没有真正移动文件。你是对的,你不能在不停止 mongodb 的情况下删除它们。
    【解决方案2】:

    正确答案是这是一个 UNIX 特性,而不是 mongo。 (我假设您使用的是 Linux)

    Mongo 使用内存映射文件作为存储。除其他外,这意味着 mongo 很可能会一直打开所有文件。

    在 Unix 上,文件在使用文件的最后一个进程关闭它们时立即被删除,而不是在您发出“rm”命令时。

    在这种情况下,rm 命令取消链接文件(从目录中删除条目,因此无法再次访问)。

    所以,答案是一旦您停止 mongo,操作系统就会删除该文件。

    请注意,文件仍在使用磁盘空间,即使“df”或“du”表示不使用。这可能会造成混淆,因为您可能会在“df”上报告大量可用空间的“磁盘已满”错误。

    您可以删除这些文件,但是:

    • 您不会真正释放空间,但所有 Unix 命令都会认为相反。
    • Mongo 不会受到影响(乍一看,并不真正了解内部情况),但关闭时所有数据都会丢失。这有时很有用。 (我看到这个曾经用于设置演示服务器)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多