当我从/ data / db中删除所有文件时,为什么要保存MongoDB数据?

时间:2010-12-23 10:25:54

标签: ruby-on-rails mongodb disk

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

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

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

所有带有数据的.json文件都有任何类型的temp或cache文件夹吗?

2 个答案:

答案 0 :(得分:5)

  1. 如果不停止MongoDB,则无法删除“数据文件”。
  2. MongoDB使用caching,但是如果MongoDB被停止,则缓存日期也会被清空。
  3. 如果您停止了MongoDB并删除了数据文件夹,则无法再访问该数据。
  4. MongoDB将所有数据保存为bson,而不是json。

答案 1 :(得分:2)

正确答案是这是一个UNIX功能,而不是mongo。 (我认为你使用的是Linux)

Mongo使用内存映射文件作为商店。除此之外,这意味着很可能mongo始终保持所有文件都处于打开状态。

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

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

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

请注意,即使“df”或“du”表示不是,该文件仍在使用磁盘空间。这可能会令人困惑,因为您可能会出现“磁盘已满”错误,并在“df”上报告了大量可用空间。

您可以删除此文件,但是:

  • 你不会真正释放空间,但所有的Unix命令都会认为是对话。
  • Mongo不会受到影响(乍一看,真的不知道内部),但所有数据都将在关闭时丢失。哪个有时候很有用。 (我看到这曾经用于设置演示服务器)