我正在探索使用Arangodb作为一个需要最短路径分析的项目的图形引擎。
我的收藏品是这样的:
第一项任务是抓取网络上到达顶点的旅行的原点和目的地坐标。我使用以下查询来执行此操作:
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小时,如果可能的话,我想大大减少。
我正在运行一个具有32 on和8核的AWS实例。我注意到,在运行此查询时,它只使用了一个核心,这会使我丧命。
我很好奇,为了纯粹的表演,我要建立一个“无神论者”。我的用例实际上是使用DB作为计算器。事实上,这很可能是CI/CD工作流程的一部分。我不需要任何安全保护,不会有任何并行用户请求,如果数据是坏的,我只是吹掉它,然后重新开始。
我使用的是一个标准安装的码头。
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设置将是真正的感谢。
发布于 2020-07-31 05:28:49
将Geo-Spatial Indexes 添加到Orig和Dest字段中,这将使服务器能够优化/加速子查询。
为了进一步加快批处理运行主查询的速度,处理更小的批处理比一次运行所有文档更快。
https://stackoverflow.com/questions/63183014
复制相似问题