Neo4j跨会话查询数据

时间:2011-07-05 19:12:11

标签: java database session neo4j graph-databases

我无法访问嵌入式Java版Neo4j中以前创建的数据库。我想做的是打开GraphDatabaseService,添加几百万个关系(不使用BatchInserter,只有事务),然后关闭最后一个事务和连接。这看起来像是:

public class startNeo4j{ …
  public static void main (String[] args) {
    GraphDatabaseService graphDb = new EmbeddedGraphDatabase( "data/test/base" );
    Transaction tx = graphDb.beginTx();
    IndexManager index = graphDb.index();
    Index<Node> userIds = index.forNodes("userIds");
    RelationshipIndex follows = index.forRelationships("follows");

[这里我输入了一个非常大的csv(几百万个关系),同时给出了关系和userId索引]

    tx.finish();
    graphDb.shutdown(); }}

我需要做的是打开一个新的GraphDatabaseService并访问我刚刚插入的所有数据。我检查了Neo4j列表,他们已经确认这是可能的,但没有提供任何细节。

我不想重新创建索引,但是当我尝试简单地重新打开它时,我得到一个错误,其中索引(上面的userIds)“无法解析”。理想情况下,如果有人概述了第二组代码看起来会是什么样的话。我的非功能性看起来像:

public class examineNeo4j{
  public static void main (String[] args){
    GraphDatabaseService graphDb = new EmbeddedGraphDatabase( "data/test/base" );
    Transaction tx = graphDb.beginTx();
    IndexHits<Node> hits_final = userIds.get("userId","12");
    Node testthis = hits_final.getSingle();

[或我想要运行的其他一些查询]

    tx.finish();
    graphDb.shutdown();}}

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

你还必须做tx.success();默认情况下,tx处于“回滚”状态。

Transaction tx = graphDb.beginTx();
try {
  // do your work here
  tx.success();
} finally {
  tx.finish();
}
graphdb.shutdown();

请记住,您的tx大小不应超过大约10k的操作。所以请批量处理这样的块大小。