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
Thema durchsuchen
Ansicht
Themen-Optionen

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 2 von 6     12 34     Letzte »    
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#11

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

  Alt 15. Apr 2009, 21:21
Zitat von bigg:
Ein 4 GB XML-File mit einem DOM-Parser in den Speicher laden ist einfach nur hohl.
Besten Dank, aber so langsam reichts eigentlich mit den Lobhudeleien für mich...
Zitat von bigg:
Ein SAX-Parser mit Hibernate plus entsprechender Datenbank sind da wohl die gewünschte Lösung.
Und alzaimars Vorschlag?
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von bigg
bigg

Registriert seit: 1. Jul 2007
155 Beiträge
 
#12

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

  Alt 15. Apr 2009, 21:43
Alzamir hat seinen Tipp mit der Datenbank doch schon gegeben.
Haste ja am Anfang nicht erwähnt.

Die Jungs vom FastString-Projekt konnten ihre XML-Bestände mit ihren Routinen ordentlich optimieren, aber bei einer in UTF-8 kodierten XML-Datei, wäre ich da etwas vorsichtiger. Wenn man von Standards abweichen möchte, muss man sich nicht wundern (nicht zwingend jetzt aber vielleicht in zwei Jahren), wenn Datenbestände zur Hälfte inkonsistent sind, weil irgendwelche 0815-Parser die Standards nicht einhalten. So ein XML-Parser schreibt sich ja nun auch nicht von heut auf morgen. (siehe Muetze1, Himitsu, MSXML, OmniXML und Co.)
Ich bin ja quasi die perfekte Mischung aus jung, aber sehr erfahren.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#13

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

  Alt 15. Apr 2009, 21:50
Zitat von bigg:
So ein XML-Parser schreibt sich ja nun auch nicht von heut auf morgen. (siehe Muetze1, Himitsu, MSXML, OmniXML und Co.)
joar, sah anfangs auch einfahcer aus
nja, nun bin ich schon recht weit, da wär's blöd jetzt aufzuhören ... vorallem da ich hier noch ein Projekt hab, welches mal damit arbeiten soll (wegen dem hab ich überhaupt erst damit angefangen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#14

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

  Alt 15. Apr 2009, 21:59
Zitat von bigg:
Haste ja am Anfang nicht erwähnt.
Nee...

Zitat von bigg:
So ein XML-Parser schreibt sich ja nun auch nicht von heut auf morgen. (siehe Muetze1, Himitsu, MSXML, OmniXML und Co.)
Wohl wahr. Ich brauche ja nichts großes. Einfach Knoten einlesen und in eine SQL-DB schreiben. Ich habe jetzt die beiden Artikel entdeckt:

Using XML in Delphi application - Part I Teil I ist eigentlich nicht relevant
Using XML in Delphi application - Part II

Ich werde mir wohl eine Klasse schreiben, die zum Einen die XML-Datei parst und zum anderen die Daten in eine DB schreibt. Das ist nach dem Thread in meinen Augen die beste Lösung. Zumal man sicher auch schon ein paar Routen vorberechnen müsste. Ob das aber alles für eine lokale DB taugt... Mal sehen..
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#15

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

  Alt 15. Apr 2009, 22:39
Hallo Daniel,

ich verwende NativeXML von SimDesign, kostet nicht viel
und soll auch bei riesigen Datenmengen schnell sein.

Hier mal ein Benchmark eines Demo-Projektes:

Zitat:
Creating an XML document with 100000 nodes...
Creation time: 0,297 sec
Storage time (file): 0,297 sec
Storage time (string): 0,109 sec
Storage time (stream): 0,125 sec
File size: 3000060 bytes
Clearing time: 0,032 sec
Loading time (file): 0,890 sec
Loading time (stream): 0,906 sec
Done.

Edit: Centrino Duo / 1.83GHz
http://www.simdesign.nl/xml.html

Gruß
Jürgen
Jürgen Höfs
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#16

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

  Alt 15. Apr 2009, 22:51
Hi Pfoto,

Danke für den Hinweise.

Allerdings stoßt es mir etwas sauer auf, wenn ich eine kommerzielle Unit in einem GPL-Projekt verwenden sollte. Dennoch danke..
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#17

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

  Alt 16. Apr 2009, 01:04
