Einzelnen Beitrag anzeigen

mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#18

AW: Firedac als JSON ohne Feldbezeichner exportieren

  Alt 24. Apr 2023, 17:43
Das MARS Projekt nutzt ebenfalls Elemente von mormot. Um meine Installation nicht zu beschädigen werde ich die Tage ein SnapShot machen, mormot installieren und den Test durchführen. Es dauert noch etwas bis ich dazu kommen aber du bekommst den Benchmark.
Danke für den Test. Meine Lösung von gestern Abend war etwas verspielt. Ich dachte, es ist eine selten genutzte Funktion und damit eine gute Gelegenheit etwas Ausgefallenes aus der mORMot Bibliothek vorzustellen. Die schnellen TextWriter Klassen von mORMot hatte ich im Forum schon vorgestellt, sind hier aber die richtige Wahl. Die Klasse TJsonWriter aus der Unit mormot.core.json ist in meinen Tests größer Faktor 400 schneller als die Delphi Klasse TJsonTextWriter. Für 500K Datensätze ist die Laufzeit kleiner 100 Millisekunden und damit ca. Faktor 4 schneller als mein erster Vorschlag Variant-Array. Das wird deinem Vorhaben einen zusätzlichen Push geben. Schreibe es so:
Delphi-Quellcode:
qrPersonen.First;
var run: Integer := 1;
var w: TJsonWriter := TJsonWriter.CreateOwnedFileStream(MakePath([Executable.ProgramFilePath, 'data.json']));
try
  w.Add('[');
  while not qrPersonen.EoF do
  begin
    w.Add('[');
    w.AddCsvConst([run,
      qrPersonen.Fields[idxPersonID].AsLargeInt;
      qrPersonen.Fields[idxName].AsString;
      qrPersonen.Fields[idxTitel].AsString;
      qrPersonen.Fields[idxVorname].AsString;
      qrPersonen.Fields[idxGeburtsdatum].AsString;
      qrPersonen.Fields[idxPersonalNr].AsString;
      qrPersonen.Fields[idxEintrittsjahr].AsInteger;
      qrPersonen.Fields[idxFachNr].AsLargeInt;
      qrPersonen.Fields[idxFach].AsString
    ]);
    w.Add(']');
    w.AddComma;
  end;
  w.CancelLastComma;
  w.Add(']');
finally
  w.FlushFinal;
  w.Free;
end;
Bis bald...
Thomas
  Mit Zitat antworten Zitat