SQLITE Schreibzugriff/Insert Geschwindigkeit

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
lazEdgar
Beiträge: 17
Registriert: Do 27. Mär 2014, 14:46

SQLITE Schreibzugriff/Insert Geschwindigkeit

Beitrag von lazEdgar »

Hallo,
ca. 3000 Datensaetze sollen in Tabelle einer SQLITE Datenbank geschrieben werden.
Die Datensaetze werden aus HTML-Content gestript/generiert.

Habe mir zwei Testanwendungen zusammengestrickt, eine als Console-Anwendung und eine Anwendung GUI-basierend.

Die Console--Anwendung schreibt die Daten in nur in eine Textdatei und der ganze Vorgang, samt runterladen des Contents, stripen und in Textdatei speichern, dauert ca. 25 Sek.

Mit der GUI-Anwendung mache ich das gleiche, nur lasse ich hier die Daten in die SQLITE Datenbank schreiben.
PROBLEM---> sobald die Anwendung gestartet wird, friert die Oberflaeche ein und das so lange, bis der gesamte Vorgang abgearbeitet ist.
Das schreiben der Daten dauert auch wesentlich laenger (ca.Minute bis Zwei) als bei der Console-Anwendung.

Ist das normal ? Hat jemand eine Erklaerung.

MfG
SG.Edgar

LAZ Debütant

creed steiger
Beiträge: 957
Registriert: Mo 11. Sep 2006, 22:56

Re: SQLITE Schreibzugriff/Insert Geschwindigkeit

Beitrag von creed steiger »

Ohne zu wissen wie du einfügst schwer zu sagen

Als Schuß ins blaue
http://www.sqlite.org/faq.html#q19

baba
Beiträge: 265
Registriert: Mi 4. Apr 2007, 17:47

Re: SQLITE Schreibzugriff/Insert Geschwindigkeit

Beitrag von baba »

... das Problem ist bekannt. Du musst alles in eine Transaction packen und mit Commit beenden. Sonst versucht Dein Programm nach jedem Satz zu speichern und das dauert. Google mal nach SQLite und langsam, da bekommst Du eine Menge weiterer Infos.

Baba.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: SQLITE Schreibzugriff/Insert Geschwindigkeit

Beitrag von Socke »

lazEdgar hat geschrieben:PROBLEM---> sobald die Anwendung gestartet wird, friert die Oberflaeche ein und das so lange, bis der gesamte Vorgang abgearbeitet ist.

Die Lösung heißt: Multithreading. Der Hauptthread ist für die grafische Oberfläche zuständig; während der Datenverarbeitung kann er dieser Aufgabe aber nicht nachkommen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

lazEdgar
Beiträge: 17
Registriert: Do 27. Mär 2014, 14:46

Re: SQLITE Schreibzugriff/Insert Geschwindigkeit

Beitrag von lazEdgar »

Hallo zusammen,
@BABA
@creed steiger : hier der ungetunte Codeschnipsel:

Folgende Komponenten kommen zum Einsatz: TSQLite3Connection, TSQLTransaction, TSQLQuery

Code: Alles auswählen

 
 
/////////Hier werden die Felder der Tabelle gefuellt
               SqlQuery1.SQL.text:= 'INSERT INTO tblStart Values (NULL, :pf, :jo, :ro, :re, :uh)';
               SqlQuery1.ParamByName('pf').AsString := var1;
               SqlQuery1.ParamByName('jo').AsString := var2;
               SqlQuery1.ParamByName('ro').AsString := var3;
               SqlQuery1.ParamByName('re').AsString := var4;
               SqlQuery1.ParamByName('uh').AsString := var5;
               SqlQuery1.ExecSQL;
 
             end;
         end;
     end;
 
 


Die Konsole-Anwendung ist fast gleich aufgebaut nur wird erst in eine Stringlist eingefuegt und wenn alle Schleifen abgearbeitet sind, wird in Datei geschrieben.
Hier friert aber nichts ein und es ist sehr viel schneller.

Also immer wenn ich Schritt vorwaerts komme, dann folgen zwanzig Schritte zurueck...

MfG
Zuletzt geändert von lazEdgar am Sa 3. Mai 2014, 11:46, insgesamt 1-mal geändert.
SG.Edgar

LAZ Debütant

lazEdgar
Beiträge: 17
Registriert: Do 27. Mär 2014, 14:46

Re: SQLITE Schreibzugriff/Insert Geschwindigkeit

Beitrag von lazEdgar »

Hallo,
ein Tip von einem Freund hat die Loesung gebracht.
Wenn es nicht so kompliziert sein soll, ist die Loesung ganz einfach.

Die Zauberanweisung heisst: (voher soll man sowas als Anfaenger wissen)

Code: Alles auswählen

Application.ProcessMessages;

und wird in der Schleife platziert.
Der Frost ist von der GUI weg und das schreiben der Daten geht jetzt schnell. :D

MfG
SG.Edgar

LAZ Debütant

Antworten