2014-09-26 97 views
1
MERGE (n : Person { id : 1000) 
MERGE (m : Item { id : 2000}) 
SET m.name ='xyz' 
MERGE (n)-[r:Buy]->(m) 

我想這種類型的數據(約10K +)上傳到的Neo4j但MERGE查詢變得很慢執行,因爲對於每個合併它所需要的節點空間的全掃描驗證給定屬性不存在其他項目。Neo4j的MERGE查詢

有什麼辦法解決這個問題嗎?

+0

你對人的約束或索引。 id和Item.id? – 2014-09-26 06:07:28

+0

我嘗試了CREATE CONSTRAINT ON(person:Person)ASSERT person.id IS UNIQUE CREATE CONSTRAINT ON(item:Item)ASSERT item.id IS UNIQUE,但隨着數據的增長,它的速度再次下降.. CREATE INDEX ON:Person (id) CREATE INDEX ON:Item(id) – Sreejithc321 2014-09-27 06:55:39

回答

0

如果您對:Person:Item節點的id屬性定義了唯一約束,則這些節點將變爲索引並且將被更有效地掃描。

你需要看起來像這樣的語法:

CREATE CONSTRAINT ON (person:Person) ASSERT person:id IS UNIQUE 
CREATE CONSTRAINT ON (item:Item) ASSERT item:id IS UNIQUE 

你可以找到更多關於這裏唯一約束:

http://docs.neo4j.org/chunked/stable/query-constraints.html

+0

我嘗試了CREATE CONSTRAINT ON(person:Person)ASSERT person.id IS UNIQUE CREATE CONSTRAINT ON(item:Item)ASSERT item.id IS UNIQUE也CREATE INDEX ON:Person( id) CREATE INDEX ON:Item(id),但隨着數據增長,其速度會減慢。 – Sreejithc321 2014-09-27 06:56:42

+0

您運行此計算機的計算機的規格是什麼?您合併了多少個節點,並且您是在單個Cypher語句中還是在多個語句中執行它們? – 2014-09-27 07:58:35

+0

我們使用的是一箇中等的EC2實例,原始文件位於S3(採用JSON格式),我們的python程序從S3獲取記錄並將其寫入Neo(在EC2中)密碼爲 - neoBatch.append_cypher(「MERGE(n :person {id:'「+ usrId +''})MERGE(m:Item {id:'」+ lik [0] +「'})SET m.name ='」+ lik [1] +「'SET m .category ='「+ lik [2] +」'MERGE(n) - [r:Like {name:'Like'}] - >(m)「) \t \t neoBatch.submit() – Sreejithc321 2014-09-28 07:59:56