【发布时间】:2020-01-22 13:24:22
【问题描述】:
目前我将数据存储在我的 MongoDB 上,如下所示:
- 每位客户 1 个数据库
- 每个客户有大约 40 个收藏
- 一共50个客户(有40*50=2000个收藏)
- 所有 50 位客户的数据库大小为 3 GB
我的 MongoDB 服务因错误而崩溃
“打开的文件太多”
和 MongoDB "Too Many Open Files"? Raise the limit 显示了如何解决问题,但我仍然遇到崩溃。
错误“打开的文件过多”表示 MongoDB 进程使用的文件过多并且操作系统正在抱怨。这就是我知道 MongoDB 正在使用大量文件的方式:
通过
service mongodb status获取MongoDB的进程id。进程ID将显示在信息中然后要获取MongoDB使用的文件我使用这个命令
lsof -a -p <ProcessId>当我运行该命令时,我看到该进程正在使用 1010 个文件!
我创建的客户数据库越多,这个数字就越大!所以我想我的解决方案是将所有数据库合并为一个。如果我这样做,我将不得不将 AccountId 列添加到我的所有集合中。 如果我进行更改,我应该为 AccountId 分配什么索引,这样我的搜索才能高效?例如,我希望快速获取 IdAccount=34 的所有 PurchaseOrder。执行此更改是你们推荐的吗?我应该将所有 50 个数据库合二为一吗?
PS:在另一台 Linux 计算机上,我创建了一个 MongoDB 数据库,其中只有 1 个数据库和 40 个集合。我用 6 GB 的数据填充了 40 个集合(是现在的两倍)。 MongoDB 使用了 200 个文件,尽管这个数据库是原来的两倍!
【问题讨论】:
标签: linux mongodb multi-tenant