gpt4 book ai didi

python - 为什么 ArangoDB(使用 Python-Arango)返回 ERR 1600 ERROR_CURSOR_NOT_FOUND?

转载 作者:行者123 更新时间:2023-12-01 09:11:41 24 4
gpt4 key购买 nike

问题

我迭代整个顶点集合,例如journals,并使用它来创建从 person 到给定 journal 的边缘,author

我使用python-arango代码如下:

for journal in journals.all():
create_author_edge(journal)

我有一个相对较小的数据集,并且 journals 集合只有 ca。 1300 个文档。但是:这超过 1000,这是 Web 界面中的批量大小 - 但我不知道这是否相关。

问题是它引发了 CursorNextError ,并从数据库返回 HTTP 404ERR 1600,即 ERROR_CURSOR_NOT_FOUND error :

Will be raised when a cursor is requested via its id but a cursor with that id cannot be found.

对原因的见解

来自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()-方法 here 。)

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

<小时/>

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

最佳答案

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

此处的首选解决方案是在客户端上使用 AQL 查询,以便您可以指定 TTL 参数。

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

如果需要迭代数据库中的所有文档,请使用分页。这通常是通过将范围 FILTERLIMIT 子句相结合来实现的最佳方式:

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

关于python - 为什么 ArangoDB(使用 Python-Arango)返回 ERR 1600 ERROR_CURSOR_NOT_FOUND?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51613789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com