簡體   English   中英

Neo4J:創建關系時超出了GC開銷限制

[英]Neo4J: GC overhead limit exceeded when creating relationship

代碼是:

load csv with headers from "https://data.cityofnewyork.us/api/views/feu5-w2e2/rows.csv?accessType=DOWNLOAD" as row
create (n:Contact) set n=row;

load csv with headers from "https://data.cityofnewyork.us/api/views/tesw-yqqr/rows.csv?accessType=DOWNLOAD" as row
create (n:Building) set n=row;

create index on :Contact(RegistrationID);

create index on :Building(RegistrationID);

然后,當我嘗試建立關系時,它上升到了8GB的內存,並最終超時,應用程序使用以下方法終止:

MATCH (b:Building),(c:Contact)
where b.RegistrationID = c.RegistrationID
create (b)-[:CONTACTS_FOR]->(c)

Windows 7/64位i7-3770、32GB內存...

如果您的數據集很大,則您不想執行對整個標簽進行操作的任何查詢,幾乎可以保證在neo4j日志中看到內存峰值,超時以及最終出現OutOfMemory錯誤。 您應按以下順序執行這些查詢:

1)編制索引。

2)像這樣合並數據集之一並預先合並關系,並使用定期提交,這樣您就不必將整個結果保存在內存中[編輯:由於RegistrationID不是唯一屬性,請創建一個替代對象節點,以便可以預先建立部分關系]:

USING PERIODIC COMMIT 500
load csv with headers from "https://data.cityofnewyork.us/api/views/tesw-yqqr/rows.csv?accessType=DOWNLOAD" as row
CREATE (b:Building) SET b=row
MERGE (i:RegistrationID {RegistrationID: row.RegistrationID})
MERGE (b) - [:CONTACTS_FOR] -> (i)

3)然后,合並其他數據集。 您現有的索引將確保,如果您使用MERGE而不是CREATE ,那么將獲得上一步返回的已創建的RegistrationID節點:

USING PERIOD COMMIT 500
load csv with headers from "https://data.cityofnewyork.us/api/views/feu5-w2e2/rows.csv?accessType=DOWNLOAD" as row
CREATE (c:Contact) SET c = row
MERGE (i:RegistrationID {RegistrationID: row.RegistrationID})
MERGE (i) - [:CONTACT_FOR] -> (c)

要通過構建然后查詢聯系人,請使用*運算符,如下所示:

MATCH (b:Building) WHERE <whatever conditions you want>
WITH b
MATCH (b) <- [:CONTACT_FOR*2] - (c)
RETURN c

現在,如果您的數據已經存在並且您不想重新加載,則必須在查詢上使用SKIP和LIMIT一次僅處理一個塊:

MATCH (b:Building)
WITH b
SKIP 0
LIMIT 500
MATCH (c:Contact) WHERE c._id = b._id
MERGE (b) - [:CONTACTS_FOR] -> (c)

然后重復運行,每次將“跳過”和“限制”向上移動500。

即使您的機器理論上能夠處理這么大的查詢,但neo4j 它運行的JVM都設置了限制,可能會阻止您利用它。 嘗試提出一種解決方案,該解決方案使用很多小的迭代查詢而不是一個大的迭代查詢,通常效率更高。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM