Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Neo4j中的性能_Java_Performance_Neo4j - Fatal编程技术网

Java Neo4j中的性能

Java Neo4j中的性能,java,performance,neo4j,Java,Performance,Neo4j,我有一个包含2.217.731个节点和3.127.475个关系的数据库,其中节点是不同的设备,它们之间的关系类似于“连接到”、“在内部”等 我正在尝试遍历图形以查找特定节点。在塞弗看来 MATCH (n:Equipment)<-[IS_INSIDE*]-()<-[CONNECTED_TO*]-(m:Cable) where n.name = "name" RETURN m MATCH(n:Equipment)如果必须遍历整个图形,那么这将很慢。如果这是一个常见的查询,请考虑

我有一个包含2.217.731个节点和3.127.475个关系的数据库,其中节点是不同的设备,它们之间的关系类似于“连接到”、“在内部”等

我正在尝试遍历图形以查找特定节点。在塞弗看来

    MATCH (n:Equipment)<-[IS_INSIDE*]-()<-[CONNECTED_TO*]-(m:Cable) where n.name = "name" RETURN m

MATCH(n:Equipment)如果必须遍历整个图形,那么这将很慢。如果这是一个常见的查询,请考虑在OuttMut.NoRead上创建索引,这可以在NeN4J 2.0.0里程碑中实现。然后它只需在索引中查找匹配的名称(基本上是一个哈希表),然后检查匹配节点周围的模式——这将非常快。请参见

请在设备节点的属性上为名称创建索引

CREATE INDEX ON :Equipment(name)
然后请尝试以下优化查询

MATCH (n:Equipment { name: "name" }),
      (n)<-[IS_INSIDE*]-(x),
      (x)<-[CONNECTED_TO*]-(m:Cable)
RETURN m
匹配(n:设备{name:“name”}),

(n) 首先要认识到,在GraphDB中,性能主要取决于您构建的模型类型和各种节点(您的案例中的设备和电缆)的基数。 通常,使用PROFILE和EXPLAIN查询将获得有关查询性能的信息性见解,包括数据库点击次数和所需时间。基于较低的数据库命中数选择查询是有利的

接下来,让我们先看看您使用的查询:

MATCH (n:Equipment)<-[IS_INSIDE*]-()<-[CONNECTED_TO*]-(m:Cable) 
where n.name = "name" 
RETURN m

MATCH(n:设备)你能上传你的图表吗?你在每一级有多少个节点?例如,n.name的链接中有多少是_?多少电报?谢谢你的回答,我不知道这件事。但在我描述的情况下,它对我没有帮助,因为我不使用cypher查询Neo4j,我使用Java核心api。我只是想通过编写等价的cypher查询来解释我想要做什么会更容易。无论如何,谢谢你,它对我将来会很有用。是的,这个查询将被大量使用。我对算法做了一些改进,避免了检查具有相同端点的路径,访问的节点数量显著减少,现在它运行了约20秒。然而,索引并没有帮助我。我使用BatchInserterIndexProvider。除Equipment.name上的索引外,我还将连接的_上的索引放在Port和toport的关系属性上。通过查看数据库文件,我可以看到索引已经建立,但时间没有改变。
MATCH (n:Equipment)<-[IS_INSIDE*]-()<-[CONNECTED_TO*]-(m:Cable) 
where n.name = "name" 
RETURN m
MATCH (n:Equipment)<-[IS_INSIDE*]-(:Equipment)
MATCH (n:Equipment)<-[IS_INSIDE*]-()