Neo4j 图形数据库的更改管理?

Neo4j 图形数据库的更改管理?,neo4j,graph-databases,Neo4j,Graph Databases,我最近接触了图形数据库的世界。对于像我这样的老关系狗来说,这是一个非常有趣的范式转变 同样是最近,我一直在修补liquibase,它是管理数据库的一个非常好的工具 所以,两个世界发生了冲突,我只是想知道是否有任何工具可以像liquibase一样对图形数据库进行更改管理。我对neo4j和orientdb特别感兴趣,Pramod Sadalage和Martin Fowler 2003年发表的有影响力的文章对我如何管理数据库中的模式更改产生了重大影响。我继续在Java和.net生态系统中使用和部署Db

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

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


所以,两个世界发生了冲突,我只是想知道是否有任何工具可以像liquibase一样对图形数据库进行更改管理。我对
neo4j
orientdb

特别感兴趣,Pramod Sadalage和Martin Fowler 2003年发表的有影响力的文章对我如何管理数据库中的模式更改产生了重大影响。我继续在Java和.net生态系统中使用和部署DbDeploy.net,现在使用。如果你觉得liquibase很有趣,我建议你看看这些工具

本文讨论了针对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\u version”属性将非常简单。代码将类似于:

EmbeddedGraphDatabase db = new EmbeddedGraphDatabase(dbFilename);        
Transaction tx = db.beginTx();
PropertyContainer properties = db.getNodeManager().getGraphProperties();
properties.setProperty("schema_version", 3);
tx.success();
tx.finish();

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

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

客观性/DB是一个面向对象/图形数据库,具有一个称为“模式演化”的功能。此功能允许您创建模式、加载数据、更改模式以及加载更多数据。您可以根据需要多次更改模式。我们的客户已经部署了操作系统,并且在不重新加载数据的情况下更改了数百次模式

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

有许多类型的架构更改是允许的,包括添加、删除、重新键入属性,但也有一些架构更改是不允许的,因为它们会对数据和/或架构造成功能破坏


免责声明:我受雇于Objective,Inc.

upvoting,目的是提高知名度,并激励作者继续努力。dbdeploy链接似乎已经死了