Sparql Jena TDB是否每次都将所有数据加载到内存中?

Sparql Jena TDB是否每次都将所有数据加载到内存中?,sparql,jena,tdb,Sparql,Jena,Tdb,我是耶拿的新手。我尝试使用TDB处理瑜伽数据集。数据集大约有200米,每次我运行相同的查询时,加载数据然后给出结果大约需要5分钟。我想知道我是否误解了TDB的任何部分?以下是我的代码 String directory=“tdb”; Dataset Dataset=TDBFactory.createDataset(目录); dataset.begin(ReadWrite.WRITE); 模型tdb=dataset.getDefaultModel(); //String source=“yagoMe

我是耶拿的新手。我尝试使用TDB处理瑜伽数据集。数据集大约有200米,每次我运行相同的查询时,加载数据然后给出结果大约需要5分钟。我想知道我是否误解了TDB的任何部分?以下是我的代码

String directory=“tdb”;
Dataset Dataset=TDBFactory.createDataset(目录);
dataset.begin(ReadWrite.WRITE);
模型tdb=dataset.getDefaultModel();
//String source=“yagoMetaFacts.ttl”;
//FileManager.get().readModel(tdb,源代码);
String queryString=“选择不同的?p,其中{s?p?o.}”;
Query=QueryFactory.create(queryString);
try(queryexecutionqexec=QueryExecutionFactory.create(query,tdb)){
ResultSet results=qexec.execSelect();
ResultSetFormatter.out(System.out、结果、查询);
}
提交();
dataset.end();

有两种方法可以将数据加载到tdb中,通过API或CMD。非常感谢@ASKW和@AndyS

1通过API加载数据 这些代码只需执行一次,尤其是
readModel
行,这将花费很长时间。

数据加载到tdb后,我们可以使用以下代码进行查询。无需再次加载数据。

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

如果您调用
readModel
,当然可以。为什么不在没有这一行的情况下尝试呢?嗨,我尝试在没有readModel行的情况下运行,但是没有结果。如果我没有指明我需要的数据集,tdb如何知道要使用哪个数据集?我想您必须调用
tdb.commit
,请参阅在运行程序之前尝试tdbloader(命令行)加载数据。@AKSW Hi,我在问题描述中修改了代码,但仍然没有得到任何结果。我现在感到很困惑。如果我没有指定数据集的位置,tdb怎么知道它在哪里?我认为它必须至少加载一次数据?
>tdbquery --loc=path\to\tdb --query=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>      |
-------------------------------------------------------