我有一个MongoDB收集超过 1,000,000 份文档。
我正在执行初始.find({ my_query })
返回这些文档的子集(约 25,000 个文档),然后我将其放入list
object.
然后,我循环遍历每个对象,解析列表中返回的文档中的一些值,并通过代码使用这些解析的值执行附加查询:
def _perform_queries(query):
conn = pymongo.MongoClient('mongodb://localhost:27017')
try:
coll = conn.databases['race_results']
races = coll.find(query).sort("date", -1)
except BaseException, err:
print('An error occured in runner query: %s\n' % err)
finally:
conn.close()
return races
在这种情况下,我的query
字典是:
{"$and": [{"opponents":
{"$elemMatch": {"$and": [
{"runner.name": name},
{"runner.jockey": jockey}
]}}},
{"summary.dist": "1"}
]}
这是我的问题。我已经创建了一个索引opponents.runner.name
and opponents.runner.jockey
。这使得查询变得非常非常快。然而,在连续大约 10,000 次查询之后,pymongo正在引发异常:
pymongo.errors.AutoReconnect: [Errno 49] Can't assign requested address
当我删除索引时,我没有看到此错误。但需要大约0.5 seconds
每个查询,这在我的情况下不可用。
有谁知道为什么[Errno 49] can't assign requested address
可能会发生吗?我见过一些其他相关问题can't assign requested address
但不涉及pymongo这些答案不会带我到任何地方。
UPDATE:
按照下面 Serge 的建议,这里是输出ulimit -a
:
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 2560
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 709
virtual memory (kbytes, -v) unlimited
我的 MongoDB 在 OS X Yosemite 上运行。