2013-03-09 81 views
5

我最近已经接触到图形数据库的世界。它对于像我这样的老式关系型狗来说是一个非常有趣的范式转变。图形数据库的变更管理?

也是最近,我一直在修补liquibase,它在管理数据库方面是一个相当不错的工具。

因此,两个世界相互碰撞,我只是想知道是否有任何工具可以像liquibase一样对图数据库进行变更管理。我对neo4j和orientdb特别感兴趣。

回答

2

Pramod Sadalage和Martin Fowler从2003年开始对Evolutionary Database Design有影响的文章对我如何处理管理数据库中的模式更改有很大的影响。我继续在Java和.NET生态系统中使用DbDeploy和DbDeploy.net,现在使用ActiveRecord migrations。如果你觉得liquibase有趣,我建议看看这些工具。

Neo4j.rb documentation讨论了这些针对Neo4j的迁移。

我个人并未使用工具来管理Neo4j中的迁移,但我编写了迁移脚本,这些脚本已完成重命名属性,更改边缘标签或创建索引等操作。作为一个例子使用的情况下,这里是从一个小鬼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(); 
+0

DBDeploy的额外功劳! – critium 2013-03-14 04:05:54

8

Liquigraph现在存在,但还是相当新的,笔者非常愿意接受反馈,并积极工作的项目。

+0

upvoting提高意识,并给予作者激励继续工作。 – critium 2015-05-29 14:14:53

0

就我个人而言,我会对基于TinkerPop API的东西更感兴趣。我认为这个API由多个不同的数据库支持,这就是它的设计目的。我更喜欢能够定义我的顶点标签,边缘标签,属性,索引等 - 而不是试图与针对关系数据库设计的(伟大的)技术对齐。