2011-07-05 4 views
0

Neo4j의 내장 Java 버전에서 이전에 작성한 데이터베이스에 액세스하는 데 문제가 있습니다. 내가하고 싶은 것은 GraphDatabaseService를 열고 몇 백만 건의 관계를 추가하고 (BatchInserter는 사용하지 않고 트랜잭션 만) 마지막 트랜잭션과 연결을 종료하는 것입니다. 이 같은 보일 것이다 :Neo4j 세션 간 데이터 조회

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

또한 tx.success(); 기본적으로 tx는 "롤백"상태입니다.

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

tx 크기는 약 10k 작업을 초과하면 안됩니다. 따라서 이러한 블록 크기로 트랜잭션을 배치하십시오.