Pramod Sadalage i wpływowy artykuł Martina Fowlera z 2003 roku na Evolutionary Database Design wywarły duży wpływ na sposób zarządzania zmianami w schemacie w bazie danych. Zacząłem używać DbDeploy i DbDeploy.net w Javie i .NET ekosystemach, a teraz używam ActiveRecord migrations. Jeśli znajdziesz ciekawy roztwór, polecam przyjrzeć się tym narzędziom.
Omówienie tego rodzaju migracji z Neo4j.
Osobiście nie używałem narzędzia do zarządzania migracjami w Neo4j, ale napisałem skrypty migracji, które zmieniły nazwę, zmieniono etykiety krawędzi lub utworzyłem indeksy. Jako przypadku przykładem zastosowania, oto fragment ze skryptu Gremlin Groovy Kiedyś przemapować kilka kluczy obcych przechowywanych na wykresie Neo4j i zaktualizować indeks:
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()
}
jak z Neo4j wersji 1.8, jest PropertyContainer które mogą być używane do metadanych wykresu. Byłoby łatwo użyć tego kontenera do aktualizacji właściwości "schema_version". Kod będzie wyglądał mniej więcej tak:
EmbeddedGraphDatabase db = new EmbeddedGraphDatabase(dbFilename);
Transaction tx = db.beginTx();
PropertyContainer properties = db.getNodeManager().getGraphProperties();
properties.setProperty("schema_version", 3);
tx.success();
tx.finish();
Dodatkowy kredyt dla DBDeploy! – critium