AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Alternative für SQLite auf Android Gerät (fmx)

Alternative für SQLite auf Android Gerät (fmx)

Ein Thema von stalkingwolf · begonnen am 12. Sep 2017 · letzter Beitrag vom 15. Sep 2017
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
stalkingwolf

Registriert seit: 6. Mai 2011
247 Beiträge
 
#1

Alternative für SQLite auf Android Gerät (fmx)

  Alt 12. Sep 2017, 11:43
Datenbank: SQLITE • Version: - • Zugriff über: -
Ich habe bisher meine Android Apps mit einer lokalen SQLite DB laufen lassen.
Das ging ganz gut, da die Daten welche ich gespeichert habe sehr klein waren.

Nun muss ich ca 10.000 Datensätze speichern ( imo immer noch klein ) und das dauert ca 2 min.
Das SQLite nun nicht das schnellste ist, ist mir bewusst. Das es so extrem langsam ist dachte ich nicht.

Was ist mit IBLite/ToGo?
Ich habe die InterBase XE7 ToGo Edition.
Ist das IBLite/ToGo? Kann ich damit lokale Datenbanken auf dem Pad anlegen?

Geändert von stalkingwolf (12. Sep 2017 um 11:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.400 Beiträge
 
Delphi XE8 Enterprise
 
#2

AW: Alternative für SQLite auf Android Gerät (fmx)

  Alt 12. Sep 2017, 11:47
Mal eine Frage, wo holst Du die Daten her und wie kommen diese auf Dein Gerät ? Ich habe schon Experimente mit 100.000 Datensätzen in einer SQLite Datenbank gemacht. Da gingen die Abfragen alle sehr performant. Vielleicht liegt es ja nicht an der SQLite Datenbank sondern, wie Du die Daten in die Datenbank bringst.
  Mit Zitat antworten Zitat
SebastianZ

Registriert seit: 23. Jul 2009
67 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#3

AW: Alternative für SQLite auf Android Gerät (fmx)

  Alt 12. Sep 2017, 11:59
...
Nun muss ich ca 10.000 Datensätze speichern ( imo immer noch klein )
..
Klein ist relativ, es kommt nicht nur auf die Anzahl an, sondern auch wie groß die Daten in den Datensätzen sind. Wenn ich pro Datensatz 10 Bilder mit je 1 MB speichere dauert das deutlich länger, als wenn ein Datensatz nur aus 10 Integer-Werten besteht.
Auch relevant für die Geschwindigkeit ist, woher die Daten geladen/erstellt werden.

Wenn es sich hier um kleine Datenmengen und ein performantes laden/erstellen der Daten handelt, sind eventuell unglückliche Indizes in der Tabelle definiert, die das ganze ausbremsen?
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
670 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Alternative für SQLite auf Android Gerät (fmx)

  Alt 12. Sep 2017, 12:05
Zumal SQLite nicht zum Speichern von größeren Daten in der Datenbank geeignet ist. Ich spreche hier nicht von der Anzahl, sondern der Größe des einzelnen Eintrags. Also Dateien in die SQLite-Datenbank speichern ist sehr langsam.
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
247 Beiträge
 
#5

AW: Alternative für SQLite auf Android Gerät (fmx)

  Alt 12. Sep 2017, 12:13
es liegt definitiv an sqlite.
Ich lade die Daten per JSON herunter.
Aber wenn ich in der Schleife um den JSONArray das ExecSQL von meinem TDataset auskommentiere, dann rast er durch den Array.

Ich lasse das aktuell noch unter Windows laufen.
Bisher auf einem UNC Pfade und nun habe ich es lokal auf meine Platte geschrieben.
Programm 0% Auslast und die Platte rattert sich nen Ast.
Und selbst auf meiner SSD ist es nicht schneller ( nur leiser )

evtl habe ich auch meine Tabelle falsch definiert.
Code:
const createflgpl_1 = 'CREATE TABLE IF NOT EXISTS FLGPL_1 ('+
        ' LG_NR TEXT NOT NULL PRIMARY KEY,'+
        ' LG_FIL TEXT,'+
        ' LG_PLATZ TEXT,'+
        ' LG_ARTIKEL TEXT,'+
        ' LG_TEIL TEXT,'+
        ' LG_BMGB REAL,'+
        ' LG_BMGV REAL,'+
        ' LG_EKPR REAL,'+
        ' LG_BMGB_ORG REAL,'+
        ' LG_BMGV_ORG REAL,'+
        ' LG_EKPR_ORG REAL,'+
        ' LG_WEDATUM TEXT,'+
        ' LG_ERSTWE TEXT,'+
        ' LG_LETZTERWE TEXT,'+
        ' LG_AEDT REAL)';


.
.
.

            if feld = 'LG_NR' then flgpl_1_insert.parambyname('LG_NR').asstring := myvalue;
            if feld = 'LG_FIL' then flgpl_1_insert.parambyname('LG_FIL').asstring := myvalue;
            if feld = 'LG_PLATZ' then flgpl_1_insert.parambyname('LG_PLATZ').asstring := myvalue;
            if feld = 'LG_ARTIKEL' then flgpl_1_insert.parambyname('LG_ARTIKEL').asstring := myvalue;
            if feld = 'LG_TEIL' then flgpl_1_insert.parambyname('LG_TEIL').asstring := myvalue;
            if feld = 'LG_BMGB' then begin
                flgpl_1_insert.parambyname('LG_BMGB').asstring := myvalue;
                flgpl_1_insert.parambyname('LG_BMGB_ORG').asstring := myvalue;
            end;
            if feld = 'LG_BMGV' then begin
                flgpl_1_insert.parambyname('LG_BMGV').asstring := myvalue;
                flgpl_1_insert.parambyname('LG_BMGV_ORG').asstring := myvalue;
            end;
            if feld = 'LG_EKPR' then begin
                flgpl_1_insert.parambyname('LG_EKPR').asstring := myvalue;
                flgpl_1_insert.parambyname('LG_EKPR_ORG').asstring := myvalue;
            end;
            if feld = 'LG_WEDATUM' then flgpl_1_insert.parambyname('LG_WEDATUM').asstring := myvalue;
            if feld = 'LG_ERSTWE' then flgpl_1_insert.parambyname('LG_ERSTWE').asstring := myvalue;
            if feld = 'LG_LETZTERWE' then flgpl_1_insert.parambyname('LG_LETZTERWE').asstring := myvalue;
        end;

        flgpl_1_insert.ExecSQL; // <- Kommentiere ich das aus, rennt er durch den Array

Edit : Die DB hat mit den 10.000 Datensätze dann eine Größe von 2.320kb. Also nichts.
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
670 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6

AW: Alternative für SQLite auf Android Gerät (fmx)

  Alt 12. Sep 2017, 12:26
Da fehlt irgendwie der entscheidende Teil der Schleife in deinem Beispiel oben. Das "Create Table" wird aber nur einmal ausgeführt und nicht bei jedem der 10.000 Schritte, oder?

Mache mal vor (außerhalb) der Schleife ein StartTransaction und danach ein Commit. Wenn der jede Abfrage einzeln Commited wird das sicher auch langsam. Das dürfte bei anderen Datenbanken aber nicht besser sein.
  Mit Zitat antworten Zitat
nahpets

Registriert seit: 11. Okt 2006
3.029 Beiträge
 
Delphi 7 Professional
 
#7

AW: Alternative für SQLite auf Android Gerät (fmx)

  Alt 12. Sep 2017, 12:46
Interessant wäre es zu sehen, wie das Insert-Statement aussieht, im obigen Beispiel sieht man ja nur die Parameterbefüllung.

Ließe die sich eventuell etwas vereinfachen?
Delphi-Quellcode:
   if feld = 'LG_BMGBthen begin
     flgpl_1_insert.parambyname('LG_BMGB').asstring := myvalue;
     flgpl_1_insert.parambyname('LG_BMGB_ORG').asstring := myvalue;
   end else
   if feld = 'LG_BMGVthen begin
     flgpl_1_insert.parambyname('LG_BMGV').asstring := myvalue;
     flgpl_1_insert.parambyname('LG_BMGV_ORG').asstring := myvalue;
   end else
   if feld = 'LG_EKPRthen begin
     flgpl_1_insert.parambyname('LG_EKPR').asstring := myvalue;
     flgpl_1_insert.parambyname('LG_EKPR_ORG').asstring := myvalue;
   end else begin
     flgpl_1_insert.parambyname(feld).asstring := myvalue;
   end;
Stephan
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.529 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

AW: Alternative für SQLite auf Android Gerät (fmx)

  Alt 12. Sep 2017, 12:49
Vielleicht sollte man sich Array DML einmal anschauen, oder das Ganze zumindest versuchsweise in eine Transaktion packen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
247 Beiträge
 
#9

AW: Alternative für SQLite auf Android Gerät (fmx)

  Alt 12. Sep 2017, 12:56
Die fehlende Transaktion war es. Dachte ich könnte mir diese sparen, da wenn das Ding auf dem Pad läuft eh nu einer zugreift.

Danke für den Tipp.
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
178 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#10

AW: Alternative für SQLite auf Android Gerät (fmx)

  Alt 12. Sep 2017, 16:23
Was hast du in eine Transaktion geklammert - nur das Statement oder alles?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf