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にロードするには、2つの方法があります。 API

経由@ASKWと@AndyS

1のデータのロードに多くのおかげでこれらのコードは一度だけの意志は長い時間がかかり、特に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にロードされた後、私たちは、照会するには、以下のコードを使用することができます。また、データを再度ロードする必要はありません。

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>  | 
------------------------------------------------------- 

関連する問題