0

我正在尝试按日期对我的 Mac 本地 CouchDB 数据库中的约 13,000 个文档进行排序,但它每次都挂在文档 5407 上。我试过增加 Futon 的超时容限,但无济于事。这是我收到的错误消息:

对于 db.view('index15/by_date_time', startkey=start, endkey=end) 中的行:文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/client.py ",第 984 行,在迭代中 文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/client.py”,第 1003 行,行文件“/Library/Python/2.6/site-packages/CouchDB- 0.8-py2.6.egg/couchdb/client.py”,第 990 行,在 _fetch 文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/client.py”中,第 880 行,在 _exec 文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/http.py”中,第 393 行,在 get_json 文件中“/Library/Python/2.6/site -packages/CouchDB-0.8-py2.6.egg/couchdb/http.py”,第 374 行,在获取文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/ http.py”,第 419 行,在 _request 文件中“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/http.py”,第 239 行,在请求文件中“/Library/ Python/2.6/site-packages/CouchDB-0.8-py2.6。egg/couchdb/http.py”,第 205 行,在 _try_request_with_retries socket.error: 54

顺便说一句,这与我的脚本中有错字时产生的错误消息相同。

我正在使用 couchpy 创建视图,如下所示:

def dateTimeToDocMapper(doc):

from dateutil.parser import parse
from datetime import datetime as dt
if doc.get('Date'):
    # [year, month, day, hour, min, sec]
    _date = list(dt.timetuple(parse(doc['Date']))[:-3])
    yield (_date, doc)

当它运行时,我可以打开一个 python shell 并使用 server.tasks() 我可以看到索引确实在发生。

>>> server.tasks()

[{u'status': u'Processed 75 of 13567 changes (0%)', u'pid': u'<0.451.0>', u'task': u'gmail2 _design/index11', u'type ': u'查看组索引器'}]

但每次它卡在 13567 个更改的进程 5407 上时(需要大约 8 分钟才能达到这个程度)。我检查了我认为是文件 5407 的文件,它似乎没有任何异常。

顺便说一句,如果我在进程停止后尝试重新启动进程,我会从 server.tasks() 得到这个响应

>>> server.tasks()

[{u'status': u'Processed 0 of 8160 changes (0%)', u'pid': u'<0.1224.0>', u'task': u'gmail2 _design/index11', u'type ': u'查看组索引器'}]

换句话说,couchDB 似乎已经认识到它已经处理了 13567 个更改中的前 5407 个,现在只剩下 8160 个了。

但随后它几乎立即退出并给了我相同的 socket.error: 54

在过去的几个小时里,我一直在互联网上搜索,但无济于事。我曾尝试从其他位置(例如 Futon)启动索引。正如我所提到的,我的错误之一是操作系统超时错误,增加 Futon 配置中的超时阈值似乎对此有所帮助。

请,如果有人能阐明这个问题,我将非常感激。我想知道是否有办法在它已经索引 5407 个文档后重新启动该过程,或者更好的是,如果有一种方法可以防止事情从一开始就退出 1/3。

非常感谢。

4

1 回答 1

0

据我所知,CouchDB 通过将所有文档发送到您的 couchpy 视图服务器来构建您的视图内容,该服务器在该文档上运行您的 Python 代码。如果该代码由于任何原因失败,CouchDB 将收到出错的通知,这将停止视图内容的更新。

因此,文档 5408 存在问题,导致您的 Python 代码行为异常。如果您需要更多帮助,我建议您在此处发布该文档。或者,查看您的 couchpy 视图服务器的日志:它们可能包含有关您的代码如何失败的信息。

于 2011-08-06T08:45:14.467 回答