![]() |
Re: Schnelle XML Lib für große Dateien gesucht
Bastel Dir deinen eigenen 'Extractor' (Parser kann man das dann nicht nennen), der über ein Sliding Window von z.B. 10MB (Hausnummer) über die Datei rudert und deine Daten aufsammelt.
Du hältst also immer 10MB der Datei im Speicher und sprichst diese als langen String an. WEnn Du bei 90% angelangt bist, verschiebst Du die noch nicht untersuchten 10% nach vorne und lädst dahinter die nächsten 90% rein*. Dann geht es quasi von Vorne wieder weiter. So harkst Du dich duch beliebig lange Dateien und bist auch noch schnell dabei. * Die 10% sind nur ne Hausnummer. Der Gap hängt mit der zu suchenden/parsen Wortgröße zusammen und verhindert, das der erste Teil des zu suchenden Wortes ganz am Ende des Slidingwindows ist und so nicht gefunden werden würde. Anstatt 10MB könnten 50 oder 100MB vielleicht günstiger sein. Das müsstest Du testen. |
Re: Schnelle XML Lib für große Dateien gesucht
Moin alzaimar,
ja, ich denke, so werde ich das wohl machen. Wäre es eigentlich.. uhm... "unelegant" ![]() //Edit: Mit ReadLN verarbeitet er die kleine Datei bei eingeschalteter Optimierung innerhalb von 10 Sekunden, für die große 4 GB Datei benötigt er gute 2 1/2 Minuten. Dann käme noch die Verarbeitung und das Schreiben in die SQL-DB dazu. Ich habs mitm FileStream zuerst versucht, und einem simplen Beispiel. Aber er hat mir nur Exceptions an den Kopf geschmissen, die mir zumindest nichts gesagt haben... :gruebel: //Edit2: Gäbe es doch einen MySQL-Dump zum Download... :wall: //Edit3: Ok, ignoriert meinen Geistesblitz mit ReadLN oben. Ich hatte eben die Erleuchtung bezgl. TFileStream. ;) |
Re: Schnelle XML Lib für große Dateien gesucht
Zitat:
|
Re: Schnelle XML Lib für große Dateien gesucht
Ok,
danke für den Hinweis mit dem CDATA. Sollte wohl nie vorkommen, aber man kann ja nie wissen... ;) |
Re: Schnelle XML Lib für große Dateien gesucht
ich wollte mir mal dieses NativeXML von SimDesign ansehn ...
![]() nur existiert die ![]() und ![]() ![]() dann hab ich mal 'nen Test gestartet
Delphi-Quellcode:
6,9 Minuten um 1,98 GB RAM zu belegen und zum Erstellen von 4 Millionen solcher Knoten:
fill TXMLFile with 4.000.000 nodes, save into and load this from a file
create:0 fill:413022 save:404106 free:3261 EXMLException: EXMLException (TXMLFile.ParsingTree): invalid name Error on byte position 655.447 ("<Node6850 name="fcxv") create:0 load:157 free:0 fill TXMLDocument with 4.000.000 nodes, save into and load this from a file ...
XML-Code:
<Node123456 name="fcxvysdfgcxvcx" vc1x3y="fcxvysdfgcxvcx>123456gfdxv234rf56dfgcvbf</Node123456>
Aber wurde ja auch schon erwähnt, daß eine DOM-Version für sowas nicht wirklich geeignet ist (obwohl meine Version 2 irgendwann mal wesendlich mehr verkraften wird und dennoch als DOM läuft) Na gut, dann muß ich jetzt noch den Grund für diese Exception rausfinden und kann dann mal Testen was mein Code in seinem pseudo-SAX-Mode hinbekommt. Das wird aber geschwindigkeitsmäßig nie an einen guten und reinen SAX-Parser rankommen können. Zum Testen hab ich mir mal finland.osm (614 MB) geladen [edit] OK, ich lad mir gleich nochmal 'ne kleinere Testdatei (das obere Beispiel mit 4.000.000 Knoten ergibt nur eine 386 MB-Datei ... da bekomm ich die 614 wohl nicht direkt geladen :nerd: ) |
Re: Schnelle XML Lib für große Dateien gesucht
Hi himi,
![]() |
Re: Schnelle XML Lib für große Dateien gesucht
Blos mal so aus Interesse ... hast du eigentlich mal alles da runtergeladen und entpackt?
Wie groß mag das denn insgesamt sein? :shock: ja und mal sehn ... Polen ist grad unterwegs (UMTS ist halt nicht unbedingt flott) |
Re: Schnelle XML Lib für große Dateien gesucht
Zitat:
|
Re: Schnelle XML Lib für große Dateien gesucht
ist falsch ... war 'nen Kopier-/Schreibfehler ... also das " ist schon da
hatte die Knotten per Hand direkt aus'm Quelltext
Delphi-Quellcode:
zusammengesetzt, da ich diese 386 MB XML-Datei grad in keinem Texteditor laden konnte, um es zu kopieren :roll:
For i := 0 to 3999999 do Begin
Node := XML.RootNode.Nodes.Add('Node' + IntToStr(i)); Node.Attributes.Add('name', 'fcxvysdfgcxvcx'); Node.Attributes.Add('vc1x3y', 'fcxvysdfgcxvcx'); Node.Data := '123456gfdxv234rf56dfgcvbf'; |
Re: Schnelle XML Lib für große Dateien gesucht
Zitat:
Ja, sind schon ne Menge Rohdaten... ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz