【问题标题】:ArangoDB PerformanceArangoDB 性能
【发布时间】:2020-07-30 23:53:59
【问题描述】:

我正在探索将 Arangodb 作为图形引擎用于我正在从事的需要最短路径分析的项目。

我的收藏是这样的:

  • 边集合中约 350 万边的路由网络 (_to/_from)
  • 一个顶点集合 ~270 万个顶点([lat,lng] 上的地理索引)。
  • 带有开始/结束位置(未映射到节点)的行程集合。

第一个任务是将旅行的起点和终点坐标捕捉到网络上的顶点。我正在使用以下查询来做到这一点:

FOR t IN trips
    let snappedFrom = (
        FOR x IN nodes
          SORT GEO_DISTANCE([t.Orig_Long, t.Orig_Lat], [x.lng, x.lat]) ASC
          LIMIT 1
          RETURN x._id
        )[0]
    let snappedTo = (
        FOR x IN nodes
          SORT GEO_DISTANCE([t.Dest_Long, t.Dest_Lat], [x.lng, x.lat]) ASC
          LIMIT 1
          RETURN x._id
        )[0]
    UPDATE t._key WITH {snappedFrom,snappedTo} IN trips

这大约需要 3.5 小时,如果可能的话,我想显着减少。

我在一个具有 32GB RAM 和 8 个内核的 AWS 实例上运行。我注意到在运行这个查询时,它只使用了一个核心,这让我很生气。

我很好奇设置 arangodb 以获得纯粹的性能。我的用例实际上是使用数据库作为计算器。事实上,完成后它很可能会成为 CI/CD 工作流程的一部分。我在那里不需要任何安全卫士,不会有任何并行的用户请求,如果数据不好,我就把它吹走,重新开始。

我正在使用标准的 docker 安装

docker run -it --name=adb --rm -p 8528:8528 -v arangodb:/data -d -v /var/run/docker.sock:/var/run/docker.sock arangodb/arangodb-starter --starter.address=<$IP> --starter.mode=single

当我在所有行程中运行shortest_path 时,我也会遇到同样的问题,如果是单核,这将永远存在。

任何有关配置、更好的查询甚至更好的 AWS 设置的帮助都将不胜感激。

【问题讨论】:

  • 有人提到使用 DISTANCE 而不是 GEO_DISTANCE,但几乎没有区别
  • 还建议创建一个简单的脚本来安排多个查询(每个 CPU 一个),因为每个查询都在自己的 CPU 中运行。就像使用 LIMIT 子句为每个查询安排 trip_count/cpu_count 一样简单。

标签: docker arangodb


【解决方案1】:

OrigDest 字段上添加Geo-Spatial Indexes ,这将使服务器能够优化/加速子查询

为了进一步加快批量运行主查询的处理速度,处理更多的小批量比一次运行所有文档要快

【讨论】:

  • 我不明白为什么循环集合上的索引会有所帮助,但我会尝试一下,但肯定任何值得其盐分的优化器都能够为我批量处理该查询。我无法手动完成该任务。这意味着我必须知道我正在运行的硬件(CPU 数量)等等。这太疯狂了。虽然我完全同意它会起作用。
  • 检查Query for Sorted Results near Origin,这正是您的用例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多