arangodb - 集群配置的 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
但是我可以进一步优化集群设置的查询,以接近一秒的单实例查询时间吗?
解决方案
推荐阅读
- python-3.x - 将行中的值分隔为单独的列
- pyspark - Pyspark 日期 yyyy-mmm-dd 转换
- angularjs - AngularJs 如何在引导模式中调用 ng-click?
- c++ - 运算符<<的两阶段查找
- vba - Excel VBA 循环在小数据集上运行良好,但在大数据集上花费的时间呈指数增长
- angular - 如何在 Angular 表单中管理非必要/派生数据
- excel - “VBA。” 前缀,例如 VBA.Randomize 与 Randomize,有什么区别?
- python - metasploit python有效负载代码错误
- python - 为什么我的 Python POST 调用返回 404?
- jquery - jQuery 在联系表单中提供 Url