在 Neo4j 中,您是否可以简单地维护数据库中的每一代模式,直到您对结果感到满意,然后删除多余的代?您可以创建一个节点,例如
(t1:Transformation {transformationId:1})
充当一组转换的索引或锚点,然后创建每一代新模式并将其与具有排序属性的关系的转换节点相关联
(t1)-[:STEP {order:0}]->(root)-[:..*]->(branch) //tree
(t1)-[:STEP {order:1}]->(transformedRoot)-[:..*]->(transformedBranch) //first transformed tree
(t1)-[:STEP {order:2}]->(transformedRoot2)-[:..*]->(transformedBranch2) //second transformed tree
在转换中未更改的节点可以直接包含在新模式中
(t1)-[:STEP {order:3}]->(transformedRoot)-[:..*]->(originalBranch) // transformed tree with original branch
直到它们确实被改变
(t1)-[:STEP {order:4}]->(transformedRoot)-[:..*]->(transformedBranch)
只要您愿意,您就可以获得每个转换的快照,并且您可以与它交互以在数据库中回滚、比较或做任何您想做的事情,而不是导出/导入转储。
编辑:
回复您的评论
1)
Neo4j 会扩展或替换您的 C++ 实现吗?如果替换,有several tools用于将初始数量的数据导入Neo4j,特别注意1和2。
如果扩展,则取决于您将如何与数据交互。据我所知,C++ 没有非常好的 Neo4j 驱动程序,尽管有一些或多或少成熟的项目(1、2、3 和3,还有4)可能会有所帮助.我会 run Neo4j as a server 并构建一个 RESTful 客户端 (1,2,3),它使用 Cypher & (de)serialized JSON 与之通信。我会花时间学习制作good cypher queries,并使用transactional server endpoint。但是,我会用 Java 或 Python 或其他具有良好 driver support for Neo4j 的语言来执行此操作,可能不是 C++。
2)
没有数据很难举出例子。首先查看modeling examples,然后在Google Group discussions 中搜索线程,人们会在其中详细了解他们如何为他们的域建模和设计他们的查询。例如Here 和here 是指两种不同的关系排序方式;按关系属性和关系类型。然后,如果您需要建模或查询方面的帮助,请将示例数据放入 Neo4j Console 并与您在 SO 上的问题一起分享链接。 (我在链接的控制台中放了一个带有查询的小样本,你可以开始玩了。)