2013-03-09 6 views
5

Ich habe vor kurzem die Welt der Graph-Datenbanken ausgesetzt. Es ist ein ziemlich interessanter Paradigmenwechsel für einen alten relationalen Hund wie mich.Änderungsverwaltung für Graph-Datenbanken?

Auch vor kurzem habe ich mit Liquibase basteln und es war ein ziemlich nettes Tool bei der Verwaltung von Datenbanken.

Also, kollidieren zwei Welten und ich frage mich nur, ob es irgendwelche Tools gibt, die Liquibase wie Änderungsmanagement für Graph-Datenbanken tut. Ich interessiere mich besonders für neo4j und orientdb.

Antwort

2

Pramod Sadalage und Martin Fowlers einflussreicher Artikel von 2003 auf Evolutionary Database Design hatte einen großen Einfluss darauf, wie ich die Verwaltung von Schemaänderungen in einer Datenbank angegangen bin. Ich fuhr fort, DbDeploy und DbDeploy.net in Java und .NET-Ökosysteme zu verwenden, und jetzt ActiveRecord migrations verwenden. Wenn Sie Liquibase interessant finden, empfehle ich einen Blick auf diese Werkzeuge.

Die Neo4j.rb documentation diskutiert diese Arten von Migrationen gegen Neo4j.

Ich persönlich habe kein Tool zur Verwaltung von Migrationen in Neo4j verwendet, aber ich habe Migrationsskripten geschrieben, die Dinge wie das Umbenennen von Eigenschaften, das Ändern von Kantenbeschriftungen oder das Erstellen von Indizes ausgeführt haben. Als Beispiel Anwendungsfall, hier ist ein Ausschnitt aus einem Skript Gremlin Groovy habe ich einige Fremdschlüssel in einer Neo4j Graph gespeichert neu zuzuordnen und einen Index aktualisieren:

try { 
    projects.each { node -> 
    old_id = node.ref_id 
    new_id = old_to_new_ids[old_id] 
    index.remove('project', old_id, node) 
    node.ref_id = new_id 
    index.put('project', new_id, node) 
    } 
} catch (Throwable e) { 
    println(e) 
} finally { 
    g.shutdown() 
} 

Ab Neo4j Version 1.8 gibt es eine PropertyContainer das kann für Grafikmetadaten verwendet werden. Es wäre einfach, diesen Container zu verwenden, um eine Eigenschaft 'schema_version' zu aktualisieren. Der Code würde in etwa so aussehen:

EmbeddedGraphDatabase db = new EmbeddedGraphDatabase(dbFilename);   
Transaction tx = db.beginTx(); 
PropertyContainer properties = db.getNodeManager().getGraphProperties(); 
properties.setProperty("schema_version", 3); 
tx.success(); 
tx.finish(); 
+0

Extra Kredit für DBDeploy! – critium

8

Liquigraph existiert jetzt und obwohl noch recht neu, ist der Autor sehr empfänglich für Feedback und ist aktiv an dem Projekt arbeiten.

+0

upvoting, um das Bewusstsein zu erhöhen und dem Autor Ansporn zu geben, weiter daran zu arbeiten. – critium

0

Persönlich wäre ich mehr an etwas interessiert, das auf TinkerPop APIs basiert. Ich denke, dass diese API von mehreren verschiedenen Datenbanken unterstützt wird, dafür wurde sie entwickelt. Ich würde es vorziehen, in der Lage zu sein, meine Eckpunktbeschriftungen, Kantenbeschriftungen, Eigenschaften, Indizes usw. zu definieren - ich versuche nicht, mich an einer (großartigen) Technologie auszurichten, die für relationale Datenbanken entwickelt wurde.