Bagaimana cara menghapus / membuat database di Neo4j?

104

Apakah mungkin untuk membuat / menghapus database yang berbeda di database grafik Neo4j seperti di MySQL? Atau, setidaknya, bagaimana cara menghapus semua node dan hubungan dari grafik yang ada untuk mendapatkan pengaturan yang bersih untuk pengujian, misalnya, menggunakan perintah shell yang mirip dengan rmrelatau rm?

rmv
sumber

Jawaban:

98

Anda bisa menghapus seluruh direktori grafik dengan rm -rf, karena Neo4j tidak menyimpan apapun di luar itu:

rm -rf data/*

Selain itu, Anda tentu saja dapat melakukan iterasi melalui semua node dan menghapus hubungan mereka dan node itu sendiri, tetapi itu mungkin terlalu mahal hanya untuk pengujian ...

Peter Neubauer
sumber
7
Dan jika Anda melakukan iterasi pada semua node, sebaiknya biarkan node referensi tetap ada.
nawroth
6
Di mana letak direktori grafik?
Pramod
3
@Pramod ada di direktori data di direktori neo4j. Anda tidak dapat melewatkannya
devshorts
7
Di MacOSX dengan homebrew: /usr/local/Cellar/neo4j/community-1.9.2-unix/libexec/data
Ashley
5
Mungkin ide yang bagus untuk menghentikan server neo4j Anda sebelum melakukan perintah ini.
John Bachir
98

bahkan perintah yang lebih sederhana untuk menghapus semua node dan hubungan:

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
John Bachir
sumber
11
1 untuk pernyataan itu. Namun perlu diketahui, hanya karena Anda menghapus semua node, tidak berarti label yang Anda gunakan benar-benar dilupakan. Browser masih akan menampilkan semua label. Ditto untuk properti node dan label hubungan.
Dilum Ranatunga
@DilumRanatunga 1. Apakah Anda tahu cara membuat neo melupakan label? 2. bagaimana properti node dapat bertahan jika node dihapus, atau label hubungan tetap ada dari hubungan tersebut dihapus?
John Bachir
1
Maksud saya bukan nilai sebenarnya; Maksud saya nama properti itu sendiri.
Dilum Ranatunga
5
mungkin tidak hanya ada node dan edge, tetapi juga indeks di DB, dan lebih sulit untuk membuangnya. juga, saya baru saja berhasil merusak instans DB dengan pengujian berulang besar-besaran termasuk penghapusan dan sepertinya secara fisik menghapus file DB dan membuat Neo4J membuatnya kembali saat restart membawa peningkatan kinerja yang jelas.
mengalir
Saya kehabisan memori di neo4j di kontainer buruh pelabuhan.
bolec_kolec
52

Dari Neo4j 2.3,

Kami dapat menghapus semua node dengan hubungan ,

MATCH (n)
DETACH DELETE n

Saat ini tidak ada opsi untuk membuat beberapa database di Noe4j. Anda perlu menyimpan banyak data Neo4j. Lihat referensi .

Somnath Muluk
sumber
3
Jawaban terbaik jika Anda tidak ingin menggunakan sistem file.
ThomasH
Masalah dengan pendekatan ini adalah bahwa ia tidak akan menghapus Batasan atau indeks
Davide
47

Membuat Database baru di Neo4j

Sebelum Memulai komunitas neo4j klik opsi jelajahi

masukkan deskripsi gambar di sini

dan pilih direktori lain

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

dan klik tombol start.

masukkan deskripsi gambar di sini

Database baru dibuat di direktori itu

Bharathiraja
sumber
12

cara cepat dan kotor yang berfungsi dengan baik:

bin/neo4j stop
rm -rf data/
mkdir data
bin/neo4j start
Scott
sumber
11

Bagi siapa pun yang membutuhkan grafik bersih untuk menjalankan rangkaian pengujian - https://github.com/jexp/neo4j-clean-remote-db-addon adalah ekstensi yang bagus untuk memungkinkan pembersihan db melalui panggilan REST. Namun, jelaslah, jangan menggunakannya dalam produksi!

Matt Luongo
sumber
Tampaknya menghapus node 0. Bagaimana cara membuatnya kembali?
Akankah
1
Sebenarnya, ini melewatkan node referensi ( github.com/jexp/neo4j-clean-remote-db-addon/blob/master/src/… ). Tetapi jika node referensi Anda hilang (dan Anda membutuhkannya) Anda harus mulai dengan dir data yang bersih, karena belum ada setRefenceNode()panggilan ( stackoverflow.com/questions/7186832/… ).
Matt Luongo
7

Jalankan kode pengujian Anda pada instance neo4j yang berbeda.

  1. Salin direktori neo4j Anda ke lokasi baru. Gunakan ini untuk pengujian. cd ke direktori baru.
  2. Ubah port sehingga Anda dapat menjalankan pengujian dan menggunakannya secara normal secara bersamaan. Untuk mengubah port terbuka conf/neo4j-server.propertiesdan diatur org.neo4j.server.webserver.portke yang tidak digunakan.
  3. Mulai server pengujian saat penyiapan. Lakukan ./neo4j stopdan rm -rf data/graph.dbdirobohkan.

Untuk lebih jelasnya lihat neo4j: Bagaimana Cara Mengganti Database? dan dokumennya .

Pramod
sumber
6

Di Neo4j 2.0.0,? tidak lagi didukung. Gunakan OPSIONAL MATCH sebagai gantinya:

START n=node(*)
OPTIONAL MATCH (n)-[r]-()
delete n,r;
charles
sumber
6

Jawaban termudah adalah: TIDAK

Cara terbaik untuk "memulai kembali" adalah dengan

  • pindah ke folder data kosong lainnya

atau

  • tutup Neo4j sepenuhnya
  • kosongkan folder data lama
  • restart Neo4j dan atur folder kosong sebagai folder data

Ada cara untuk menghapus semua node dan hubungan (seperti yang dijelaskan di sini )

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
pengguna3194532
sumber
1

Di 2.0.0 -M6 Anda dapat menjalankan skrip Cypher berikut untuk menghapus semua node dan relasi:

start n=node(*)
match (n)-[r?]-()
delete n,r
Martin Seeler
sumber
2
Sayangnya ini menghasilkan kesalahan dalam rilis 2.0.0 terbaru: SyntaxException: Tanda tanya tidak lagi digunakan untuk pola opsional - sebagai gantinya gunakan OPSIONAL MATCH (baris 1, kolom 26) ==> "mulai n = node (*) cocok (n ) - [r?] - () hapus n, r "
richj
Saya tidak mengerti downvote, karena jawabannya jelas dalam 2.0.0 -M6 , yang merupakan versi terbaru ketika saya menjawab pertanyaan, sementara yang lain memberikan jawaban yang benar untuk build terbaru saat ini .
Martin Seeler
1

Pada versi 3 saya yakin sekarang mungkin untuk membuat contoh database terpisah dan dengan demikian lokasinya sedikit berbeda.

Merujuk ke: https://neo4j.com/developer/guide-import-csv/

--Into retail.db jelas merupakan database target, yang tidak boleh berisi database yang sudah ada.

Di kotak Ubuntu saya, lokasinya ada di:

/var/lib/neo4j/data/databasesdi mana saat ini saya hanya melihat graph.dbyang menurut saya harus default.

Antony
sumber
0

Anda dapat menghapus file data Anda dan jika Anda ingin melalui cara ini, saya sarankan hapus hanya graph.db Anda, misalnya. Jika tidak, Anda akan mengacaukan info otentikasi Anda.

raeffray
sumber