我正面临查询性能问题。如果我在这里犯了什么错误,请告诉我。neo4j查询性能需要很长时间
我创建了大约1700个(路由器节点)和大约4000个(接口节点),其中接口使用关系(has_interface)连接到各自的路由器。
现在我想创建这些接口之间的链接。链接将是一种关系。每个接口都有一个与之关联的IfIPAddress属性。 当我尝试使用此查询创建链接时,它运行很长时间,占用大量CPU,然后不创建任何链接。 这里是我的查询
MATCH (I:Interface), (I2:Interface)
FOREACH(p in FILTER(z in {props} WHERE z.OrigIPAddress = I.IfIPAddress and z.TermIPAddress = I2.IfIPAddress) |
MERGE (:Interface {IfIPAddress:p.OrigIPAddress})-[r:link]->(:Interface {IfIPAddress:p.TermIPAddress})
ON CREATE SET r = p
ON MATCH SET r = p)
以下是我提供了使用JSON来的Neo4j和卷曲
{
"params" : {
"props" : [
{
"AreaId" : "",
"OrigIPAddress" : "172.16.42.9",
"OrigNodeID" : "192.168.1.221",
"TermIPAddress" : "172.16.42.10",
"TermNodeID" : "10.229.140.28",
"eEntityStatus" : "1",
"iTotalBW" : "0"
}
]
},
"query" : "MATCH (I:Interface), (I2:Interface) FOREACH(p in FILTER(z in {props} WHERE z.OrigIPAddress = I.IfIPAddress and z.TermIPAddress = I2.IfIPAddress) | MERGE (:Interface {IfIPAddress:p.OrigIPAddress})-[r:link]->(:Interface {IfIPAddress:p.TermIPAddress}) ON CREATE SET r = p ON MATCH SET r = p)"
}
这是我在查询 首先在我删除这些链接的过滤器正在做其中的OrigIPAddress或TermIPAddress不在neo4j中 之后,对于每个道具,我在这些接口之间创建一个链接。
我正在使用neo4j 2.1。当Neo4j的服务器按照默认配置运行它给了错误的“OutOfMemory例外”
我增加了服务器的堆大小,它是采取了很多时间
让我知道如果有什么我已经错过了。 如果您需要日志,请告诉我。
在您的查询中,根据我的理解,如果原始地址不存在,我不想要查询目的是创建链接而不是接口,则第一次合并将创建接口(I)。 我想在r中设置所有的道具,但我不认为这会影响太多,因为它只是设置。 嗯,我只尝试过一个元素,它花了很多时间。虽然道具元素的数量约为10000-20000 – Nipun
我试过你的查询和相同的结果。 在消息中。记录这是唯一重复多次的消息。 2014-04-09 11:38:57.155 + 0000 WARN [onkEmbeddedGraphDatabase]:GC Monitor:应用程序线程被阻塞了额外的7971ms [总阻塞时间:143.898s 这些都是我已经改变了\加 最大堆4096 MB org.neo4j.server.transaction.timeout = 5000 neostore.nodestore.db.mapped_memory = 90M neostore.relationshipstore.db.mapped_memory = 3G neostore.propertystore.db.mapped_memory = 90M neostore.propertystore.db.strings.mapped_memory = 130M neostore.propertystore.db.arrays.mapped_memory = 130M – Nipun
另外,添加我的Web控制台在我运行这些查询时停止工作。 它显示红色的错误说“断开......请检查您的插座...类似的东西” – Nipun