Zitat von Daniel:
Falls Du auf Unicode verzichten kannst, kann ich Dir diese Komponente empfehlen:
http://www.destructor.de/xmlparser/index.htm

Ist ein SAX-Parser und ziemlich flott obendrein.
Ich hab den Parser nun zum Laufen bekommen. Gefällt mir, rennt durch die 120 MB Datei innerhalb von 17 Sekunden. Allerdings bekomme ich bei der großen 4 GB Datei den E/A-Fehler 998. Vielleicht finde ich noch raus, wie ich das umschiffe... Um den multi-byte Unicode Support kümmere ich mich, sobald es soweit ist. Jetzt möchte ich erstmal einen stabile Basis schaffen...

Ich danke euch für die Hilfe.
米斯蘭迪爾
"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
 
#18

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

  Alt 16. Apr 2009, 10:02
Zitat von Daniel G:
Allerdings bekomme ich bei der großen 4 GB Datei den E/A-Fehler 998.
Bei Dateien/Adressen größer 2 GB die in einer vorzeichenbehafteten Variablen abgelegt werden, ist das Vorzeichen gesetzt. Dadurch können Adress- und Dateioperationen eine falsche Richtung einschlagen. Vielleicht mal in die Richtung schauen.
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#19

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

  Alt 16. Apr 2009, 10:10
Zitat von Muetze1:
Zitat von Daniel G:
Allerdings bekomme ich bei der großen 4 GB Datei den E/A-Fehler 998.
Bei Dateien/Adressen größer 2 GB die in einer vorzeichenbehafteten Variablen abgelegt werden, ist das Vorzeichen gesetzt. Dadurch können Adress- und Dateioperationen eine falsche Richtung einschlagen. Vielleicht mal in die Richtung schauen.
Hi,

Ja, zum Debuggen war mir das gestern zu spät. Ich habe mal geguckt, er hängt bei dieser Funktion:

Delphi-Quellcode:
FUNCTION TXmlParser.LoadFromFile (Filename : STRING; FileMode : INTEGER = fmOpenRead OR fmShareDenyNone) : BOOLEAN;
          // Loads Document from given file
          // Returns TRUE if successful
VAR
  f : FILE;
  ReadIn : INTEGER;
  OldFileMode : INTEGER;
BEGIN
  Result := FALSE;
  Clear;

  // --- Open File
  OldFileMode := SYSTEM.FileMode;
  TRY
    SYSTEM.FileMode := FileMode;
    TRY
      AssignFile (f, Filename);
      Reset (f, 1);
    EXCEPT
      EXIT;
      END;

    TRY
      // --- Allocate Memory
      TRY
        FBufferSize := Filesize (f) + 1;
        GetMem (FBuffer, FBufferSize);
      EXCEPT
        Clear;
        EXIT;
        END;

      // --- Read File
      TRY
        BlockRead (f, FBuffer^, FBufferSize, ReadIn); //<= DORT. Der Wert von FBufferSize ist durch den Integerüberlauf negativ.
        (FBuffer+ReadIn)^ := #0; // NULL termination
      EXCEPT
        Clear;
        EXIT;
        END;
    FINALLY
      CloseFile (f);
      END;

    FSource := Filename;
    Result := TRUE;

  FINALLY
    SYSTEM.FileMode := OldFileMode;
    END;
END;
Ich werde mal gucken, was es für Lösungen zu diesem Problem im Forum gibt, aber ich denke mal, ich bräuchte irgendwie angepasste Funktionen von FileSize und BlockRead, die eben nicht den Integer nutzen, sondern einen größeren Datentyp.


Gruß,
Daniel
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#20

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

  Alt 16. Apr 2009, 10:25
Was spricht denn gegen den guten alten XmlReader aus dem .Net Framework?
Der lässt ist ebenfalls non-cahing/forward-only und lässt einige SAX Parser weit hinter sich.

Ist auch noch super easy zu nutzen:
Code:
var readerSettings = new XmlReaderSettings
{
    ValidationType = ValidationType.None,
    IgnoreComments = true
};

using (var fs = new FileStream("yourFrigginHugeFile.xml", FileMode.Open, FileAccess.Read))
using (var reader = XmlReader.Create(fs, readerSettings))
{
    while (reader.Read())
    {
        //...
    }
}
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 6     12 34     Letzte »    


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 00:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz