SPARQL 経由で RDF を照会するためにゴマを使用しています。私は大きなファイル (2GB、10GB) を扱っており、その後いくつかのクエリを実行しています。このような大きなファイルの作業中に、java.lang.OutOfMemoryError: Java heap spaceというエラーが発生します。param -Xmx3gを使用してアプリを実行しましたが、これらのファイルには十分ではないようです。クエリを実行するたびにリポジトリをシャットダウンする必要がありますか?
私のコードがあります:
void runQuery() {
try {
con = repo.getConnection();
TupleQuery tupleQuery = con.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
TupleQueryResult result = tupleQuery.evaluate();
while (result.hasNext()) {
result.next();
}
result.close();
con.close();
} catch (Exception e) {
...
}
}
}
runTests() {
File dataDir = new File("RepoDir/");
repo = new SailRepository(new NativeStore(dataDir));
repo.initialize();
...
for (int j = 0; j < NUMBER_OF_QUERIES; ++j) {
queryString = queries.get(j);
runQuery();
}
...
repo.shutDown();
}
また、そのような大きなファイルに NativeStore の代わりに MemoryStore を使用することは可能ですか?
エラーが発生するクエリの例:
SELECT DISTINCT ?name1 ?name2
WHERE {
?article1 rdf:type bench:Article .
?article2 rdf:type bench:Article .
?article1 dc:creator ?author1 .
?author1 foaf:name ?name1 .
?article2 dc:creator ?author2 .
?author2 foaf:name ?name2 .
?article1 swrc:journal ?journal .
?article2 swrc:journal ?journal
FILTER (?name1<?name2)
}