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();
Extra Kredit für DBDeploy! – critium