在 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++ 实现吗?如果替换,有几个工具可以将初始数量的数据导入 Neo4j,特别是注释1和2。
如果扩展,则取决于您将如何与数据交互。据我所知,没有非常好的用于 C++ 的 Neo4j 驱动程序,尽管有一些或多或少成熟的项目(1、2、3和3,还有4)可能会有所帮助。我会将Neo4j 作为服务器运行并构建一个 RESTful 客户端(1、2、3),该客户端使用Cypher和(反)序列化JSON与其通信。我会花时间学习制作好的密码查询,并利用事务服务器端点. 但是,我会在 Java 或 Python 或其他对 Neo4j 具有良好驱动程序支持的语言中执行此操作,可能不是 C++。
2)
没有数据很难举出例子。从查看建模示例开始,然后在Google Group 讨论中搜索人们详细了解他们如何建模其域和设计查询的线程。例如,这里和这里提到了两种不同的关系排序方式;按关系属性和关系类型。然后,如果您需要建模或查询方面的帮助,请将示例数据放入Neo4j 控制台并与您在 SO 上的问题一起分享链接。(我在链接的控制台中放了一个带有查询的小样本,你可以开始玩了。)