2013-10-10 3 views
0

SPARQL을 통해 RDF를 쿼리 할 때 참깨를 사용하고 있습니다. 큰 파일 (2GB, 10GB)로 작업하고 이후에 여러 가지 쿼리를 수행합니다. 큰 파일을 작업하는 중에 오류 java.lang.OutOfMemoryError : Java 힙 공간이 발생합니다. 나는 내 응용 프로그램을 실행합니다. -Xmx3g 그러나이 파일은 충분하지 않은 것처럼 보입니다. 어쩌면 모든 쿼리를 수행 한 후에 저장소를 종료해야합니까? 또한참깨가있는 Java OutOfMemoryError

void runQuery() { 
    try { 
     con = repo.getConnection(); 
     TupleQuery tupleQuery = con.prepareTupleQuery(QueryLanguage.SPARQL, queryString); 
     TupleQueryResult result = tupleQuery.evaluate(); 
     while (result.hasNext()) { 
      result.next(); 
     } 
     result.close(); 
     con.close(); 
     } catch (Exception e) { 
      ... 
     } 
    } 
} 

runTests() { 
    File dataDir = new File("RepoDir/"); 
    repo = new SailRepository(new NativeStore(dataDir)); 
    repo.initialize(); 
    ... 
    for (int j = 0; j < NUMBER_OF_QUERIES; ++j) { 
     queryString = queries.get(j); 
     runQuery(); 
    } 
    ... 
    repo.shutDown(); 
} 

, 그것은 가능하다 같은 큰 파일 대신 NativeStore의 MemoryStore을 사용하기 :

내 코드가있다? 오류 방출하는 쿼리의

예 : 그래서

SELECT DISTINCT ?name1 ?name2 
WHERE { 
    ?article1 rdf:type bench:Article . 
    ?article2 rdf:type bench:Article . 
    ?article1 dc:creator ?author1 . 
    ?author1 foaf:name ?name1 . 
    ?article2 dc:creator ?author2 . 
    ?author2 foaf:name ?name2 . 
    ?article1 swrc:journal ?journal . 
    ?article2 swrc:journal ?journal 
    FILTER (?name1<?name2) 
} 
+0

쿼리를 실행하는 동안 OutOfMemoryError가 발생합니까? 그것은 매우 드문 경우입니다. 당신의 쿼리는 어떻게 생겼습니까? 메모리 저장소 사용 : 힙 공간이 3G 밖에없는 경우 10G 데이터 파일을 메모리 저장소에 넣을 수 있을지는 의문입니다. –

+0

@JeenBroekstra에 쿼리가 추가되었습니다. – YAPPO

답변

1

을 그의 원래 게시물에 제공하는 것이 유용했을 것이다 SP2B 쿼리 4 (정보, 당신이 사람들을 기대한다면 당신의 질문을 통해하시기 바랍니다 답을 철저히 지키십시오).

SP2B 5M 스케일의 쿼리 4는 ~ 18.4M 결과를 반환합니다. 5M 데이터 세트 (거북이)는 ~ 500M입니다. 따라서 명시된 크기가 주어지면 25M 및 100M 데이터 세트로이 작업을 시도하고있는 것 같습니다.

original authors도 Q4에 대한 결과 세트의 크기를 게시 할 수 없었습니다 (적어도 연구 범위 내에서). 해당 쿼리의 결과에 대한 데이터 세트에서 명백한 축척 계수가 주어지면 25M 규모에서 약 100m 이상의 결과를 얻었고 100M 규모에서는 1B 정도의 결과가 나올 것으로 예상됩니다.

결과 집합을 계산하는 데 필요한 중간 조인의 크기는 거대한이며 그로 인해 3G의 RAM으로 충분하지 않습니다. 참깨는 좋은 시스템이지만, 나는 그 규모에서 그 쿼리에 대답하기 위해 얼마나 많은 메모리가 필요할지, 심지어 전혀 대답 할 수 없다고해도 단서가 없다.

필자가 아는 한, 한 시스템 만이 25M에서 해당 쿼리를 실행 중이며 아무도 100M에서 실행하지 못했다고보고했습니다. 그렇기 때문에 SP2B는 훌륭하지만 비뚤어진 벤치 마크입니다. 트리플 저장소 성능의 벤치마킹을 시도하는 경우 조금 더 많은 배경 자료를 읽고 BSBM을 조사 할 수도 있습니다.