Zur Navigation

Monstermäßige XML-Dateien.

1 Ranma (Gast)

Falls ich Jörg richtig verstanden habe, dann soll ich meine Fragen auf eine maximale Anzahl an neu zu eröffnenden Themen verteilen. Also dann...

Eine der Dateien, aus denen ich für mein Wörterbuch Wörterlisten in meine Datenbank übertrage, ist die Wörterliste des JMdict (Japanische Wörter und Begriffe in mehrere andere Sprachen übersetzt). Das ist eine XML-Datei. Sie ist sehr umfangreich und legt mir schon beim öffnen den ganzen Computer lahm. Sogar falls ich sie deswegen gleich wieder schließe, läßt sich mein Computer dafür ungefähr eine Stunde Zeit.

Ich hatte schon früher mal die Erfahrung gemacht, daß XML-Dateien Computer lahmlegen können. Deswegen verzichte ich eigentlich auf jede XML-Datei, wo immer ich kann. Nur kann ich das nicht, wenn ich den Inhalt in eine Datenbank überführen will. Darum ein paar Fragen nach Erfahrungen, die mit XML-Dateien gemacht werden.

Ist das normal, daß XML-Dateien Computer lahmlegen?
Ich habe zwar keine Multimediamaschine oder einen auf die neuesten Videospiele ausgelegten High-End-PC, weil ich eigentlich nur Texte verarbeite, aber eine XML-Datei enthält doch auch nur Text?
Ist vielleicht OpenSUSE besonders langsam? Meine früheren schlechten Erfahrungen hatte ich allerdings mit anderen Betriebssystemen gemacht, also kann es daran eigentlich nicht liegen...

Könnte die Kombination aus Apache, PHP und MySQL für Tage lahmgelegt werden, wenn ich die monstermäßige XML-Datei damit verarbeiten will?

Eigentlich sollen XML-Datein dafür da sein, daß man sie mit PHP verarbeitet. Darum müßte das die am einfachsten zu verarbeitende Datei sein. Aber weil sie mir schon beim öffnen in einem Texteditor den ganzen Computer lahmlegt, traue ich mich irgendwie nicht...
Ranma

20.10.2015 02:59

2 Jörg Kruse

Wie groß ist denn die Datei?

und mit welchem Texteditor hast du diese geöffnet?

Lässt sich die Datei in einem Editor auf der Konsole öffnen, z.B. mit vim oder nano?

Ist beim Öffnen der Datei die CPU ausgelastet? und / oder ist dann der Speicher voll, so dass das System am "swappen" ist?

20.10.2015 17:05 | geändert: 20.10.2015 17:08

3 Ranma (Gast)

Ich verwende KWrite als Texteditor. Mir gefällt das Syntax-Highlighting und ich finde die Bedinung einfach. Trotzdem mache ich schon viele Fehler damit, wahrscheinlich käme ich mit einem Editor auf der Konsole nicht klar.

Die XML-Datei ist 77,6 MB groß. Sollten die vom Dateimanager Dolphin angezeigten Informationen korrekt sein, dann würde die Datei 5950 Wörter oder 63415 Zeichen verteilt auf 2122 Zeilen enthalten. Das konnte Dolphin sehr schnell anzeigen, hätte also dann kein Problem, die Datei zu durchsuchen.

Die einfachen Textdateien mit den Wörterlisten haben fast alle deutlich unter 1 MB, nur die beiden Dateien für Englisch haben etwas mehr als 4 MB. Die XML-Datei ist also schon deutlich größer. Aber die Anzahl an Wörtern, Zeichen und Zeilen wäre keineswegs größer, eher etwas kleiner.

Beim Versuch die XML-Datei in den Editor zu laden, bewegt sich garnichts mehr, also nicht nur der Editor liegt lahm, sondern alles. Darum kann ich nicht auf den Systemmonitor schauen. Ich warte dann die ungefähre Stunde ab und schließe den Editor, weil das bis dahin nervig genug ist. Danach läuft alles wieder.

Ich sehe da drei Möglichkeiten:
1. Auch für Dolphin ist die Datei zu groß, so daß die statistischen Angaben deutlich zu klein sind. Es dürften dann eher 70'000 Zeilen enthalten sein, als Minimum.
2. XML-Dateien pumpen den gleichen Inhalt tatsächlich auf eine übermäßige Größe auf. Aber wie soll das gehen, falls tatsächlich nur Text enthalten ist?
3. Irgendetwas anderes, vielleicht nur an dieser besonderen XML-Datei.
Ranma

21.10.2015 01:57

4 Jörg Kruse

Ich verwende KWrite als Texteditor. Mir gefällt das Syntax-Highlighting

