Neo4j - 添加大量关系 - 性能

问题描述 投票:0回答:1

设置

我有一个 .NET 应用程序,它使用 Neo4j 客户端库在后端 Neo4j 数据库上执行 CRUD 操作。该数据库中的节点和关系代表公式和参数。

有两个节点标签:

BusinessRule
ChartField

对于每个

BusinessRule
节点,与
OUTPUTS
节点将有一个
ChartField
关系,并且与代表
USES
参数的其他
ChartField
节点可能存在一对多
BusinessRule
关系公式。

当用户完成所有规则的配置后,他们会发布更改,这将重建图表。

问题

我正在努力解决在图表中添加关系的性能问题。

在一次“发布”中,我可能有 3,000 个不同的

BusinessRule
。添加所有
BusinessRule
ChartField
节点的速度很快,并且性能不存在问题。

但是为 3,000 个

BusinessRule
中的每一个添加关系需要很长时间。

下面是 Cypher 查询的示例,它将添加单个

BusinessRule
的关系。它必须运行 3,000 次才能完成任务。 我确实在两种节点类型的
Id
属性上有一个索引。

MATCH (p1:BusinessRule {Id: '2025-BUDGET-10000184-11061345'})  
MATCH (t1:ChartField {Id: '2025-BUDGET-11061345'})  
MATCH (v1:ChartField {Id: '2025-BUDGET-11061472'})  
MATCH (v2:ChartField {Id: '2025-BUDGET-11062722'})  
CREATE (p1)-[:OUTPUTS {Type: 'OUTPUTS', TargetCFID: 11061345, BusinessRuleId: '2025-BUDGET-10000184-11061345'}]->(t1)  
CREATE (p1)-[:USES {Type: 'USES', ParamCFID: 11061472, BusinessRuleId: '2025-BUDGET-10000184-11061345'}]->(v1)  
CREATE (p1)-[:USES {Type: 'USES', ParamCFID: 11062722, BusinessRuleId: '2025-BUDGET-10000184-11061345'}]->(v2)

此查询通过匹配相关

BusinessRule
ChartField
节点来工作,其中 p1 是
BusinessRule
,t1 是目标
ChartField
节点,v* 是
ChartField
参数。 然后,我们可以添加关系。

有人对如何加快此过程有任何建议吗? 执行这个密码(3,000)次花了将近 22 分钟。

我考虑过将最多 100 个密码查询批量处理在一起,以节省来回的时间,但这有点复杂,因为别名必须都是唯一的。

在一些批处理测试中,我看到了一些改进,但没有什么显着的。

neo4j cypher neo4jclient
1个回答
0
投票

您应该能够使用单个查询轻松高效地创建关系。

假设您将所有输入数据传递到

$data
参数中,其值是地图列表,其中每个地图的格式为:

{p1: '2025-BUDGET-10000184-11061345', 
 t1: '2025-BUDGET-11061345', t1CFID: '...', t1Br: '...',
 v1: '...', v1CFID: '...', v1Br: '...',
 v2: '...', v2CFID: '...', v2Br: '...'}

那么您的更快查询将如下所示:

UNWIND $data AS d
MATCH (p1:BusinessRule {Id: d.p1})  
MATCH (t1:ChartField {Id: d.t1})  
MATCH (v1:ChartField {Id: d.v1})  
MATCH (v2:ChartField {Id: d.v2})  
CREATE (p1)-[:OUTPUTS {Type: 'OUTPUTS', TargetCFID: d.t1CFID, BusinessRuleId: d.t1Br}]->(t1)  
CREATE (p1)-[:USES {Type: 'USES', ParamCFID: d.v1CFID, BusinessRuleId: d.v1Br}]->(v1)  
CREATE (p1)-[:USES {Type: 'USES', ParamCFID: d.v2CFID, BusinessRuleId: d.v2Br}]->(v2)
© www.soinside.com 2019 - 2024. All rights reserved.