neo4j - 如何使用 Neo4j Cypher APOC 并行处理
问题描述
我们有很多 (n1:EffortUser)-[r1:EFFORT]->(n2:EffortObject) 需要按日和周统计,即有多少 EffortObject:Email 发送了 EffortUser。如果您有很多用户和电子邮件,这可能需要相当长的时间,所以我们希望并行化此查询。
现在我们正在使用:
match(n1:EffortUser)-[r1:EFFORT]-(n2:EffortObject)
where r1.Effort = 'yes' and r1.TimeEvent>='2017-01-01' and r1.TimeEvent<='2017-12-31'
return distinct n1.Name as User, date(datetime(r1.TimeEvent)) as date, count(distinct r1.IdUnique) as count
order by user, date
似乎有一些选项可以并行化/优化它,但所有的文档都很少。
我做了一些研究,发现了以下 APOC 函数,但尽我所能,我无法让它们工作(而且我在 Stackoverflow 上也找不到很多东西)。以下哪个选项是最好的,包括。使用上述示例代码的示例?这让我发疯。我们有 4 个内核和 32 GB 内存,所以它应该运行得很快,但我就是无法让它工作。
https://neo4j.com/docs/labs/apoc/current/cypher-execution/
CALL apoc.cypher.runMany('cypher;\nstatements;',{params},{config})
运行每个分号分隔的语句并返回摘要 - 目前没有模式操作
CALL apoc.cypher.mapParallel(fragment, params, list-to-parallelize) yield value
并行批处理执行片段,并将列表段分配给_
https://neo4j.com/docs/labs/apoc/current/cypher-execution/running-cypher/
apoc.cypher.mapParallel(fragment :: STRING?, params :: MAP?, list :: LIST? OF ANY?) :: (value :: MAP?)
apoc.cypher.mapParallel(fragment, params, list-to-parallelize) yield value - 以并行批次执行片段,并将列表段分配给_
apoc.cypher.mapParallel2(fragment :: STRING?, params :: MAP?, list :: LIST? OF ANY?, partitions :: INTEGER?, timeout = 10 :: INTEGER?) :: (value :: MAP?)
apoc.cypher.mapParallel2(fragment, params, list-to-parallelize) yield value - 以并行批次执行片段,并将列表段分配给_
apoc.cypher.parallel(fragment :: STRING?, params :: MAP?, parallelizeOn :: STRING?) :: (value :: MAP?)
apoc.cypher.parallel2(fragment :: STRING?, params :: MAP?, parallelizeOn :: STRING?) :: (value :: MAP?)
apoc.cypher.runMany(cypher :: STRING?, params :: MAP?, config = {} :: MAP?) :: (row :: INTEGER?, result :: MAP?)
apoc.cypher.runMany('cypher;\nstatements;',{params},[{statistics:true,timeout:10}]) - 运行每个分号分隔的语句并返回摘要 - 目前没有模式操作
解决方案
推荐阅读
- c++ - 堆分配的对象是否有一个永不为空的唯一所有者?
- javascript - 更改事件 oninput typescript 的值
- python - 想要在折线图中设置 y 轴标签值
- python - 拒绝麦克风访问
- angular - 行正在添加,而动态列正在使用 Angular 8 添加到 Mat-Table
- javascript - 我如何包含一个数组?
- javascript - 为什么当我向下滚动时画布下方有空白
- python - 想知道 PIL liarary 中 Image.resize 操作的详细情况
- mysql - MySQL 返回列中每个值的总 COUNT
- java - java @Autowired 返回空值。不能让弹簧工作