Ich benutze neo4j 3.0.1 Community, und ich habe ein paar GBs Daten. Diese Daten werden sehr schnell veraltet (wie 2,3 Mal pro Tag) und ich muss zuerst neue Daten erstellen und dann die alten Daten löschen (so sind zu jedem Zeitpunkt einige Daten verfügbar).Neo4j Datenbankgröße wächst
Das Problem ist, dass neo4j nicht Speicherplatz aus gelöschten Knoten/Beziehungen wiederverwenden. Im mit MATCH (n) WHERE Bedingung DETEACH LÖSCHEN n
Ich kann sehen, dass Knoten gelöscht werden (ihre Zahl ist konstant ~ 30M), aber die Größe wächst (nach 12 Updates, Größe ist fast genau 12x größer als es sollte sein).
Ich fand bisherigen Beiträge Neo4J database size/shrinking über store-utils aber ich möchte eine bessere Lösung zu finden.
Ich fand auch alte Frage (von Version 1.x) neostore.* file size after deleting millions node, aber es funktioniert einfach nicht wie in der Antwort zumindest in meinem Fall.
Es gibt einige Ratschläge, alle Datenbankdateien zu löschen und nur eine neue zu erstellen, aber es müsste der Dienst gestoppt werden, was nicht passieren sollte.
Ich fand auch einige Informationen, dass, um Platz wiederzuverwenden Sie müssen DB zuerst neu starten, versuchte es auch und es hat nicht funktioniert.
Gibt es eine Möglichkeit, Speicherplatz von gelöschten Knoten/Beziehungen effektiv freizugeben/wiederzuverwenden? Vielleicht fehlt mir eine Konfiguration, oder sie ist nur in der Enterprise-Version verfügbar?
EDIT:
Schließlich hatte ich einige Zeit zu testen und ich laufe Szenario, wenn die Daten ein paar Mal aufgefrischt wurden, Server als gut ein paar Mal neu zu starten. Der Test wurde mit neo4j 3.0.0 unter Windows 10 durchgeführt. Die Ergebnisse sind (noch nicht zu embeed Bildern erlaubt):
Jede Spalte Speichergröße für weiteres Updates präsentiert, blaue Linie bedeutet Neo4j Neustart des Server, und die letzte Spalte (mit brauner Linie getrennt) steht für Größe nach Laufende Store-Utils.
Wie bereits erwähnt, wächst die Größe ziemlich schnell und gegen die Dokumentation, Neustart hilft nicht. Nur store-utils hilft (sie säubern Dateien außer neostore.nodestore.db), aber es wäre eine harte und chaotische Lösung, store-utils in die Produktionslösung zu integrieren.
Kann mir jemand einen Hinweis geben, warum der Speicher wächst?
Ich habe gerade das getan, aber der Platz wurde nicht wiederverwendet. Ich bin mir nicht sicher, ob das einen Unterschied macht, aber ich lasse neo4j in einem Andock-Container laufen und starte den ganzen Container neu (also schätze ich, dass neo4j nicht gut aufhört). Ich bin auch ziemlich positiv, dass wenn ich neo4j ohne Docker getestet habe, es nicht auch Platz wiederverwendet hat. Ich starte neo4j mit dem Befehl 'neo4j console' und stoppe den Prozess. – Rychu
bearbeiteter Originalbeitrag, der ein Testergebnis hinzufügt – Rychu