Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Ein möglichst schnelles TTransaction.Commit; (für Dummies) (https://www.delphipraxis.net/28519-ein-moeglichst-schnelles-ttransaction-commit%3B-fuer-dummies.html)

mojo777 25. Aug 2004 18:19


Ein möglichst schnelles TTransaction.Commit; (für Dummies)
 
Hallo,

ich habe hier im Forum schon ein paar (sehr) theoretische Überlegungen zum Thema Commits und Datenbankauslastung lesen können. Jedoch hilft mir das irgendwie nicht viel weiter bei meinem Problem....
Ich habe eine Datenbank und würde gerne in bestimmten Zeitabständen oder auch auf Button1.Click() die veränderten Daten in die IB Datenbank speichern... MOmentan benutze ich nur eine(!) Transaction für alle Tabellen und bei dem Befehl .Commit dauert das äscht suppa lange...
Es gibt doch bestimmt bessere und vor Allem schnellere Möglichkeit....
Also ich kenne es z.b. aus EMS-Interbasemanager... Da geht das recht zügig...

Bin für jeden Tipp dankbar...!

Gruß
Mojo :shock:

Lemmy 26. Aug 2004 06:08

Re: Ein möglichst schnelles TTransaction.Commit; (für Dummie
 
Guten Morgen,

welche Version von IB wird eingesetzt? Wieviele Tabellen sind "alle Tabellen"? Um welche Datenmenge handelt es sich? Greifen mehrere Benutzer auf die Datenbank zu?

Grüße
Lemmy

mojo777 26. Aug 2004 11:36

Re: Ein möglichst schnelles TTransaction.Commit; (für Dummie
 
Hallo,

ich benutze ib6,
es sind ca. 10 tabellen,
anzahl der datensätze beläuft sich auf ca. 1000 bis 100.000...
also schon ernstzunehmende mengen...
und wenn ich die komplette transaction "commite" werden alle tabellen durchgegangen...

Gruüß
Mojo

Lemmy 26. Aug 2004 13:35

Re: Ein möglichst schnelles TTransaction.Commit; (für Dummie
 
Hi,

hast Du evtl. die Möglichkeit auf Firebird zu wechseln? Speziell in der 1.5 (im Vergleich zu IB 6.0x) hat sich einiges an der Performance getan. Zudem wird die OpenSource IB 6 (ich gehe davon jetzt einfach aus, dass Du diese hast) ja nicht mehr weiterentwickelt, was auch nicht besonders förderlich ist.

Verschiedene Transaktionen sind für verschiedene Themen durch aus interessant (z.B. Adresse - TransAdresse, Auftrag - TransAuftrag), jedoch kann es evtl. zu Problemen kommen, wenn verschiedene Themen untereinander verknüpft sind.

Wenn Du auf einen Schlag mehrere 1000 DS einfügen musst würde es sich anbieten nach einiger Zeit ein Commit zu machen. IBOConsole macht z.B. alle 10.000 DS ein COMMIT (beim Backup-REstore), allerdings geht das eigentlich ratz-fatz (zumindest bei mir).

Grundsätzlich kannst Du in deine Appl selbstverständlich nen Zähler (sei es ein Timer oder ein Zähler, der die Anzahl der DS seit dem letzten commit zählt) einbauen und dann ein Commit machen.

Mehr zu sagen geht aber nicht, da der Aufbau der Datenbank zu kennen (vorallem wenn Du alle 10 Tabellen in einer Trans bearbeiten musst) schon wichtig wäre.

Grüße
Lemmy

mojo777 26. Aug 2004 18:46

Re: Ein möglichst schnelles TTransaction.Commit; (für Dummie
 
Hallo,

das KOmische bei mir ist.... es ist egal wieviele Daten bei dem Commit in dier Db gestopft werden.... die Wartezeit übersteigt immer das wünschbare... ich muss maanchmal bis zu 20 sek warten.... muh...
Kann das denn sein, dass ein paar tabellen calcby (und lookup etc..) felder haben und diese nach dem commit neuberechnet werden? ich kann ja noch versuchen das komplette programm auf sql umzustellen... aber bevor ich das machen würde ich gerne wissen, ob es in diesem sinne was bringt.. :-)

Viele Grüße!

Mojo

Lemmy 27. Aug 2004 05:50

Re: Ein möglichst schnelles TTransaction.Commit; (für Dummie
 
Guten Morgen,

was heißt hier "auf SQL umstellen"??? Soll das heißen Du arbeitest mit TIBTable??

Grüße
Lemmy

mojo777 27. Aug 2004 09:17

Re: Ein möglichst schnelles TTransaction.Commit; (für Dummie
 
jupp :-)

Lemmy 27. Aug 2004 10:05

Re: Ein möglichst schnelles TTransaction.Commit; (für Dummie
 
:wall:

Ich empfehle Dir mal die Tutorials auf meiner Seite zu Interbase/Firebird, IBX, Transactionen usw. durchzulesen.

TIBTable und TIBQuery sind vom Programmierer nur aus Kompatibilitätsgründen erzeugt worden, d.h. die sind nicht alltagstauglich!!!
Ein SQL-Server ist komplett anders als eine Desktop-DB! Wenn Du TIBTable verwendest läd der beim öffnen ALLE Datensätze vom Server zum Client (egal ob der Server auf dem selben PC sitzt!) und deshalb dauert das mit dem Einfügen auch ne Ewigkeit!

Bau Deine Appl auf die Verwendung von TIBDataSet um, verwende schlanke SQL-Statements (d.h. keine Select * from Tabelle) und eine sinnvolle Transaktionsverwaltung.

Wenn Du dazu Hilfestellung benötigst kannst Du dich ruhig an mich wenden, allerdings brauche ich dann ein Modell der DB.

Grüße
Lemmy

mojo777 27. Aug 2004 15:26

Re: Ein möglichst schnelles TTransaction.Commit; (für Dummie
 
:oops:
hallo,

äähhm also das habe ich vorher zwar geahnt aber.... das das auch bei transactions zieht..! :coder2:
wird denn auch die gesamt db bei IBQuery ausgelesen?
ich habe mich eigentlich auch da bemüht die select abfragen schlank zu halten.. aber wenn du meinst, dass das nix bringt... :?

Vielen dank für die "Tipps". Werde mir dies auf jeden Fall zu Herzen nehmen... :gruebel:

Gruß

Mojo

Lemmy 28. Aug 2004 06:46

Re: Ein möglichst schnelles TTransaction.Commit; (für Dummie
 
Hi,


wie gesagt hat der Autor Jeff Overcash mehrfach betont, dass diese beiden Komponenten nur aus Kompatibilitätsgründen mit dabei sind. Ich denke selbst bei schlanken SQL wirst Du mit TIBSQL bzw. TIBDataSet besser bedient sein.

Grüße
Lemmy


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:04 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