我最近接触过图形数据库世界.对于像我这样的老式关系狗来说,这是一个非常有趣的范式转变.
最近,我一直在修补liquibase,它是管理数据库的一个非常好的工具.
所以,两个世界相互碰撞,我只是想知道是否有任何工具可以对图形数据库进行类似liquibase的变更管理.我对neo4j和orientdb特别感兴趣.
解决方法
Pramod Sadalage和Martin Fowler在2003年7月7日发表的有影响力的文章对我如何处理数据库中的模式更改进行了重大影响.我继续在
Java和.NET生态系统中使用
DbDeploy和DbDeploy.net,现在使用
ActiveRecord migrations.如果您发现liquibase很有趣,我建议您查看这些工具.
Neo4j.rb documentation讨论了针对Neo4j的这些迁移.
我个人没有使用工具来管理Neo4j中的迁移,但我编写了迁移脚本,这些脚本执行了重命名属性,更改边缘标签或创建索引等操作.作为示例用例,这里是Gremlin Groovy脚本的片段,我用它重新映射存储在Neo4j图中的一些外键并更新索引:
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() }
从Neo4j 1.8版开始,有一个可用于图元数据的PropertyContainer.使用此容器更新’schema_version’属性会很简单.代码看起来像:
EmbeddedGraphDatabase db = new EmbeddedGraphDatabase(dbFilename); Transaction tx = db.beginTx(); PropertyContainer properties = db.getNodeManager().getGraPHProperties(); properties.setProperty("schema_version",3); tx.success(); tx.finish();