MongoDB中数据库数量的实际限制是什么?

3

有没有人能说一下mongodb中数据库数量的实际限制?当我达到120个数据库时,我开始遇到严重问题。比如:

> show dbs
Mon Feb 10 16:35:32 DBClientCursor::init call() failed
Mon Feb 10 16:35:32 query failed : admin.$cmd { listDatabases: 1.0 } to: 127.0.0.1:27017
Mon Feb 10 16:35:32 Error: error doing query: failed src/mongo/shell/collection.js:155
Mon Feb 10 16:35:32 trying reconnect to 127.0.0.1:27017
Mon Feb 10 16:35:32 reconnect 127.0.0.1:27017 failed couldn't connect to server 127.0.0.1:27017
>
Mon Feb 10 16:36:01 trying reconnect to 127.0.0.1:27017
Mon Feb 10 16:36:01 reconnect 127.0.0.1:27017 failed couldn't connect to server 127.0.0.1:27017
>
Mon Feb 10 16:37:01 trying reconnect to 127.0.0.1:27017
Mon Feb 10 16:37:01 reconnect 127.0.0.1:27017 ok

并且
> getMemInfo()
{ "virtual" : 32, "resident" : 7 }
Mon Feb 10 16:39:00 DBClientCursor::init call() failed
Mon Feb 10 16:39:00 query failed : admin.$cmd { replSetGetStatus: 1.0, forShell: 1.0 } to: 127.0.0.1:27017
> shell
Mon Feb 10 16:39:38 ReferenceError: shell is not defined (shell):1
Mon Feb 10 16:39:38 trying reconnect to 127.0.0.1:27017
Mon Feb 10 16:39:38 reconnect 127.0.0.1:27017 ok

然而日志文件仍然充满了谜团。

1个回答

2

您正在哪个主机上运行什么版本的mongodb? 这是在CenOS 6.5上进行的测试,使用来自EPEL的mongodb 2.2 x86_64直接安装。

这是一个示例Python脚本,可创建1000个数据库。

from pymongo import MongoClient  

mc = MongoClient()
for i in range(5000):
    print i
    mc['db%s'%(i)].test.insert({"test":True})

输出:

...snip...
506
Traceback (most recent call last):
  File "overload_mongo.py", line 6, in <module>
    mc['db%s'%(i)].test.insert({"test":True})
  File "/usr/lib64/python2.6/site-packages/pymongo/collection.py", line 357, in insert
    continue_on_error, self.__uuid_subtype), safe)
  File "/usr/lib64/python2.6/site-packages/pymongo/mongo_client.py", line 929, in _send_message
    raise AutoReconnect(str(e))
pymongo.errors.AutoReconnect: [Errno 104] Connection reset by peer

这里是,看着日志

ERROR: Uncaught std::exception: boost::filesystem::basic_directory_iterator constructor: Too many open files: "/index/bauman/db/_tmp/esort.1392056635.506/", terminating

过多打开文件的问题

如果您使用企业版Linux平台,您可以将此文件放入/etc/security/limits.d/mongodb.conf中并启动新会话。

mongodb        hard    nofile          99999
mongodb        soft    nofile          99999
mongodb        hard    nproc          99999
mongodb        soft    nproc          99999

我不知道如何在Windows上实现类似的结果。
问题在于,MongoDB想要内存映射每个数据库文件,因此您需要让您的主机操作系统允许它这样做。
与上面相同的代码。
python overload_mongo.py

输出

...snip...
995
996 
997
998
999

一切都好了


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接