![]() |
AW: SQLite - Insert / Update beschleunigen
Ein Refactoring könnte sinnvoll sein, hinterher sollte das so aussehen:
Delphi-Quellcode:
Und z.B.
StartTransaction;
Try PerformDataUpdate; CommitTransaction; Except On E:Exception Do Begin RollbackTransaction; HandleException(E); End End;
Delphi-Quellcode:
und
Procedure PerformDataUpdate;
Var i : Integer; Begin For i:=0 to X-1 Do PerformSingleRecordUpdate(Data[i]); End;
Delphi-Quellcode:
Procedure PerformSingleRecordUpdate(aRecord : TMyData);
Begin If RecordExists(aRecord) then PerformSQLUpdate(aRecord) Else PerformSQLInsert(aRecord); End;
Delphi-Quellcode:
usw.
Function RecordExists (aREcord : TMyData) : Boolean;
Begin Result := PerformSQLSelect('Select * from MyDatable Where PKField = '+aRecord.PkField).RecordsAffected > 0; End; PS: Wie machst Du das eigentlich mit gelöschten Daten? |
AW: SQLite - Insert / Update beschleunigen
Eine Transaktion bedeutet ja "Alles oder Nichts", d.h. man muss sich überlegen, welche Daten unabdingbar zusammengehören. Im Fehlerfall werden dann natürlich alle Änderungen innerhalb der aktuellen Transaktion verworfen. Außerdem sollte man nach Möglichkeit lang laufende Transaktionen vermeiden. Aus diesem Grund ist es z.B. ungeschickt, Daten clientseitig zu bearbeiten und einzelne Update-Befehle zum Server zu schicken, wenn man das per SQL auch auf den Server abwälzen kann (gut, bei einem INSERT wird das ja nicht anders gehen als Einzelbefehle). Hat man sehr viele Daten, die nicht funktional voneinander abhängig sind, kann ein Commit alle X Datensätze nicht schaden. Man muss sich ja auch vor Augen halten, dass jede Transaktion den Server belastet, schließlich muss er den ganzen Schmu ja erstmal cachen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:25 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