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
。请相应地更改dbpath
和logpath
。
【讨论】:
我不作为服务启动的原因是因为我启用了身份验证。所以我执行命令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?