小编Chr*_*ens的帖子

如何使用 Neo4j Cypher APOC 并行处理

我们有很多 (n1:EffortUser)-[r1:EFFORT]->(n2:EffortObject) 需要按天和周计算,即有多少 EffortObject:Email 做了 EffortUser SENT。如果您有很多用户和电子邮件可能需要相当长的时间,那么我们希望并行化此查询。

现在我们正在使用:

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
Run Code Online (Sandbox Code Playgroud)

似乎有几个选项可以并行化/优化它,但所有的文档都相当糟糕。

我做了一些研究,发现了以下 APOC 函数,但我可能无法让它们工作(而且我在 Stackoverflow 上也找不到太多东西)。以下哪个选项是最好的,包括 使用上述示例代码的示例?这让我发疯。我们有 4 个内核和 32 GB 的内存,所以这应该运行得非常快,但我就是无法让它工作。

https://neo4j.com/docs/labs/apoc/current/cypher-execution/

CALL apoc.cypher.runMany('cypher;\nstatements;',{params},{config})
Run Code Online (Sandbox Code Playgroud)

运行每个分号分隔的语句并返回摘要 - 当前没有模式操作

CALL apoc.cypher.mapParallel(fragment, params, list-to-parallelize) yield value
Run Code Online (Sandbox Code Playgroud)

并行批量执行片段,并将列表段分配给 _

https://neo4j.com/docs/labs/apoc/current/cypher-execution/running-cypher/

apoc.cypher.mapParallel(fragment :: STRING?, params :: MAP?, list :: LIST? OF ANY?) :: (value :: MAP?)
Run Code Online (Sandbox Code Playgroud)

apoc.cypher.mapParallel(fragment, params, list-to-parallelize) yield value …

parallel-processing neo4j cypher neo4j-apoc

5
推荐指数
0
解决办法
1047
查看次数

标签 统计

cypher ×1

neo4j ×1

neo4j-apoc ×1

parallel-processing ×1