Neo4J数据库性能



我们有一个Neo4J数据库(运行在企业版4.3.2上),它包含:

680万个节点的标签为itemA。25000个节点,标签为itemB。18个节点标签为itemC

每个标签为itemA的节点至少与一个标签为itemB的节点通过称为a_b的关系相关联。

每个节点与标签itemA与至少一个节点通过一个关系与标签itemC称为a_c

有7,000,000个a_b关系。有7000000个a_c关系。

标签为itemA的节点有一个属性prop1,它包含3个字符串值中的一个,每个字符串值的长度约为20个字符。prop1已被索引

下列查询及其结果:

<表类> 查询 持续时间(ms) tbody><<tr>match (a:itemA) return count(a)1match (b:itemB) return count(b)1match (a:itemA)-[r:a_b]->(b:itemB) count(a)1800 - 2200match (a:itemA)-[r:a_b]->(b:itemB) return a.prop1, count(a)10500 - 14000match (a:itemA)-[r:a_b]->(b:itemB), (a)-[r2:a_c]->(c:itemC) return count(a)14500match (a:itemA)-[r:a_b]->(b:itemB), (a)-[r2:a_c]->(c:itemC) return a.prop1, count(a)>20000

第三和第四个查询可以优化,因为您只计算节点度:

第三查询:

match (a:itemA)
WITH a,size((a)-[:a_b]->()) as degree
RETURN sum(degree) as result

第四查询:

match (a:itemA) return a.prop1, size((a)-[:a_b]->())    

第五个和第六个查询无论如何都会爆炸,因为你在计算共出现的次数,你可能会得到很大的结果。您可以使用PROFILE子句来检查引擎盖下面发生了什么。

相关内容

  • 没有找到相关文章

最新更新