首页 > 解决方案 > 集群配置的 ArangoDB AQL 优化

问题描述

具有类似的数据结构

Departure -> Trip -> Driver

在 Trip 存储库中使用ArangoDB Spring Data派生查询,例如findByDriverIdNumberAndDepartureStartTimeBetween( String idNumber, String startTime, String endTime )导致 AQL 查询,例如

WITH driver, departure 
FOR e IN trip 
    FILTER 
    (FOR e1 IN 1..1 OUTBOUND e._id tripToDriver FILTER e1.idNumber == '999999-9999' RETURN 1)[0] == 1 
    AND 
    (FOR e1 IN 1..1 INBOUND e._id departureToTrip FILTER e1.startTime >= '2019-08-14T00:00:00' AND e1.startTime <= '2019-08-14T23:59:59' RETURN 1)[0] == 1  
    RETURN e

它在单个实例设置下执行良好(约 1 秒),但在使用 Kubernetes ArangoDB Operator 使用默认设置(3 个节点和协调器)设置集群后,查询时间增加了十倍,这可能是由于分片和多机通信以完成查询。

这种优化查询的尝试给出了更好的结果,查询时间大约为 3 到 4 秒:

WITH driver, departure
FOR doc IN trip

    LET drivers = (FOR v IN 1..1 OUTBOUND doc tripToDriver RETURN v) 
    FILTER drivers[0].idNumber == '999999-9999'

    LET departures = (FOR v in 1..1 INBOUND doc departureToTrip RETURN v) 
    FILTER departures[0].startTime >= '2019-08-14T00:00:00' AND departures[0].startTime <= '2019-08-14T23:59:59'

    RETURN doc

但是我可以进一步优化集群设置的查询,以接近一秒的单实例查询时间吗?

标签: arangodbaql

解决方案


推荐阅读