我有一个具有7MB和〜80k语句的RDF文件。从Apache TDB加载数据集/模型的性能问题
当启动应用程序,我有以下的代码,检索itens我要展现给用户的列表:
NodeIterator iterator = technologyModel.listObjectsOfProperty(subject);
while (iterator.hasNext()) {
RDFNode node = iterator.nextNode();
myCollection.add(node.asLiteral().getString().trim());
}
注:此代码工作得很好,并返回一些关于3K结果,并且是第一次访问“technologyModel”。
很明显,在这之前,我必须加载数据集/模型,这里是问题所在。
案例(1)当我从一个RDF文件加载数据集/模型,这样做:
InputStream in = FileManager.get().open(ParamsHelper.sourceRDF);
technologyModel.read(in, "RDF/XML-ABBREV");
的technologyModel似乎瞬间加载和第一码贴在运行不到一秒钟。
情况(2)然而,当我尝试加载从数据库TDB(先前加载的与第一种情况下所使用的相同RDF文件)的模型,在该代码:
dataset = TDBFactory.createDataset(ParamsHelper.tdbBaseDir);
dataset.begin(ReadWrite.READ) ;
technologyModel = dataset.getNamedModel("http://a.example.biz/technology");
dataset.end();
的technologyModel doesn' t似乎立即加载,即使第一个代码发布按预期返回,它在第一次调用时运行约30秒。
如果我在第一次之后调用相同的代码,或者,例如,在第一次调用此代码之前插入其他操作(如technologyModel.listSubjects()),它将按预期立即运行。
在我看来,在第二种情况下,模型只是在它受到的第一个操作之后才加载。它有任何意义吗?
我不想让我的数据保存在RDF文件中,而是有一个存储三元组的TDB数据库。这就是为什么第二种选择似乎更适合我。
任何人都可以帮助我吗?我希望我能正确地揭露问题。
在此先感谢。
嗨AndyS,感谢您的回复!第一个效果具有所有意义,我认为这就是发生的事情。关于第二个效果,我尝试更改SPARQL查询的Model API调用,但仍需大约30秒才能检索(相同)结果。并且对于混淆抱歉,但主题意味着[DCTERMS的财产主题](http://dublincore.org/documents/dcmi-terms/#terms-subject)。3K是查询的结果。这个系列确实有点少。 – 2015-02-09 21:01:56
AndyS,有这样的说法,是否有任何解决方案,所以我可以立即加载我的模型,就像代码'technologyModel.read(in,“RDF/XML-ABBREV”);'在另一种情况下呢? – 2015-02-09 21:05:19
如果在写入事务中完成,technologyModel.read将在TDB支持的模型上工作。 – AndyS 2015-02-10 16:41:45