【问题标题】:ArangoDB update query never completesArangoDB 更新查询永远不会完成
【发布时间】:2015-08-11 23:37:41
【问题描述】:

我正在试用 ArangoDB,但遇到了一些问题。我成功导入了大约 130 万个文档,我正在尝试重新排列数据库中的文档数据,但是以下查询(通过 Arango shell 运行)只会减慢 Arango 的爬行速度,直到最终 shell 给我一个错误:[ArangoError 2001: Error reading from: 'tcp://127.0.0.1:8529' 'timeout during read']

FOR d IN DocumentCollection
    UPDATE d WITH {'uid': d.property1.property2} IN DocumentCollection

这个查询应该有效吗?难道我做错了什么?有什么方法可以加快速度吗?

【问题讨论】:

  • 查询本身看起来没问题(除了末尾的分号,这会引发解析错误)。如果它没有在合理的时间内完成,我猜系统是 I/O 绑定的,可能是因为它的 RAM 不足和交换。如果您可以配置您的系统以使更新也适合 RAM,那可能会有所帮助。

标签: database arangodb


【解决方案1】:

它(仍在)工作。 您可以使用the queries Module 来观察查询的运行情况。

您可以使用 --server.request-timeout - 选项让 arangosh 更耐心地等待。

这里的性能问题是,必须将整个集合加载到内存中才能执行此操作 - 因为它不能在内部(目前)分块。 如果您能够使用 FILTER 和范围将其拼接成一系列查询,那么您可能会更快地达到目标。

【讨论】:

  • 谢谢,你是对的,它最终完成了。超时错误后shell再次给你一个命令提示符有点令人困惑。现在要找出拆分查询的最佳方法...
  • 看起来这样的更新查询将在 2.7 中自动优化:github.com/arangodb/arangodb/commit/…
  • 经过数小时的反复试验,我设法在 Windows 上编译了 devel。我创建了 100k 个随机文档,然后使用 AQL 以不同的方式更新它们。与 2.6.4 相比,如果为每个文档添加静态属性,速度最高可提高 8 倍,如果动态创建新属性名称并将 RANDOM_TOKEN()/DATE_NOW() 分配为内容,则速度提高约 5 倍,如果将旧值用于计算新值。所以通常是一个很好的加速。不过,它需要进行一些更深入的基准测试,以了解它在不同条件下的表现如何,例如集合大小和文档复杂性。
  • 更新听起来很棒!等不及了。我现在正在尝试一个不同的查询,它终于在 12 小时后完成......但之后 Arango 仍在处理某些事情并且非常慢: .current() 什么都不返回,但磁盘使用率仍然很高。还有其他方法可以检查 Arango 的工作吗?
  • 您可以使用top -c <pid of arango> 并按M 按已用内存排序,最后按H 显示线程。它们以实际工作范围命名 - 这可能会提供更多见解。
猜你喜欢
  • 1970-01-01
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 2017-01-27
  • 1970-01-01
相关资源
最近更新 更多