AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Beschleunigungstips für SQLite unter Android erwünscht
Thema durchsuchen
Ansicht
Themen-Optionen

Beschleunigungstips für SQLite unter Android erwünscht

Ein Thema von sko1 · begonnen am 17. Mai 2017 · letzter Beitrag vom 19. Mai 2017
Antwort Antwort
Seite 1 von 2  1 2      
sko1

Registriert seit: 27. Jan 2017
601 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Beschleunigungstips für SQLite unter Android erwünscht

  Alt 17. Mai 2017, 13:08
Datenbank: SQLite • Version: ? • Zugriff über: FMX TFDQuery
Hallo,

ich habe viele Datensätze in eine SQLite-Datenbank zu schreiben, unter Windows dauert das nur ca. 10 Sekunden,
unter Android, der eigentlichen Anwendung braucht der Anwender viel Geduld, da gehen schon mal bis 5 Minuten drauf um ca. 10000 Datensätze mit jeweils ca. 15 Feldern zu schreiben!

Jetzt suche ich Möglichkeiten das zu beschleunigen:

Bisher habe ich sinngemäß folgendes gemacht:

Delphi-Quellcode:
FDQuery.Append;
FDQuery.Edit;
FDQuery.fieldByName('xxxx').AsString := 'asdffghg';
FDQuery.post;
Jetzt habe ich alle INSERTS in einer Stringlist und arbeite diese so ab:

Delphi-Quellcode:
    FDQuery.SQL.Text := 'BEGIN TRANSACTION;';
    FDQuery.ExecSQL;
    for s := 0 to SQLList.Count - 1 do
    begin
      FDQuery.SQL.Text := SQLList[s];
      FDQuery.ExecSQL;
    end;
    // abschicken
    FDQuery.SQL.Text := 'COMMIT;';
    FDQuery.ExecSQL;
Das geht minimal schneller, vielleicht 4 anstelle 5 Minuten

Was ist bei mir die Bremse oder geht das auf einem Handy wirklich alles so langsam, hat jemand eine Idee wo ich ansetzen könnte?

Ciao
Stefan
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.190 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Beschleunigungstips für SQLite unter Android erwünscht

  Alt 17. Mai 2017, 13:16
Testweise einmal ohne Transaktion probiert?

Auch: Kenne mich mit Datenbanken nicht so wirklich aus, aber konnte man Statements nicht irgendwie "preparen" und am Schluss nur für jeden Datensatz die Parameter neu setzen?
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
772 Beiträge
 
#3

AW: Beschleunigungstips für SQLite unter Android erwünscht

  Alt 17. Mai 2017, 13:31
Vor der Schhleife:
- Insert-Statement mit Parametern formulieren und der Query zuweisen
- Prepare aufrufen

In der Schleife:
- Parameter füllen
- ExecSQL ausführen

Dann muss das SQL nur 1 mal geparsed werden.

Dennoch finde ich den Unterschied Windows <-> Android zu hoch.
Was hast du denn für ein Android-Gerät?

