概述
BATCH子句将数据划分为小批进行处理,并自动将每批数据收集到一个数组中,后续子句按顺序依次处理这些数组。BATCH子句有利于处理可能使内存资源不堪重负甚至系统崩溃的大型图集,虽然它会导致轻微的性能损失,却能显著降低内存使用量。当将大量起始节点传递到路径查询中时,BATCH子句尤其适用,可以保证高效稳定的查询执行。
语法
BATCH子句应该紧接着别名的定义,中间只允许使用LIMIT或SKIP子句:
`<clause>` as `<alias>` `<LIMIT/SKIP clause?>` BATCH `<batch-size>`
`<clause>`
其中<batch-size>
是每批中的数据量。
示例
find().nodes({@post}) as nodes LIMIT 1000 BATCH 100
khop().n(nodes as a).le()[2].n() as b
GROUP BY a
WITH avg(b.length) as len
RETURN a._uuid, len ORDER BY len DESC LIMIT 10
这个语句将1000个@post节点分为10批,每批包含100个节点。每批中的节点自动被收集到一个数组并传递给khop()
查询,这个查询会依次执行10次。接着,khop()
查询的结果会被合并用于后续子句。
find().nodes({@user.age_level == 4}) as users
BATCH 100
n(users).e().n({@ad} as ads)
GROUP BY ads.cate
RETURN table(ads.cate, count(ads.cate))
这个语句将所有年龄级别为4的@user节点分批,每批包含100个节点。每批中的节点自动被收集到一个数组并传递给路径查询,这个查询会依次执行多次。接着,路径查询的结果会被合并用于后续子句。