You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ArangoDB社区版如何并行执行两个AQL查询?

在ArangoDB社区版中并行执行AQL查询的可行性与实现方法

可行,ArangoDB社区版支持并行执行多个AQL查询逻辑,无需按顺序运行。下面是具体实现方式和优化思路:

1. 用PARALLEL关键字实现并行执行

你可以把两个查询包装成子查询,放到PARALLEL的数组参数中,ArangoDB会自动并行处理这些子查询,而非按顺序执行。示例代码如下:

RETURN PARALLEL([
  // 统计转入交易数据
  (FOR d IN Transaction
    FILTER d._to == "Account/123" 
    COLLECT AGGREGATE length = COUNT_UNIQUE(d._id), 
                      totamnt = SUM(d.Amount),
                      daysactive = COUNT_UNIQUE(DATE_TRUNC(d.Time, "day"))
    RETURN { 
        "Incoming Accounts": length , 
        "Days Active": LENGTH(daysactive), 
        "Total Amount": totamnt 
    }),
  // 统计转出交易数据
  (FOR d IN Transaction
    FILTER d._from == "Account/123" 
    COLLECT AGGREGATE length = COUNT_UNIQUE(d._id), 
                      totamnt = SUM(d.Amount),
                      daysactive = COUNT_UNIQUE(DATE_TRUNC(d.Time, "day"))
    RETURN { 
        "Outgoing Accounts": length , 
        "Days Active": LENGTH(daysactive), 
        "Total Amount": totamnt 
    })
])

PARALLEL会并行执行数组内的每个子查询,最终返回包含两个查询结果的数组。

2. 更高效的优化方案:单次扫描集合

虽然并行执行能提升速度,但两次扫描Transaction集合会浪费资源。推荐改成一次扫描集合,同时统计转入和转出的数据,效率更高:

FOR d IN Transaction
FILTER d._to == "Account/123" || d._from == "Account/123"
COLLECT 
  transactionType = d._to == "Account/123" ? "Incoming" : "Outgoing"
AGGREGATE 
  uniqueCount = COUNT_UNIQUE(d._id),
  totalAmount = SUM(d.Amount),
  activeDays = COUNT_UNIQUE(DATE_TRUNC(d.Time, "day"))
RETURN {
  [transactionType + " Accounts"]: uniqueCount,
  "Days Active": LENGTH(activeDays),
  "Total Amount": totalAmount
}

这种方式只遍历一次集合,通过COLLECT按交易类型分组统计,在大数据集场景下性能优势更明显。

内容的提问来源于stack exchange,提问作者Chaitanya Srinevas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 14:45:32