我正在使用Apache Tinkerpop的Gremlin语言与Neo4J数据库进行交互。我能够使用Neo4jGraph.open("/path/to/folder")
方法(来自org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph
)来创建一个新的本地数据库。
Neo4J文件填充文件夹,因此我知道正在创建一个数据库。当我从单元测试中再次以相同的路径调用.open
时,似乎数据库文件正在被新的数据库实例覆盖。之前添加的任何顶点都不再存在于数据库中。是否可以使用此方法重新打开以前创建的数据库,或者总是生成一个新实例?
我希望Neo4jGraph.open(path)
打开一个现有的图,如果在该路径上存在,或者创建一个新的,如果没有找到一个。我不希望它覆盖。我假设您在关闭图形之前没有在单元测试中提交事务:
gremlin> graph = Neo4jGraph.open('/tmp/neo4j')
==>neo4jgraph[community single [/tmp/neo4j]]
gremlin> g = graph.traversal()
==>graphtraversalsource[neo4jgraph[community single [/tmp/neo4j]], standard]
gremlin> g.addV('person').property('name','marko')
==>v[0]
gremlin> graph.close()
==>null
gremlin> graph = Neo4jGraph.open('/tmp/neo4j')
==>neo4jgraph[community single [/tmp/neo4j]]
gremlin> g = graph.traversal()
==>graphtraversalsource[neo4jgraph[community single [/tmp/neo4j]], standard]
gremlin> g.V()
gremlin> g.addV('person').property('name','marko')
==>v[0]
gremlin> g.tx().commit()
==>null
gremlin> graph.close()
==>null
gremlin> graph = Neo4jGraph.open('/tmp/neo4j')
==>neo4jgraph[community single [/tmp/neo4j]]
gremlin> g = graph.traversal()
==>graphtraversalsource[neo4jgraph[community single [/tmp/neo4j]], standard]
gremlin> g.V()
==>v[0]
你可以看到,如果我close()
没有g.tx().commit()
,然后重新打开图形,我添加的顶点不存在。然而,通过调用commit()
,我可以重新打开并获得我的顶点。