Randver MacBeorn Geschrieben 12. Dezember 2016 report Geschrieben 12. Dezember 2016 Hallo zusammen, kann mir jemand einen Tipp bzgl. dem Einlesen großer Dateien im XML-Format geben? Ich bin auf der Suche nach Pro und Contra für die jeweiligen Techniken. Ich befürchte, etwas mit einer Technik zu realisieren, die sich eventuell nachher nicht für große Datenmengen eignet. Ich bedanke mich im voraus für eure Hilfe.
metallian1 Geschrieben 12. Dezember 2016 report Geschrieben 12. Dezember 2016 c# und xml DaraReader? Welche Technologie schwebt dir denn vor, bzw. wie oder womit willst du die Daten denn weiter verarbeiten?
Abd al Rahman Geschrieben 12. Dezember 2016 report Geschrieben 12. Dezember 2016 Vor allem: Was heißt groß?
Randver MacBeorn Geschrieben 12. Dezember 2016 Autor report Geschrieben 12. Dezember 2016 Die Programmiersprache wäre auf jeden Fall C# und die Größe der Datei > 100.000 komplexe Datensätze.
metallian1 Geschrieben 12. Dezember 2016 report Geschrieben 12. Dezember 2016 Die Programmiersprache wäre auf jeden Fall C# und die Größe der Datei > 100.000 komplexe Datensätze. Basiert das XML auf einem Stylesheet? Ansonsten würde ich den Ansatz mit einem einfachen XmlDataReader erst mal probieren. Wie groß ist die Input Datei in MB?
Lukarnam Geschrieben 12. Dezember 2016 report Geschrieben 12. Dezember 2016 (bearbeitet) SAX- Parser ist ideal für die Bearbeitung "riesiger" Dateien, hauptsächlich, weil er nicht die gesamte Datei auf einmal einliest. Er kann ereignisgesteuert verwendet werden, d.h. er erkennt Anfang oder Ende eines "records". Eventueller Nachteil: er ist unhandlich zu handhaben, dafür bestens modular programmierbar - wenn man kein Quick and Dirty Murks mag - und natürlich beliebig skalierbar. Alle anderen Parser haben zwei Nachteile - sie versuchen die XML- Datei einzulesen, egal wie groß sie ist und ganz gleich ob sie damit die Ressourcengrenze sprengen. Sie versuchen zudem eine XML- Datei umgehend zu interpretieren, d.h. Gültigkeit und Validität zu überprüfen. Beides gute Gründe für sehr dediziert ausgearbeitete Ausnahmeregelungen. Ersteres sprengt vor allem Multiuser Anwendungen auf Servern, zweites liest fröhlich 1 GB Daten ein und verabschiedet sich dann, z.B. mit einem Syntax Error. Vielleicht sogar mit einer Zeilenangabe, der man leider nicht immer trauen kann. Fazit: Viele kleine XML- Dateien sind unendlich effizienter. Workaround: SAX- Parser verwenden und aus Giga- Datei viele kleine machen. Bearbeitet 12. Dezember 2016 von Lukarnam
metallian1 Geschrieben 13. Dezember 2016 report Geschrieben 13. Dezember 2016 Dasselbe erreichst du mit einem XmlReader. Das ist ein asynchron lesender, forward-only cursor, speziell für die read-Verarbeitung grosser Dateien gedacht. (wahrscheinlich sind die Konzepte mit SAX identisch). Niemals grosse Xml Dateien über einen DOM Reader einlesen, da dieser zunächst das gesamte XmlDocument lädt und im Speicher ablegt.
Randver MacBeorn Geschrieben 13. Dezember 2016 Autor report Geschrieben 13. Dezember 2016 Das XmlDocument wollte ich auf keinen Fall verwenden. Ich habe ein DataSet verwendet und lese darin ein. Ggf. müsste ich aber doch mit dem XmlReader arbeiten.
Airlag Geschrieben 14. Dezember 2016 report Geschrieben 14. Dezember 2016 XML ist heute Standard für sehr viele Schnittstellen. Man kann davon aus gehen, dass der Speicherbedarf für in XML aufbereitete Daten unkomprimiert um durchschnittlich 1/3 größer ist als z.B. in CSV-Aufbereitung. Aber dafür gibt es Libs, die XML-Import und Export Streams gleich mit einer ZIP-Kompression kombinieren (aktuelle Office Dateien sind solche gepackten XML-Dateien, bzw. Archive mit mehreren gepackten XML-Dateien) und direkten Zugriff auf einzelne Datensätze zu lassen. Du musst also nicht unbedingt Hauptspeicher für die gesamte Datei reservieren.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden