Я использую Sesame для запросов RDF через SPARQL. Я работаю с большими файлами (2 ГБ, 10 ГБ) и последовательно делаю несколько запросов. При работе с такими большими файлами получаю ошибку java.lang.OutOfMemoryError: Java heap space. Я запускаю свое приложение с параметром -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();
}
Кроме того, можно ли использовать MemoryStore вместо NativeStore для таких больших файлов?
Пример запроса, выдающего ошибку:
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)
}