7MB と ~ 80k のステートメントを含む RDF ファイルがあります。
アプリケーションを起動すると、ユーザーに表示する必要がある itens のリストを取得する次のコードがあります。
NodeIterator iterator = technologyModel.listObjectsOfProperty(subject);
while (iterator.hasNext()) {
RDFNode node = iterator.nextNode();
myCollection.add(node.asLiteral().getString().trim());
}
注: このコードは正常に動作し、約 3,000 の結果を返します。これは、「technologyModel」に初めてアクセスしたときです。
明らかに、それを行う前に、データセット/モデルをロードする必要があります。ここに問題があります。
ケース (1) RDF ファイルからデータセット/モデルをロードすると、次のようになります。
InputStream in = FileManager.get().open(ParamsHelper.sourceRDF);
technologyModel.read(in, "RDF/XML-ABBREV");
technologyModel は即座に読み込まれ、投稿された最初のコードは 1 秒もかからずに実行されます。
ケース (2) ただし、TDB データベース (最初のケースで使用したのと同じ RDF ファイルを以前にロードしたもの) からモデルをロードしようとすると、次のコードが使用されます。
dataset = TDBFactory.createDataset(ParamsHelper.tdbBaseDir);
dataset.begin(ReadWrite.READ) ;
technologyModel = dataset.getNamedModel("http://a.example.biz/technology");
dataset.end();
technologyModel はすぐにはロードされないようで、投稿された最初のコードが期待どおりに返されたとしても、最初の呼び出しで約 30 秒で実行されます。
最初に同じコードを呼び出した場合、またはたとえば、このコードを初めて呼び出す前に technologyModel.listSubjects() のような別の操作を挿入した場合、予想どおりすぐに実行されます。
2 番目のケースでは、モデルが実際に読み込まれるのは、最初の操作が行われた後であるようです。意味はありますか?
データを RDF ファイルに保存するのではなく、トリプルを格納する TDB データベースを使用したいと考えています。そのため、2 番目のオプションの方が適しているように思われます。
誰でもこれについて私を助けることができますか? 問題を正しく公開できれば幸いです。
前もって感謝します。