AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Schnelle XML Lib für große Dateien gesucht

Schnelle XML Lib für große Dateien gesucht

Ein Thema von Mithrandir · begonnen am 14. Apr 2009 · letzter Beitrag vom 9. Okt 2009
Antwort Antwort
Seite 4 von 6   « Erste     234 56   
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#31

Re: Schnelle XML Lib für große Dateien gesucht

  Alt 16. Apr 2009, 13:49
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.376 Beiträge
 
#32

Re: Schnelle XML Lib für große Dateien gesucht

  Alt 17. Apr 2009, 16:24
Moin alzaimar,

ja, ich denke, so werde ich das wohl machen. Wäre es eigentlich.. uhm... "unelegant" Delphi-Referenz durchsuchenReadLn zu verwenden und die Datei zeilenweise einzulesen? Zumindest bei der jetzigen API-Version liegen die Dateien immer mit Zeilenumbruch vor. Würde mir wieder ein paar Zeilen Code sparen..

//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...

//Edit2: Gäbe es doch einen MySQL-Dump zum Download...

//Edit3: Ok, ignoriert meinen Geistesblitz mit ReadLN oben. Ich hatte eben die Erleuchtung bezgl. TFileStream.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#33

Re: Schnelle XML Lib für große Dateien gesucht

  Alt 17. Apr 2009, 19:17
Zitat von Daniel G:
//Edit3: Ok, ignoriert meinen Geistesblitz mit ReadLN oben. Ich hatte eben die Erleuchtung bezgl. TFileStream. ;)
Da es grundlegend noch immer XML ist, kannst du alles mit TStream Nachfahren machen, da CR und LF völlig unerheblich sind in einer XML Struktur. Diese werden ignoriert (Ausnahme: innerhalb eines CDATA Wertes).
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.376 Beiträge
 
#34

Re: Schnelle XML Lib für große Dateien gesucht

  Alt 17. Apr 2009, 19:49
Ok,

danke für den Hinweis mit dem CDATA. Sollte wohl nie vorkommen, aber man kann ja nie wissen...
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.931 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#35

Re: Schnelle XML Lib für große Dateien gesucht

  Alt 22. Mai 2009, 12:05
ich wollte mir mal dieses NativeXML von SimDesign ansehn ... Post #15
nur existiert die verlinkte Seite nicht (Code 404)
und http://www.simdesign.nl bzw. http://simdesign.nl liefern nur leere Seiten

dann hab ich mal 'nen Test gestartet
Delphi-Quellcode:
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
...
6,9 Minuten um 1,98 GB RAM zu belegen und zum Erstellen von 4 Millionen solcher Knoten:
<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 )
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.376 Beiträge
 
#36

Re: Schnelle XML Lib für große Dateien gesucht

  Alt 22. Mai 2009, 12:10
Hi himi, Niedersachsen hat ungefähr 2 Mio. Nodes, noch vielleicht ne Mille anderer Knoten drauf.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.931 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#37

Re: Schnelle XML Lib für große Dateien gesucht

  Alt 22. Mai 2009, 12:22
Blos mal so aus Interesse ... hast du eigentlich mal alles da runtergeladen und entpackt?

Wie groß mag das denn insgesamt sein?


ja und mal sehn ... Polen ist grad unterwegs (UMTS ist halt nicht unbedingt flott)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
TurboMartin

Registriert seit: 13. Feb 2006
Ort: Bad Honnef
765 Beiträge
 
Turbo Delphi für Win32
 
#38

Re: Schnelle XML Lib für große Dateien gesucht

  Alt 22. Mai 2009, 13:16
Zitat von himitsu:
<Node123456 name="fcxvysdfgcxvcx" vc1x3y="fcxvysdfgcxvcx>123456gfdxv234rf56dfgcvbf</Node123456>
Ist das richtig, dass hinter dem letzten Atribut das " fehlt?
Tomorrow will be cancelled due to lack of interest.

  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.931 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#39

Re: Schnelle XML Lib für große Dateien gesucht

  Alt 22. Mai 2009, 13:30
ist falsch ... war 'nen Kopier-/Schreibfehler ... also das " ist schon da

hatte die Knotten per Hand direkt aus'm Quelltext
Delphi-Quellcode:
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';
zusammengesetzt, da ich diese 386 MB XML-Datei grad in keinem Texteditor laden konnte, um es zu kopieren
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.376 Beiträge
 
#40

Re: Schnelle XML Lib für große Dateien gesucht

  Alt 22. Mai 2009, 14:47
Zitat von himitsu:
Blos mal so aus Interesse ... hast du eigentlich mal alles da runtergeladen und entpackt?
Naja, das sog. Planet-File ist mit bz2 gepackt ungefähr 6 GB groß, entpackt 5 - 10 mal so groß. Europa ist im Download 1,6 Gigabyte groß, entsprechend auch hier 5-10 mal.

Ja, sind schon ne Menge Rohdaten...
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf