J'utilise Sésame pour interroger RDF via SPARQL. Je travaille avec de gros fichiers (2 Go, 10 Go) et je fais plusieurs requêtes par la suite. Pendant le travail avec ces gros fichiers, j'obtiens une erreur java.lang.OutOfMemoryError: Java heap space. Je cours mon application avec le param -Xmx3g mais il semble que ce n'est pas assez pour ces fichiers. Peut-être que je devrais fermer un référentiel après chaque requête que je fais?Java OutOfMemoryError avec Sésame
Il est mon code:
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();
}
Aussi, est-il possible d'utiliser MemoryStore au lieu de nativestore pour ces gros fichiers?
Exemple d'une requête qui émet une erreur:
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)
}
Obtenez-vous cette OutOfMemoryError lors de l'exécution des requêtes? C'est très inhabituel. À quoi ressemblent vos requêtes? En ce qui concerne l'utilisation d'un magasin de mémoire: Je doute que vous puissiez insérer un fichier de données 10G dans un magasin de mémoire si vous n'avez que 3 G d'espace mémoire. –
@JeenBroekstra une requête a été ajoutée – YAPPO