web-dev-qa-db-ja.com

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

または、大きなグラフに適した別の方法はありますか?

14
George Birbilis

最も簡単な方法は、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
20

公式ドキュメントによると 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;  
11
AXE

この小さなスクリプトを書いて、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インポートが不安定な場合に使用します。

それが役に立てば幸い

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

テスト実行では、50000の関係が削除され、589ミリ秒後に完了しました。

0
BazSTR