2017-02-16 10 views
1

나는 예나의 초보자입니다. 나는 TDB를 사용하여 요가 데이터 세트를 다루려고합니다. 데이터 세트는 약 200M이고 동일한 쿼리를 실행할 때마다 데이터를로드 한 다음 결과를 제공하는 데 약 5 분이 걸립니다. 나는 TDB의 어떤 부분을 오해하고 있는지 궁금합니다. 다음은 제 코드입니다.Jena TDB는 매번 모든 데이터를 메모리에로드합니까?

String directory = "tdb"; 
Dataset dataset = TDBFactory.createDataset(directory);  
dataset.begin(ReadWrite.WRITE); 
Model tdb = dataset.getDefaultModel(); 
//String source = "yagoMetaFacts.ttl"; 
//FileManager.get().readModel(tdb, source); 
String queryString = "SELECT DISTINCT ?p WHERE { ?s ?p ?o. }"; 
Query query = QueryFactory.create(queryString); 
try(QueryExecution qexec = QueryExecutionFactory.create(query, tdb)){ 
    ResultSet results = qexec.execSelect(); 
    ResultSetFormatter.out(System.out, results, query) ; 
} 
dataset.commit();  
dataset.end(); 
+0

물론'readModel'을 호출하면됩니다. 이 줄을 써 보지 않으시겠습니까? – AKSW

+0

안녕하세요, 나는 readModel 행없이 실행하려고하지만 결과가 표시되지 않습니다. 내가 필요한 데이터 집합을 나타내지 않는다면, tdb는 사용할 데이터 집합을 어떻게 알 수 있습니까? – Charlotte

+0

'tdb.commit'을 호출해야한다고 생각합니다. https://jena.apache.org/documentation/tdb/tdb_transactions.html#write-transactions – AKSW

답변

2

API 또는 CMD를 사용하여 tdb에 데이터를로드하는 두 가지 방법이 있습니다. 많은 @ASKW에 대한 감사와 API를 통해 @AndyS

1로드 데이터는

이러한 코드는 의지가 시간이 오래 걸립니다 번만 특히 readModel 라인을 실행해야합니다. 데이터가 TDB에로드 된 후

String directory = "tdb"; 
Dataset dataset = TDBFactory.createDataset(directory);  
dataset.begin(ReadWrite.WRITE); 
Model tdb = dataset.getDefaultModel(); 
String source = "yagoMetaFacts.ttl"; 
FileManager.get().readModel(tdb, source); 
dataset.commit(); //Important!! This is to commit the data to tdb. 
dataset.end(); 

, 우리는 쿼리 코드를 사용할 수 있습니다. 그리고 데이터를 다시로드 할 필요가 없습니다.

CMD를 통해

String directory = "path\\to\\tdb"; 
Dataset dataset = TDBFactory.createDataset(directory); 
Model tdb = dataset.getDefaultModel(); 
String queryString = "SELECT DISTINCT ?p WHERE { ?s ?p ?o. }"; 
Query query = QueryFactory.create(queryString); 
try(QueryExecution qexec = QueryExecutionFactory.create(query, tdb)){ 
    ResultSet results = qexec.execSelect(); 
    ResultSetFormatter.out(System.out, results, query) ; 
} 

2로드 데이터는 데이터가

>tdbloader --loc=path\to\tdb path\to\dataset.ttl 

>tdbquery --loc=path\to\tdb --query=q1.rq 

q1.rq를 조회하려면로드하려면 쿼리를 저장하는 파일입니다 결과를 얻을해야 좋아요

------------------------------------------------------- 
| p             | 
======================================================= 
| <http://yago-knowledge.org/resource/hasGloss>  | 
| <http://yago-knowledge.org/resource/occursSince> | 
| <http://yago-knowledge.org/resource/occursUntil> | 
| <http://yago-knowledge.org/resource/byTransport> | 
| <http://yago-knowledge.org/resource/hasPredecessor> | 
| <http://yago-knowledge.org/resource/hasSuccessor> | 
| <http://www.w3.org/2000/01/rdf-schema#comment>  | 
-------------------------------------------------------