为什么ArangoDB(使用Python Arango)返回err1600 ERROR\u CURSOR\u NOT\u FOUND? 问题

为什么ArangoDB(使用Python Arango)返回err1600 ERROR\u CURSOR\u NOT\u FOUND? 问题,python,arangodb,Python,Arangodb,我迭代整个顶点集合,例如,日志,并使用它创建边,作者,从人到给定的日志 我使用的代码如下: for journal in journals.all(): create_author_edge(journal) 我有一个相对较小的数据集,期刊-集合只有约1300个文档。然而:这是1000多个,这是Web界面中的批量大小-但我不知道这是否相关 问题是它会引发一个错误,并从数据库返回http404和err1600,这是: 当通过其id请求游标但找不到具有该id的游标时,将引发 对原因的洞察

我迭代整个顶点集合,例如,
日志
,并使用它创建边,
作者
,从
到给定的
日志

我使用的代码如下:

for journal in journals.all():
    create_author_edge(journal)
我有一个相对较小的数据集,
期刊
-集合只有约1300个文档。然而:这是1000多个,这是Web界面中的批量大小-但我不知道这是否相关

问题是它会引发一个错误,并从数据库返回
http404
err1600
,这是:

当通过其id请求游标但找不到具有该id的游标时,将引发

对原因的洞察 从,从,我怀疑这是因为游标的TTL在数据库中已过期,在python stacktrace中可以看到这样的情况:

# Part of the stacktrace in the error:
(...)
if not cursor.has_more():
    raise StopIteration
cursor.fetch()  <---- error raised here
(...)
但是,如果没有
ttl
-参数,AQL方法会产生与使用
journals.all()
相同的错误

更多信息 最后一条信息是,当出现错误时,我正在我的个人笔记本电脑上运行它。在我的工作计算机上,使用相同的代码创建图形并用相同的数据填充它,但没有出现错误。因为我在度假,我无法访问我的工作电脑来比较版本,但这两个系统都是在夏天安装的,所以版本很可能是相同的

问题 我不知道这是python arango还是ArangoDB的问题。我认为,因为TTL增加时没有问题,它可能表明Arangodb存在问题,而不是Python驱动程序,但我不知道

(我已经添加了一个特性请求,将ttl参数添加到
.all()
-方法。)

对为什么会发生这种情况有什么见解吗



我没有代表来创建标记“python arango”,因此如果有人创建它并标记我的问题,那就太好了。

在服务器内部,简单的查询将被转换为
all()
。 正如在引用的github问题上所讨论的,简单查询不支持
TTL
参数,也不会得到它们

这里首选的解决方案是在客户机上使用AQL查询,以便您可以指定TTL参数

一般来说,您应该避免一次从数据库中提取所有文档,因为这可能会引入其他缩放问题。您应该将适当的AQL与索引支持的
FILTER
语句一起使用(使用
explain()
重新验证)来获取所需的文档

如果需要遍历数据库中的所有文档,请使用分页。这通常是通过将范围
过滤器
限制
子句相结合来实现的最佳方法:

FOR x IN docs
  FILTER x.offsetteableAttribute > @lastDocumentWithThisID
  LIMIT 200
    RETURN x
FOR x IN docs
  FILTER x.offsetteableAttribute > @lastDocumentWithThisID
  LIMIT 200
    RETURN x