Ich versuche, Daten in einer Datenbanktabelle in einer Reihe von Tripel zu konvertieren, also schreibe ich eine Eulen-Datei mit Jena Java-Bibliothek. Ich habe es mit einer kleinen Anzahl von Tabellensätzen (100) erfolgreich gemacht, was fast 20.000 Zeilen in der .owl-Datei entspricht, und ich bin damit zufrieden.Kann keine große Eulen-Datei mit Jena schreiben
die Eule-Datei zu schreiben, ich den folgenden Code verwendet haben (m
ist ein OntModel
Objekt):
BufferedWriter out = null;
try {
out = new BufferedWriter (new FileWriter(FILENAME));
m.write(out);
out.close();
}catch(IOException e) {};
Leider wenn ich versuche, das gleiche mit dem gesamten Ergebnismenge der Tabelle (800,000 Datensätze) zu tun eclipse-Konsole zeigt mir die Ausnahme:
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
die Ausnahme von
m.write(out);
0 angehoben
Ich bin absolut sicher, dass das Modell korrekt ausgefüllt ist, weil ich versucht habe, das Programm auszuführen, ohne die Eulen-Datei zu erstellen, und alles hat gut funktioniert. Um es zu beheben, habe ich versucht, Heap-Speichereinstellung -Xmx4096M
in run->configuration->vm arguments
erhöhen, aber der Fehler weiterhin auftritt.
Ich führe die Anwendung auf einem Macbook, so dass ich keinen unbegrenzten Speicher habe. Gibt es Chancen, die Aufgabe zu erfüllen? Vielleicht gibt es eine effizientere Möglichkeit, das Modell zu speichern?
Schreiben Sie es als N-Triples funktioniert nicht? Wie groß ist das Modell, d. H. Was ist die Ausgabe von 'm.size()'? – AKSW
die Modellgröße ist 4827075. Jeder Ihrer Vorschlag über N-Triples funktioniert! –
Wenn es in Ordnung ist, sollten Sie 'N-Triples' als Serialisierungsformat bevorzugen. Ohne die Sprache anzugeben, wird die Ausgabe das 'RDF/XML'-Format haben, und XML benötigt tatsächlich viel mehr Speicher, um den XML-Baum aufzubauen. – AKSW