Geändert von Olli73 (17. Mai 2017 um 13:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.809 Beiträge
 
Delphi 12 Athens
 
#4

AW: Beschleunigungstips für SQLite unter Android erwünscht

  Alt 17. Mai 2017, 13:36
SQLite ist eventuell nicht die richtige Datenbank für das Datenvolumen?

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Beschleunigungstips für SQLite unter Android erwünscht

  Alt 18. Mai 2017, 11:39
SQLite ist eventuell nicht die richtige Datenbank für das Datenvolumen?

Sherlock
Das glaube ich weniger. Im Netz schwirren Aussagen rum, dass SQLite mit 50GB Daten problemlos funktioniert. Dementsprechend viele Zeilen und Spalten hat die Datenbank dann auch.

Es gibt eine alte Seite auf der SQLite HomePage. Dort werden Geschwindigkeiten verglichen in denen eine alte Version von SQLite schon sehr gut abgeschnitten hat. Allerdings steht auch in roter Schrift darüber, dass diese Seite nicht mehr aussagekräftig ist. Deshalb verlinke ich die hier jetzt mal nicht. Über Google kann man die aber sehr schnell selbst finden wenn man sie denn sehen möchte.
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
601 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Beschleunigungstips für SQLite unter Android erwünscht

  Alt 19. Mai 2017, 11:56
So, nachdem ich alle Eure Tips getestet und teilweise umgesetzt habe (je nach Verbesserung der Laufzeit) bin ich jetzt von meinen 4-5 Minuten auf ca. 20 Sekunden herunter, dazu ein Fortschrittsbalken für den Anwender und alles ist gut!

Danke für Eure Tips!

Ciao
Stefan
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
601 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Beschleunigungstips für SQLite unter Android erwünscht

  Alt 17. Mai 2017, 13:55
Vor der Schhleife:
- Insert-Statement mit Parametern formulieren und der Query zuweisen
- Prepare aufrufen

In der Schleife:
- Parameter füllen
- ExecSQL ausführen

Dann muss das SQL nur 1 mal geparsed werden.

Dennoch finde ich den Unterschied Windows <-> Android zu hoch.
Was hast du denn für ein Android-Gerät?
Das ist ein recht betagtes Hannspree Tablet mit Android 4.4.2, wobei, auf meinem Galaxy S5 oder Galaxy Tab4 läuft es auch nicht wesentlich schneller...

Könntest Du bitte Deinen Tip mal in ein paar Beispielzeilen Code zeigen?
Prepare und Parameter sind mir momentan nicht geläufig, Datenbanken sind Neuland für mich.

Ciao
Stefan
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

AW: Beschleunigungstips für SQLite unter Android erwünscht

  Alt 17. Mai 2017, 14:03
Hi,

hier ein Beispiel wie ich unter iOS und Android ganz gute Performance erreiche:
Delphi-Quellcode:

            mySQLQuery.Sql.Text := 'INSERT INTO jobVollmacht (pid, gesellschaft, art, zeitpunkt) '+
              'VALUES (:pid, :gesellschaft, :art, :zeitpunkt)';
            mySQLQuery.ParamByName('pid').AsString := dbModul.aktPid;
            mySQLQuery.ParamByName('gesellschaft').AsWideString := frmVuAuswahl.lbVuAuswahl.ListItems[i].Text;
            mySQLQuery.ParamByName('art').AsString := 'Teil';
            mySQLQuery.ParamByName('zeitpunkt').AsDateTime := now;
            mySQLQuery.Prepare;
            mySQLQuery.ExecSQL;
Philip
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
772 Beiträge
 
#9

AW: Beschleunigungstips für SQLite unter Android erwünscht

  Alt 17. Mai 2017, 14:03
Könntest Du bitte Deinen Tip mal in ein paar Beispielzeilen Code zeigen?
Prepare und Parameter sind mir momentan nicht geläufig, Datenbanken sind Neuland für mich.
Delphi-Quellcode:
  FDQuery.SQL.Text := 'insert into TABELLE values (:Feld1, :Feld2, ... :FeldN)';
  FDQuery.Prepare;
  for s := 0 to Anz - 1 do begin
    FDQuery.ParamByName('Feld1').AsString := 'Wert'; //oder noch schneller: FDQuery.Params[0].AsString := 'Wert';
    FDQuery.ParamByName('Feld2').AsInteger := Wert;
    ...
    FDQuery.ExecSQL;
  end;
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#10

AW: Beschleunigungstips für SQLite unter Android erwünscht

  Alt 17. Mai 2017, 14:12
Wenn deine Query auch mehrere SQL-Befehle gemeinsam als Skrip absenden kann, könnte das so schneller gehn:
Delphi-Quellcode:
 FDQuery.SQL.Text := 'BEGIN TRANSACTION;';
 // in "SQLList" müssen die einzelnen Statements bereits mit ';' abgeschlossen ein
 FDQuery.SQL.Add(SQLList.Text);
 FDQuery.SQL.Add('COMMIT;');
 FDQuery.ExecSQL;
http://docwiki.embarcadero.com/RADSt...tches_(FireDAC)

Geändert von Blup (17. Mai 2017 um 14:17 Uhr) Grund: Weil ich kann.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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