【问题标题】:Can Apache Tinkerpop's Neo4jGraph.open() open a database from the file system?Apache Tinkerpop 的 Neo4jGraph.open() 可以从文件系统打开数据库吗?
【发布时间】:2021-04-30 08:18:17
【问题描述】:

我正在使用 Apache Tinkerpop 的 Gremlin 语言与 Neo4J 数据库进行交互。我可以使用Neo4jGraph.open("/path/to/folder") 方法(来自org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph)来创建一个新的本地数据库。

Neo4J 文件填充该文件夹,因此我知道正在创建一个数据库。当我在单元测试中使用相同的路径再次调用.open 时,似乎数据库文件正在被新的数据库实例覆盖。之前添加的任何顶点都不再在数据库中。是否可以使用此方法重新打开以前创建的数据库,或者总是会生成一个新实例?

【问题讨论】:

    标签: java neo4j gremlin tinkerpop


    【解决方案1】:

    我希望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(),我可以重新打开并获取我的顶点。

    【讨论】:

    • 你是对的。添加顶点后我没有调用 commit() 。我的代码现在按预期工作。谢谢你,斯蒂芬!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2011-12-18
    • 2014-05-30
    • 1970-01-01
    • 2012-10-05
    • 2010-11-01
    • 1970-01-01
    相关资源
    最近更新 更多