2017-02-16 65 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>  | 
-------------------------------------------------------