AGB  ·  Datenschutz  ·  Impressum  







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

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
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
690 Beiträge
 
Delphi 10.4 Sydney
 
#1

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

  Alt 12. Sep 2017, 15:25
Ich bin mir nicht ganz sicher, aber ich meine dass SqlLite eh nur mit einer transaction geht. Zumindest hatte meine mobile app gemeckert, alt ich 2 transaktions gleichzeitig laufen lassen wollte
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
549 Beiträge
 
#2

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

  Alt 12. Sep 2017, 16:13
Hab nun alles drin.
musste den Code noch für Android extra anpassen, aber es funktioniert.
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.241 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 13. Sep 2017, 06:48
Schön für dich. Es wäre nett, wenn du die Lösung auch noch postest.
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
549 Beiträge
 
#4

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

  Alt 13. Sep 2017, 08:04
Code:
{$IFNDEF NEXTGEN}
var TD : TTransactionDesc;
 {$ENDIF !NEXTGEN}
begin
    .
    .
    {$IFNDEF NEXTGEN}
    TD.TransactionID := 1;
    TD.IsolationLevel := xilREADCOMMITTED;  
    MobilConnection.StartTransaction(td);
    {$ELSE}
    MobilConnection.BeginTransaction;
    {$ENDIF !NEXTGEN}
    .
    .
    .
    {$IFNDEF NEXTGEN}
    MobilConnection.Commit(td);
    {$ELSE}
    MobilConnection.Commit;
    {$ENDIF !NEXTGEN}
Wobei es unter Android (Samsung Galaxy S2) immer noch langsamer als unter Windows ist. D.h ca 3sek Windows mit 10k Datensätzen zu 20s auf dem Tablet.
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.241 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 13. Sep 2017, 08:15
Und du schließt den ganzen Import in eine(!) Transaktion ein?
In der Regel macht das die Sache langsam. Hast du versucht, kleinere Blöcke (zB 10 Datensätze) in eine Transaktion zu packen?
  Mit Zitat antworten Zitat
bra

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

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

  Alt 13. Sep 2017, 09:47
Warum sollte das langsamer sein? Ein Bulk Insert o.ä. macht auch nichts anders. Einzelne Transaktionen bremsen das ganze gerade aus.
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.241 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 13. Sep 2017, 09:58
Weil je größer das transaction log wird, desto langsamer wird die Sache. Bulk Insert etc sind nicht notwendigerweise in einer Transaktion, siehe BATCHSIZE.
Außerdem bekommt man bei großen und lang dauernden Transaktionen meistens Platzprobleme, weil das Log explodiert.

Deshalb frage ich ja. Ich würde gern wissen, wie die Laufzeiten sind, wenn zB 100 Sätze in einer Transaktion gesammelt sind.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#8

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

  Alt 13. Sep 2017, 10:26
Auf dem Tablet mußt du eventuell auch den geringeren Arbeitsspeicher gegenüber einem großen PC in Betracht ziehen.

Code:
    {$IFNDEF NEXTGEN}
    TD.TransactionID := 1;
    TD.IsolationLevel := xilREADCOMMITTED;  
    MobilConnection.StartTransaction(td);
    {$ELSE}
    MobilConnection.BeginTransaction;
    {$ENDIF !NEXTGEN}
    ...
Statt "überall" diese IFDEFS zu machen, würde ich einmal bei {$IFNDEF NEXTGEN} z.B. einen Class-Helper für die MobilConnection, mit BeginTransaction und Commit erstellen, welche das mit der TTransactionDesc übernehmen,
und dann überall nur noch BeginTransaction; und Commit; verwenden.

Nja, bezüglich TTransactionDesc:
* man könnte das als Delphi-Referenz durchsuchenThreadVar speichern (Multithreaded wäre damit schonmal abgefangen, solange da nur einfachte Typen drin vorkommen > Bytes, Integer)
* oder statt dem Class-Helper die Connection-Klasse ableiten und das da als privates Feld rein
Eventuell noch einen verschachtelten Aufruf von BeginTransaction beachten.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
stalkingwolf

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

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

  Alt 13. Sep 2017, 10:48
Ich bin mit dem wie es nun funktioniert zufrieden.
Die Datei der SQLlite ist nicht groß das Log wird ebenfalls nicht sonderlich groß.
Daher werde ich nun nicht in 1000er oder 100er Schritten commiten.
Das mache ich in der Regel nur wenn ich mehrere 100.000 oder >1 Millionen Datensätze importiere.

Die IFDEFS habe ich genau so wie aus der Data.SqlExpr genommen, damit ich hier auf der sicheren Seite beim übersetzen bin.
Das Ding wird nachher aber eh nur auf Android laufen. Ich entwickle nur erst einmal unter Windows und passe es dann auf das PAD an, da auch der compile Vorgang auf das PAD erheblich länger dauert.
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:32 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-2025 by Thomas Breitkreuz