2017-02-16 66 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線這將花費很長的時間。

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