JSON Array in Datenbanktabelle

Rund um die LCL und andere Komponenten
Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6765
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: JSON Array in Datenbanktabelle

Beitrag von af0815 »

So, ich habe die ersten Versuche gefahren. Die Struktur der JSON Daten ist geringfügig anders, es fehlt die erste Ebene gegenüber deinen Daten. Für das Geschwindigkeitsproblem ist das IMHO irrelevant.

Ich kann dein Beispiel aus dem ersten Post schon mal laufen lassen. Das Problem mit der Geschwindigkeit ist zu 100% nachvollziehbar. Das ist gut, damit weis ich, wie die Ausgangslage ist. Mal sehen was ich da an Ideen einbringen kann. Ich verwende übrigend fast immer bei DB Applikationen zum Testen solche Datengeneratoren. Es ist zwar am Anfang mehrarbeit, dafür sind die Applikationen in 'Real World' mit einem besseren Verhalten ausgestattet und ich habe die Performanceprobleme schon bei der Entwicklung im Griff, bzw. sehe ich dort schon.

Was für mich dabei auch von interesse ist, das arbeiten mit JSON Daten. Ich habe mich jetzt mit der Erzeugung und dem Zerlegen beschäftigen dürfen. Interessant, das mal in freier Wildbahn mit 'echten' Daten zu machen.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6765
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: JSON Array in Datenbanktabelle

Beitrag von af0815 »

Meine schnellste Version 1000 Datensätze in ca. 5.5 sec

Folgendes mach SQLite schnell. Sollte aber nach dem Import wieder einschalten werden. Damit wartet SQLite nicht aus die Fertigmeldung des Betriebssystems, sondern schreibt was da Zeug hergibt. Wenn es zu einem Crash kommt, könnten die Daten inkonsistent sein.

Code: Alles auswählen

 
  ZConnection1.StartTransaction;
  ZConnection1.ExecuteDirect('PRAGMA synchronous = OFF;');
  ZConnection1.Commit;
 
Testprojekt ist anbei
Dateianhänge
ZEOSSpeedTest.zip
SpeedTest mit JSON und ZEOS
(9.32 KiB) 74-mal heruntergeladen
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

JosefKoller
Beiträge: 115
Registriert: Sa 17. Mär 2007, 10:53

Re: JSON Array in Datenbanktabelle

Beitrag von JosefKoller »

Hallo,

Dein Beispiel Projekt läuft auch bei mir. Auch bei mehr als 500 Datensätzen.

Nur in meiner Version komm ich einfach nicht über diese Grenze hinweg.

Aber: Dein Tipp mit dem

PRAGMA synchronous = OFF;

ist der Renner.

Ich hab jetzt folgende Zeiten (mittlerweile auch in millisekunden gemessen):

Start:: 74064965
vor http:: 74065279
vor Stringgrid: 74074216
vor for Schleife: 74074221
nach for Schleife: 74075660
in finally end: 74075711
Laufzeit der Forschleife bei split auf 5 Durchgänge (pro Durchgang: 199): 0.399722222222222 sec

Das Einfügen der 975 Datensätze in eine Tabelle von meiner JSON-Array Vorlage dauert jetzt nur noch 0.3999..... Sekunden.

Wenn ich 2 for-Schleifen mache, dauert das Einfügen 0.387777777777778 Sekunden.

Der Unterschied ist nicht die Welt.

Der http Aufruf zum Holen des JSON Arrays dauert 2.4825 Sekunden.
Beim 2. Mal mit 2 for-Schleifen dauerte der http aufruf nur 1.0566666666666666666666666666667.

Die gesamte Prozedur läuft bei 5 for-Schleifen Durchgängen 2.985 Sek, bei 2 for-Schleifen 1.5233333333333333333333333333333.

Ich denke, ich lasse meine Splitterei der einzutragenden Datensätze. Auf bessere Werte als im Schnitt 2 Sekunden für die gesamte Prozedur werde ich kaum kommen.

Besten Dank für Deine Hilfe und den PRAGMA Tipp.

Aber irgendwie wurmt es mich doch, daß ich nicht mehr als 500 Values-Klammern in einem Rutsch hinbekomme. Vielleicht find ich es ja doch noch.

Noch eine Frage:
Hast du mal probiert, statt Deiner Dummy-Werte meinen "Musterdatensatz" 975 Mal einzutragen?

Ciao

Josef

JosefKoller
Beiträge: 115
Registriert: Sa 17. Mär 2007, 10:53

Re: JSON Array in Datenbanktabelle

Beitrag von JosefKoller »

Hallo,

Nachtrag:
Ich hab mal Deine Parameter Version beim SQL Statement genommen und damit 1000 Datensätze (Grundlage ein Original JSON Array Eintrag von meinen Daten)
eingetragen.

Mit Deiner Version läuft die for-Schleife 1.2736111111111111111111111111111 sec.

Also meine Version ist mit den 975 Values-Klammern weitaus schneller(0.4 sec.). Bei meiner Version hakt es halt an der 500-er Obergrenze.

Ich laß es jetzt mal so und bleibe bei meiner "Splitversion".

Besten Dank nochmal für Deine wertvollen Tipps.

Ciao

Josef

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6765
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: JSON Array in Datenbanktabelle

Beitrag von af0815 »

JosefKoller hat geschrieben:Aber irgendwie wurmt es mich doch, daß ich nicht mehr als 500 Values-Klammern in einem Rutsch hinbekomme. Vielleicht find ich es ja doch noch.
Schau hier (Limits for SQLite) mal nach.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten