图表数据库的变更管理?

时间:2013-03-09 16:03:29

标签: neo4j graph-databases

我最近接触过图形数据库的世界。对于像我这样的老式关系狗来说,这是一个非常有趣的范式转换。

最近,我一直在修补liquibase,它是管理数据库的一个非常好的工具。

所以,两个世界相互碰撞,我只是想知道是否有任何工具可以对图形数据库进行类似liquibase的变更管理。我对neo4jorientdb特别感兴趣。

4 个答案:

答案 0 :(得分:10)

Liquigraph现在已经存在,虽然还很新,但作者非常乐于接受反馈并积极参与该项目。

答案 1 :(得分:3)

Pramod Sadalage和Martin Fowler在2003年对Evolutionary Database Design发表的有影响力的文章对我如何处理数据库中的架构变更进行了重大影响。我继续在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();

答案 2 :(得分:0)

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

答案 3 :(得分:0)

Objectivity / DB是面向对象/图形的数据库,具有功能调用“ Schema Evolution”。此功能使您可以创建架构,加载数据,更改架构以及加载更多数据。您可以根据需要多次更改架构。我们有一些客户已经部署了操作系统,并且已经更改了其架构数百次而不必重新加载数据。

模式演变功能使用模式“形状”的概念,其中每个形状都存储在模式目录中,并且每个对象都有一个形状ID。从磁盘读取对象时,形状ID用于从目录中查找架构形状。然后,如果目录形状不是该模式类型的“最新”形状,则实际对象数据将“动态”演化以匹配该对象类型的最新形状。这样一来,操作系统就不必仅仅因为有人想要额外的属性而重新加载PB级数据库。

允许使用多种类型的架构更改,添加,删除,重新键入属性,但是由于某些功能会破坏数据和/或架构,因此不允许进行某些架构更改。

免责声明:我受雇于Objectivity,Inc。