mongodb 将数据保存在两个地方

Posted

技术标签:

【中文标题】mongodb 将数据保存在两个地方【英文标题】:mongodb keeps data in two places 【发布时间】:2015-08-27 23:22:40 【问题描述】:

我的远程服务器是ubuntu 14.04,我在那里安装了mongodb。但是当我尝试使用mongorestore 恢复我的DataBase 时,我注意到以下两个地方的磁盘空间显着减少。

/var/lib/mongodb

/data/db

有人知道这是为什么吗?

【问题讨论】:

这两个文件夹的内容是一样的还是不同的? 我能想到的一种可能性是,当您打开journal 时,日志文件默认进入/var/lib/mongodb/journal。看看这个文件夹和/data/db之间是否有日志 所有文件大小都是一样的。但是现在确定内容是完全一样还是什么。 是的,有一个 /var/lib/mongodb/journal 文件夹,但它只有 1mb 的数据。大多数文件都在这个文件夹之外 您能具体说说您是如何运行 mongorestore 的吗? 【参考方案1】:

看来你已经用 Ubuntu 的 APT 安装了 mongo。

如果您只是在终端中使用 nohup 启动 mongod 服务器,或者只是让它在不同的终端中运行,它会假定默认 db 路径为 /data/db/,默认日志目录为 /var/log/mongo

您可能已经使用类似

的命令启动 mongod
./bin/mongod

它采用默认的数据和日志目录。

mongorestore 根据mongod 服务器的配置工作。这就是您在运行mongorestore 后看到这些目录的空间消耗激增的原因。

启动mongod服务器的正确方法是使用以下命令

sudo service mongod start

如果您不想作为服​​务启动/停止,也可以通过以下命令指示mongod正确使用conf文件

./bin/mongod --config /etc/mongod.conf

您的mongod conf 文件位于/etc/mongod.conf。请相应地更改dbpathlogpath

【讨论】:

我不作为服务启动的原因是因为我启用了身份验证。所以我执行命令mongod --auth。同样对于当前设置,您能分辨出真正的 db mongo 是从哪个部分获取数据的吗? 我也可以删除这两个文件夹中的任何一个并确保原始 mongo db 可以正常运行吗? 您当然可以删除其中一个目录,前提是您知道您使用mongod 启动了哪个数据目录和日志目录?【参考方案2】:

首先,我可以将问题分为两部分:

    为什么在 mongorestore 之后文件系统大小减小了 为什么 mongodb 将数据存储在两个位置?

第一个问题的答案:

Mongorestore 只收集数据,但文件系统大小可能与实际数据大小不同。 Mogodb 就是按照这种方式设计的,它将分配比 DB 中的实际数据大小更多的空间。 mongodb官网有详细解释参考这部分this link

为什么我的数据目录中的文件比我的数据目录大 数据库?

你的数据目录下的数据文件,也就是/data/db目录 在默认配置中,可能大于插入的数据集 进入数据库。考虑以下可能的原因:

第二个问题:

参考bsd回复,似乎是一种可能的情况。

【讨论】:

谢谢你 db 在我的情况下也比 mongorestore bson 文件大得多

以上是关于mongodb 将数据保存在两个地方的主要内容,如果未能解决你的问题,请参考以下文章

mongodb - 确保将数据保存在不同集合中的策略,例如应用程序级别的事务

如何使用node.js中的循环将表单数据保存为对象和对象数组到mongodb?

Mongodb 模式设计案例一例

axios 没有将数组保存到 MongoDB

如何通过 JSON 对象将数据保存到 mongodb 数据库?

使用mongoose操作mongodb数据库