我正面臨查詢性能問題。如果我在這裏犯了什麼錯誤,請告訴我。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