Neo4j'de veritabanları nasıl silinir / oluşturulur?


104

Neo4j grafik veritabanında MySQL'deki gibi farklı veritabanları oluşturmak / silmek mümkün müdür ? Veya en azından, testler için temiz bir kurulum elde etmek için mevcut bir grafiğin tüm düğümleri ve ilişkileri nasıl silinir, örneğin rmrelveya benzeri kabuk komutlarını kullanarak rm?

Yanıtlar:


99

rm -rfİle tüm grafik dizinini kaldırabilirsiniz , çünkü Neo4j bunun dışında herhangi bir şey saklamıyor:

rm -rf data/*

Ayrıca, elbette tüm düğümleri yineleyebilir ve bunların ilişkilerini ve düğümleri silebilirsiniz, ancak bu yalnızca test etmek için çok maliyetli olabilir ...


7
Ve tüm düğümleri yinelerseniz, referans düğümün kalmasına izin vermek iyi bir fikir olabilir.
nawroth

6
Grafik dizini nerede bulunur?
Pramod

3
@Pramod, neo4j dizininin veri dizinindedir. Bunu kaçırmamalısınız
devshorts

7
MacOSX'te homebrew ile: /usr/local/Cellar/neo4j/community-1.9.2-unix/libexec/data
Ashley

5
Belki de bu komutu vermeden önce neo4j sunucunuzu durdurmak iyi bir fikirdir.
John Bachir

98

tüm düğümleri ve ilişkileri silmek için daha da basit bir komut:

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

11
Açıklama için +1. Ancak, tüm düğümleri sildiğiniz için kullandığınız etiketlerin tamamen unutulduğu anlamına gelmediğini unutmayın. Tarayıcı yine de tüm etiketleri gösterecektir. Düğüm özellikleri ve ilişki etiketleri için aynen.
Dilum Ranatunga

@DilumRanatunga 1. neo'nun etiketleri unutmasını biliyor musunuz? 2. Düğümler silinirse veya ilişkilerin devam ettiği ilişki etiketleri silinirse düğüm özellikleri nasıl devam edebilir?
John Bachir

1
Gerçek değerleri kastetmiyorum; Mülkiyet isimlerini kastediyorum.
Dilum Ranatunga

5
DB'de sadece düğümler ve kenarlar değil, aynı zamanda dizinler de olabilir ve bunlardan kurtulmak daha zordur. Ayrıca, silme işlemleri de dahil olmak üzere çok sayıda tekrarlanan testle bir DB örneğini mahvetmeyi başardım ve DB dosyalarını fiziksel olarak silmek ve Neo4J'nin yeniden başlatıldığında onları yeniden oluşturması performansta net bir gelişme getiriyor gibi görünüyor.
akış

Docker konteynerinde neo4j'de bellek kalmadı.
bolec_kolec

52

Neo4j 2.3'ten,

İlişkili tüm düğümleri silebiliriz ,

MATCH (n)
DETACH DELETE n

Şu anda Noe4j'de birden çok veritabanı oluşturma seçeneği yoktur. Birden fazla Neo4j verisi depolamanız gerekir. Referansa bakın .


3
Dosya sistemine başvurmak istemiyorsanız en iyi yanıt.
ThomasH

Bu yaklaşımla ilgili sorun, Kısıtlamaları veya indeksleri
Davide

47

Neo4j'de Yeni Veritabanı Oluşturma

Neo4j topluluğuna başlamadan önce göz at seçeneğine tıklayın

görüntü açıklamasını buraya girin

ve farklı bir dizin seçin

görüntü açıklamasını buraya girin

görüntü açıklamasını buraya girin

ve başlat düğmesine tıklayın.

görüntü açıklamasını buraya girin

O direcory'de oluşturulan yeni veritabanı


12

iyi çalışan hızlı ve kirli yol:

bin/neo4j stop
rm -rf data/
mkdir data
bin/neo4j start

11

Bir test paketi çalıştırmak için temiz bir grafiğe ihtiyaç duyan herkes için - https://github.com/jexp/neo4j-clean-remote-db-addon , bir REST çağrısıyla db'yi temizlemeye izin veren harika bir uzantıdır. Açıkçası, bunu üretimde kullanmayın!


0 düğümü siliyor gibi görünüyor. Nasıl yeniden oluşturabilirim?
Will

1
Aslında, referans düğümünü atlar ( github.com/jexp/neo4j-clean-remote-db-addon/blob/master/src/… ). Ancak referans düğümünüz gitmişse (ve buna ihtiyacınız varsa), henüz bir setRefenceNode()çağrı olmadığından ( stackoverflow.com/questions/7186832/… ) temiz bir veri diziniyle başlamanız gerekir .
Matt Luongo

7

Test kodunuzu farklı bir neo4j örneğinde çalıştırın.

  1. Neo4j dizininizi yeni bir konuma kopyalayın. Bunu test etmek için kullanın. yeni dizine cd.
  2. Bağlantı noktasını değiştirin, böylece testlerinizi çalıştırabilir ve aynı anda normal şekilde kullanabilirsiniz. Bağlantı noktasını açmak conf/neo4j-server.propertiesve ayarlamak içinorg.neo4j.server.webserver.port kullanılmayan bir için.
  3. Kurulumda test sunucusunu başlatın. Yapın ./neo4j stopve rm -rf data/graph.dbyıkın.

Daha fazla ayrıntı için bkz. Neo4j: Veritabanı Nasıl Değiştirilir? ve dokümanlar .


6

Neo4j 2.0.0'da? artık desteklenmiyor. Bunun yerine İSTEĞE BAĞLI MATCH kullanın:

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

6

En kolay cevap: HAYIR

"Baştan başlamanın" en iyi yolu,

  • başka bir boş veri klasörüne git

veya

  • Neo4j'yi tamamen kapatın
  • eski veri klasörünü boşalt
  • Neo4j'yi yeniden başlatın ve boş klasörü veri klasörü olarak ayarlayın

Tüm düğümleri ve ilişkileri silmenin bir yolu vardır ( burada açıklandığı gibi )

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

1

2.0.0 -M6'da Tüm düğümleri ve ilişkileri silmek için aşağıdaki Cypher betiğini çalıştırabilirsiniz:

start n=node(*)
match (n)-[r?]-()
delete n,r

2
Maalesef bu, en son 2.0.0 sürümünde bir hataya neden oluyor: SözdizimiException: Soru işareti artık isteğe bağlı modeller için kullanılmıyor - bunun yerine İSTEĞE BAĞLI MATCH kullanın (satır 1, sütun 26) ==> "start n = düğüm (*) eşleşmesi (n ) - [r?] - () sil n, r "
richj

Olumsuz oyları anlamıyorum çünkü cevap, soruyu cevapladığımda en son sürüm olan 2.0.0 -M6'da açıkça yazarken, diğerleri şu anda en son sürüm için doğru cevaplar verdi .
Martin Seeler

1

Sürüm 3'ten itibaren ayrı veritabanı örnekleri oluşturmanın artık mümkün olduğuna ve bu nedenle konumlarının biraz farklı olduğuna inanıyorum.

Başvuran: https://neo4j.com/developer/guide-import-csv/

--İnto Retail.db, açıkça var olan bir veritabanı içermemesi gereken hedef veritabanıdır.

Ubuntu kutumda konum şurada:

/var/lib/neo4j/data/databasesŞu anda yalnızca graph.dbvarsayılan olması gerektiğine inandığım şeyi görüyorum .


0

Veri dosyalarınızı silebilirsiniz ve bu şekilde ilerlemek istiyorsanız, örneğin sadece graph.db dosyanızı silmenizi tavsiye ederim. Aksi takdirde kimlik doğrulama bilgilerinizi bozarsınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.