我有一個具有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