2015-04-18 120 views
8

通過Cypher從所有節點和關係中清除圖形的最佳方法是什麼?刪除Cypher中所有節點和關係的最佳方法

http://neo4j.com/docs/stable/query-delete.html#delete-delete-a-node-and-connected-relationships的例子

MATCH (n) 
OPTIONAL MATCH (n)-[r]-() 
DELETE n,r 

有注:

這查詢不刪除大量數據

所以,在下面的更好呢?

MATCH()-[r]-() DELETE r 

MATCH (n) DELETE n 

還是有另一種方式,是對大圖好?

+0

at http://stackoverflow.com/questions/14690522/deleting-all-nodes-and-relationships-in-neo4j-using-cypher-exceeds-heap-space他們建議刪除整個數據庫目錄,但我' m對遠程GUI的情況感興趣,需要爲用戶提供清除圖的操作(復位狀態爲默認值) –

回答

12

正如你所提到的,最簡單的方法是停止Neo4j,刪除data/graph.db文件夾並重新啓動它。

如果使用合適的事務大小來防止內存問題(記住事務在提交之前首先在內存中建立),那麼通過Cypher刪除大圖將總是較慢但仍然可行。典型的50-100k原子操作是個好主意。您可以爲刪除語句添加限制,以控制tx大小並報告已刪除多少個節點。請重新運行該語句,直到返回一個0值回:

MATCH (n) 
OPTIONAL MATCH (n)-[r]-() 
WITH n,r LIMIT 50000 
DELETE n,r 
RETURN count(n) as deletedNodesCount 
+0

謝謝,您的評論添加到https://zoomicon.wordpress.com/2015/04/18/howto-delete-all-nodes-and-relationships-from-neo4j-graph-database/ –

+0

如何「drop」data/graph.db文件夾並重新啓動它? – NumenorForLife

+1

Zoomicon網站上提出了這個問題:「在最後一個查詢中,您創建了一個巨大的跨產品。 所有節點都計算了所有關係。 可能更乾淨,然後將其拆分爲兩個,首先刪除rels,然後刪除rels「 – NumenorForLife

5

根據官方文檔here

MATCH (n) 
DETACH DELETE n 

,但它也表示This query isn’t for deleting large amounts of data。所以最好使用限制。

match (n) 
with n limit 10000 
DETACH DELETE n; 
+0

由於您提到了DETACH,因此它會在您指向的文檔中寫入:「不刪除節點,也不刪除在所述節點上開始或結束的關係,或者顯式刪除關係,或使用DETACH DELETE」 –

3

寫了這個小腳本,將它添加到我的NEO/bin文件夾中。

測試在v3.0.6社區

#!/bin/sh 
echo Stopping neo4j 
./neo4j stop 
echo Erasing ALL data 
rm -rf ../data/databases/graph.db 
./neo4j start 
echo Done 

我使用它時,我的LOAD CSV進口糟糕。

希望它可以幫助

0
optional match (n)-[p:owner_real_estate_relation]->() with n,p LIMIT 1000 delete p 

在試運行,刪除50000個關係,後589毫秒完成。

+1

僅限代碼答案對堆棧溢出不鼓勵,因爲它們不是特別有用。請更新您的答案,以解釋如何解決這個問題,以及爲什麼它可能是一個更好的選擇,而不是接受的和最新的答案。 – FluffyKitten

+1

實際上完成信息的時間並不是非常有用,如果它不是與在同一臺機器上完成其他備選的時間進行比較(初始數據庫每次都是相同的) –

+0

也:owner_real_estate_relation不會與「所有「關係的問題 –

相關問題