【发布时间】:2018-07-31 12:49:10
【问题描述】:
问题
我遍历整个顶点集合,例如journals,并使用它创建从person 到给定journal 的边author。
我使用python-arango,代码类似于:
for journal in journals.all():
create_author_edge(journal)
我有一个相对较小的数据集,journals-collection 只有大约 ca。 1300 份文件。但是:这是超过 1000,这是 Web 界面中的批量大小 - 但我不知道这是否相关。
问题是它引发了CursorNextError,并从数据库中返回HTTP 404和ERR 1600,也就是ERROR_CURSOR_NOT_FOUND error:
当通过其 id 请求游标但找不到具有该 id 的游标时将引发。
原因分析
来自ArangoDB Cursor Timeout和this issue,我怀疑是因为数据库中游标的TTL已过期,而在python stacktrace中看到了这样的东西:
# Part of the stacktrace in the error:
(...)
if not cursor.has_more():
raise StopIteration
cursor.fetch() <---- error raised here
(...)
如果我快速迭代整个集合,即如果我执行print(len(journals.all()),它会输出“1361”而没有错误。
当我用 AQL 替换 journals.all() 并增加 TTL 参数时,它可以正常工作:
for journal in db.aql.execute("FOR j IN journals RETURN j", ttl=3600):
create_author_edge(journal)
但是,如果没有 ttl 参数,AQL 方法会产生与使用 journals.all() 相同的错误。
更多信息
最后一条信息是,当出现错误时,我正在我的个人笔记本电脑上运行它。在我的工作计算机上,使用相同的代码创建图形并使用相同的数据填充它,但没有引发错误。因为我在度假,我无法访问我的工作计算机来比较版本,但两个系统都是在夏天安装的,所以版本很可能是相同的。
问题
我不知道这是 python-arango 还是 ArangoDB 的问题。我相信,因为当 TTL 增加时没有问题,这可能表明 ArangodDB 而不是 Python 驱动程序有问题,但我不知道。
(我添加了一个功能请求,将 ttl-param 添加到 .all()-method here。)
对为什么会发生这种情况有任何见解吗?
我没有创建标签“python-arango”的代表,所以如果有人能创建它并标记我的问题,那就太好了。
【问题讨论】: