移动一个非常大的MongoDB数据库

时间:2017-09-03 18:05:23

标签: mongodb mongorestore

尝试使用1亿多个文档移动MongoDB数据库。将其从AWS中的服务器移动到GCP中的服务器。尝试mongodump - 虽然有效,但mongorestore仍然存在错误 -

error running create command: 24: Too many open files

如何做到这一点?

不想通过在AWS服务器上创建脚本来转移,以获取每个文档并推送到GCP服务器上的API端点,因为这需要太长时间。

编辑(添加更多细节) 已经尝试将ulimit -n设置为无限制。由于GCP具有无法修改的硬编码限制,因此无法正常工作。

1 个答案:

答案 0 :(得分:0)

您似乎正在为您的用户点击ulimit。这可能是以下部分或全部的功能:

  • 您的用户具有默认ulimit(可能是256或1024,具体取决于操作系统)
  • 数据库的大小,MongoDB使用内存映射文件可能会在还原过程中导致大量打开的文件
  • 运行mongorestore的方式可以增加并发性,从而增加并发打开的文件句柄数

您可以通过调用ulimit -n <some number>来增加当前shell的限制,以解决用户允许的打开文件数。您选择的号码不能超过主机上配置的硬限制。您还可以永久更改ulimit,更多详细信息here。这是根本原因修复,但您更改ulimit的能力可能受AWS限制,因此您可能希望考虑降低mongorestore进程的并发性通过调整以下设置:

  

- numParallelCollections int

     

默认值:4

     

mongorestore应该并行恢复的集合数量。

     

- numInsertionWorkersPerCollection int

     

默认值:1

     

指定每个集合并发运行的插入工作器数。

如果您为1以外的其他值选择了值,则可以通过如下设置来减少并发性(以及因此并发打开的文件句柄数):

--numParallelCollections=1 --numInsertionWorkersPerCollection=1   

当然,这会增加恢复过程的运行时间,但它可能允许您潜入当前配置的ulimit。虽然,只是重申;根本原因修复是增加ulimit