Möglicherweise ist die CPU ausgelastet, wenn Kwrite das Syntax-Highlighting für die gesamte XML-Datei berechnet. Kannst du diese Funktion testweise deaktivieren?

Beim Versuch die XML-Datei in den Editor zu laden, bewegt sich garnichts mehr, also nicht nur der Editor liegt lahm, sondern alles. Darum kann ich nicht auf den Systemmonitor schauen.

Du könntest die Fenster von Editor und Systemmonitor kleiner ziehen und dann nebeneinander positionieren, so dass du beide Fenster im Blick hast, ohne wechseln zu müssen.

21.10.2015 18:48

5 Ranma (Gast)

Ein eingefrorener Systemmonitor ist so oder so genauso nützlich wie ein abgeschalteter Systemmonitor. Also garnicht. Für KWrite habe ich ein einfacheres Farbschema erstellt, weil es sich nicht generell abschalten läßt. Ich hätte nicht gedacht, daß etwas Farbe so einen Unterschied machen kann: Jetzt funktioniert es zwar langsam, aber fließend und fehlerfrei. Das Problem ist also gelöst und die XML-Datei sollte per PHP verarbeitbar sein.
Ranma

23.10.2015 19:11

6 Jörg Kruse

Ein eingefrorener Systemmonitor ist so oder so genauso nützlich wie ein abgeschalteter Systemmonitor.

Der Systemmonitor hat als GUI-Anwendung auch eine zu große Latenz. Besser in solchen Fällen ist ein Terminalfenster mit der Ausgabe von top.

Ich hätte nicht gedacht, daß etwas Farbe so einen Unterschied machen kann:

Nicht die farbliche Darstellung, aber das vorab nötige Parsen der XML-Datei und das Übersetzen in den Farbcode.

24.10.2015 13:38

7 Ranma (Gast)

Müßte die Datei nicht auch mit meinem einfachem Farbschema geparst werden?

Ich hatte auch versucht, durch anhängen von .txt die Datei als nicht parserwürdig zu deklarieren. Das hat auch nicht funktioniert. Aber das Thema ist nur deshalb noch nicht abgeschlossen, weil PHP wohl doch Probleme mit der großen XML-Datei hat. Zunächst mal wollte ich sie mir einfach nur ausgeben lassen, also:

$Rohdaten=file('JMdict.txt');
print_r($Rohdaten);

Das führt zu der Fehlermeldung, daß der erlaubte Speicher überschritten wurde. 20 Byte wurden nicht untergebracht. So läßt sich natürlich nicht damit arbeiten. Läßt sich irgendwie abschätzen, wieviel mehr Speicher eine richtige Verarbeitung (also herausfinden, welcher Eintrag in welche Datenbankspalte gehört, danach in die passende eintragen) benötigen würde? Meine Überlegung ist nämlich, daß ich die XML-Datei ungefähr in der Mitte in zwei Dateien teile.
Ranma

25.10.2015 22:11

8 Jörg Kruse

Müßte die Datei nicht auch mit meinem einfachem Farbschema geparst werden?

Wenn das einfachere Farbschema weniger Tags oder Attribute berücksichtigt, dann könnte dies auch das Parsen vereinfachen.

Das führt zu der Fehlermeldung, daß der erlaubte Speicher überschritten wurde.

Dieses Limit wird durch die Option memory_limit in der php.ini festgelegt

Läßt sich irgendwie abschätzen, wieviel mehr Speicher eine richtige Verarbeitung (also herausfinden, welcher Eintrag in welche Datenbankspalte gehört, danach in die passende eintragen) benötigen würde?

Mit memory_get_usage() und memory_get_peak_usage() kannst du den Speicherverbrauch ausgeben lassen. Zum Testen kannst du ja ein kleineres File nehmen und dann hochrechnen.

26.10.2015 14:25

9 Ranma (Gast)

Die XML-Datei hat dreimillionenfünfhundertsiebenundzwanzigtausend und noch ein paar Zeilen. Daraus zwei Dateien zu machen, klappt per Hand nicht. Das würde ewig und drei Tage dauern. Ich habe damit angefangen, aber es wieder aufgegeben. Die Teilung hätte das Problem bestimmt gelöst. Aber um es per Skript zu machen, müßte wieder alles zeilenweise (ich will schließlich die ungefähre Mitte nach der Hälfte der Zeilen finden) eingelesen werden?
Ranma

26.10.2015 23:40

10 Jörg Kruse

In Linux gibt es das Tool split. Wenn du die Datei in Einzeldateien mit beispielsweise jeweils maximal 1.763.500 Zeichen aufteilen möchtest, sollte das so gehen (im Verzeichnis, in welchem sich die Datei befindet):

split -l 1763500 dateiname.xml

27.10.2015 11:40