我们有几个Python 3.6脚本执行Web抓取并将结果保存在mongo集合中(mongo服务器版本3.6.3和pymongo 3.4.0)。这些脚本每天执行几次,并使用python多重处理对集合执行数千个读写操作,其中某些操作是同时执行的。完成网络抓取后,只有一个过程会遍历集合中的新记录以搜索重复项。
每天插入约60000个新文档,并更新约100万。文件总数约为700万(大约5 Gb的数据)。
每隔一周左右(并非总是如此),就在完成抓取部分并开始重复部分之后,pymongo会引发此错误:
pymongo.errors.AutoReconnect: connection closed
重复过程是在所有插入之后在过程中执行的第一个“大”读取操作(意味着大查询是指返回集合中很多文档的查询)。
该错误一次产生之后,每次脚本尝试对集合执行大读取操作时都会产生该错误。 Mongo Shell仍可访问,并且大多数插入和读取查询仍然有效。
在mongo shell中执行db.repairDatabase()
后,该问题已解决。
我的猜测很可能是一个文档或一个或多个组在插入时已损坏,但是我不知道如何确定它,并且出现的错误“连接已关闭”也无济于事。
关于如何确定问题是否为文档损坏/避免在插入时文档损坏的任何线索吗?