2015-04-18 16 views
8

Cách tốt nhất để xóa đồ thị khỏi tất cả các nút và các mối quan hệ thông qua Cypher là gì?Cách tốt nhất để xóa tất cả các nút và mối quan hệ trong Cypher

Tại http://neo4j.com/docs/stable/query-delete.html#delete-delete-a-node-and-connected-relationships ví dụ

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

có lưu ý:

Truy vấn này không phải là để xóa một lượng lớn dữ liệu

Vì vậy, là sau tốt hơn?

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

MATCH (n) DELETE n 

Hoặc là có một cách khác đó là tốt hơn cho đồ thị lớn?

+0

tại http://stackoverflow.com/questions/14690522/deleting-all-nodes-and-relationships-in-neo4j-using-cypher-exceeds-heap-space họ đề nghị xóa toàn bộ thư mục cơ sở dữ liệu, nhưng tôi ' m quan tâm đến trường hợp GUI từ xa cần cung cấp cho người dùng một hành động để xóa biểu đồ (đặt lại trạng thái thành mặc định) –

Trả lời

12

Như bạn đã đề cập một cách dễ dàng nhất là dừng Neo4j, hãy thả thư mục data/graph.db và khởi động lại.

Xóa đồ thị lớn qua Cypher sẽ luôn chậm hơn nhưng vẫn có thể thực hiện nếu bạn sử dụng kích thước giao dịch phù hợp để ngăn chặn sự cố bộ nhớ (nhớ giao dịch được tích hợp trong bộ nhớ trước khi chúng được cam kết). Thông thường 50-100k hoạt động nguyên tử là một ý tưởng tốt. Bạn có thể thêm giới hạn vào câu lệnh xóa để kiểm soát kích thước tx và báo cáo lại số lượng nút đã bị xóa. Chạy lại bản Tuyên Bố này cho đến khi một giá trị từ 0 được trả về lại:

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

cảm ơn, đã thêm nhận xét của bạn vào https://zoomicon.wordpress.com/2015/04/18/howto-delete-all-nodes-and-relationship-from-neo4j-graph-database/ –

+0

Làm cách nào để bạn "thả" thư mục data/graph.db và khởi động lại? – NumenorForLife

+1

Vấn đề này được nêu ra trên trang web của Zoomicon: "Trong truy vấn cuối cùng của bạn, bạn tạo một sản phẩm chéo lớn. Tất cả các nút lần tất cả các mối quan hệ. lẽ sạch sau đó chia nó thành hai, xóa rels đầu tiên sau đó các nút" – NumenorForLife

5

Theo tài liệu chính thức here:

MATCH (n) 
DETACH DELETE n 

nhưng nó cũng nói This query isn’t for deleting large amounts of data. nên sử dụng tốt hơn với giới hạn.

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

Vì bạn đã đề cập đến DETACH, nó viết tại tài liệu mà bạn đã chỉ ra: "bạn không thể xóa một nút mà không xóa các mối quan hệ bắt đầu hoặc kết thúc trên nút đã được nói. Xóa rõ ràng các mối quan hệ hoặc sử dụng DETACH DELETE" –

3

Đã viết tập lệnh nhỏ này, thêm tập lệnh này vào thư mục NEO/bin của tôi.

Thử nghiệm trên cộng đồng v3.0.6

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

Tôi sử dụng nó khi nhập khẩu TẢI CSV của tôi là không hấp dẫn.

Hy vọng nó giúp

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

Trong chạy thử, xóa 50000 mối quan hệ, hoàn thành sau 589 ms.

+1

không được khuyến khích trên Stack Overflow vì chúng không đặc biệt hữu ích. Vui lòng cập nhật câu trả lời của bạn để giải thích cách giải quyết câu hỏi này và tại sao nó có thể là một lựa chọn tốt hơn so với câu trả lời được chấp nhận và được bình chọn. – FluffyKitten

+1

thực sự là thời gian để hoàn thành thông tin không phải là rất hữu ích nếu nó không phải là so sánh với thời gian lựa chọn thay thế khác để hoàn thành trên cùng một máy (với cơ sở dữ liệu ban đầu là như nhau mỗi lần) –

+0

cũng: owner_real_estate_relation không đi với " tất cả "các mối quan hệ trong câu hỏi –

Các vấn đề liên quan