Загружает ли Jena TDB все данные в память каждый раз?

Я новичок Йены. Я пытаюсь разобраться с набором данных Yoga с использованием TDB. Набор данных составляет около 200 МБ, и каждый раз, когда я выполняю один и тот же запрос, для загрузки данных и выдачи результатов требуется около 5 минут. Мне интересно, не понимаю ли я какую-либо часть 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();

1 ответ

Решение

Есть два способа загрузки данных в tdb - через API или CMD. Большое спасибо @ASKW и @AndyS

1 Загрузка данных через API

Эти коды должны быть выполнены только один раз, особенно readModel линия, которая займет много времени.

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();

После загрузки данных в tdb мы можем использовать следующие коды для запроса. И нет необходимости загружать данные снова.

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 Загрузка данных через CMD

Загрузить данные

>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>      |
-------------------------------------------------------
Другие вопросы по тегам