Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi FireBird - Too many Savepoints? (https://www.delphipraxis.net/119431-firebird-too-many-savepoints.html)

mkinzler 27. Aug 2008 08:39

Re: FireBird - Too many Savepoints?
 
Zitat:

Zur Zeit kämpfe ich dafür an Performance problemen, ich beführchte das FireBird nie so flott sein kann/wird wie z.b.
ein Dedizierter MySQL Server aber das ist ein anderes Thema.
Und warum nicht?
Zeos ist halt nicht die erste Wahl.

TUX_der_Pinguin 27. Aug 2008 08:52

Re: FireBird - Too many Savepoints?
 
Ich habe z.b. eine Abfrage die mir die letzten N Datensätze ermitteln soll, bei mySQL sähe das wie folgt aus.

SQL-Code:
SELECT * FROM TAB ORDER BY Datum,DevNo ASC LIMIT 48721,40
48721 ist das Ergebnis aus der Gesamt Anzahl der Datensätze minus der gewünschten 40 Datensätze
dabei braucht diese Abfrage ca. 3-4 sekunden.


Bei Firebird sieht die Abfrage wie folgt aus und benötigt dort ca. 12-13 sekunden.
SQL-Code:
SELECT FIRST 40 SKIP 48721 * FROM TAB ORDER BY Datum,DevNo ASC

Hmm was wäre den anstelle von Zeos deiner Meinung nach die erste Wahl?!

mkinzler 27. Aug 2008 09:02

Re: FireBird - Too many Savepoints?
 
Wie sieht es mit Indizes aus?
Schneller als Zeos ist IBDAC, FIBplus, IBObjects, ...

TUX_der_Pinguin 27. Aug 2008 09:04

Re: FireBird - Too many Savepoints?
 
Zitat:

Zitat von mkinzler
Wie sieht es mit Indizes aus?
Schneller als Zeos ist IBDAC, FIBplus, IBObjects, ...

Was für Indizes meinst du?

mkinzler 27. Aug 2008 09:06

Re: FireBird - Too many Savepoints?
 
Der Tabelle. Existiert ein Index auf die Felder Datum und DevNo?

TUX_der_Pinguin 27. Aug 2008 09:07

Re: FireBird - Too many Savepoints?
 
Nein, das habe ich bisher nicht gemacht müßte ich mir anschauen wie ich diese Felder indiziert bekomme.

Hansa 27. Aug 2008 12:14

Re: FireBird - Too many Savepoints?
 
Zitat:

Zitat von TUX_der_Pinguin
..Was sind den diese Savepoints überhaupt und wozu sind diese gut, ich raff das noch nicht so ganz.

Du musst endlich anfangen, Transaktionen zu verstehen. mkinzler hat jetzt oft genug von "Teiltransaktionen" gesprochen. Beispiel : wöchentliche Lieferung und es wird in Folgewoche wieder was zurückgenommen. Das soll auf eine Rechnung.

Wie sehen solche Vorgänge nun im Programm aus ? 1. Die Lieferung wird eingegeben. Sobald fertig, wird die Rückgabe eingegeben. Hierbei wurde der falsche Schein erwischt. Jetzt gibt es zwei Mölichkeiten :

1. Alles rückgängig machen, was bedeutet, auch die 100 Eingaben der neuen Bestellung neu machen zu müssen. Dabei ist auch vorausgesetzt, dass man bei jedem zusammenhängenden Vorgang zumindest eine Transaktion startet. Ansonsten kann auch die Arbeit eines ganzen Tages weg sein.

2. Man setzt nach der Eingabe der neuen Bestellung einen Savepoint. Wie gesagt, falschen Rücknahmeschein erwischt und das fällt erst nach Eingabe von 100 Rückgaben auf. 8) Dann mache ich eben ein RollBackToSavePoint und habe zumindest das neueingeben der Bestellung, die richtig war gespart.

Im DB-Bereich hat schon alles einen gewissen Sinn, keine Angst. :mrgreen:

Zitat:

Zitat von TUX_der_Pinguin
...ich beführchte das FireBird nie so flott sein kann/wird wie z.b.
ein Dedizierter MySQL Server aber das ist ein anderes Thema.

Du beschäftigst dich ja anscheinend nicht mit Grundlagen. Warum wird überhaupt die FB embedded Version für die Entwicklung benutzt ? :shock: Zeos kann sowieso nur vernünftig mit einer Transaktion umgehen, wenn überhaupt.

TUX_der_Pinguin 27. Aug 2008 12:33

Re: FireBird - Too many Savepoints?
 
Ich habe eine Anwendung die Messdaten Verwalten soll, d.h. Messungen werden von einer anderen Anwendung im Netzwerk
gespeichert, da jede Messung in einer sparaten Datei gespeichert wird, ist die suche nach einer oder mehren Messungen
sehr Zeitaufwending.
Den wenn ich z.b. über 80.000 Messungen (Dateien) vorliegen habe, muß ich jede Datei öffnen schauen ob sie den
Suchkritierien entspricht und dann entsprechend in meiner Anwendung auflisten.
Diesen vorgang wollte ich mir ersparen indem ich eine Datenbank einsetze in der die Messungen stehen,
dort ließe sich ja viel schneller suchen.

Da ich unabhängig und flexibel bleiben möchte dachte ich es macht am meisten Sinn eine Embedded Datenbank einzusetzen,
weil auf dem Anwender Rechner nichts mehr installiert werden muß außer die eine Anwendung und keinen Datenbank Server etc.

Warum man jetzt FireBird Embedded nicht für die Entwicklung nutzen sollte, verstehe ich nicht.
Ich lerne in der Fahrschule ja auch mit einem Auto das Autofahren und nicht mit einem Roller.

Das Prinzip von den Transaktionen habe ich denke ich einigermaßen Verstanden, ich kann diverse aktionen ausführen und erst
wenn klar ist das alles in ordnung ist kann ich dann die aktionen bestätigen "Commit" oder ein "Rollback" durchführen
um die Änderungen rückgängig zumachen.

Also müßte ich vor einem Insert einen "Savepoint" setzen dann das Insert ausführen und dann muß ich das jetzt noch mit
einem "Commit" bestätigen!? Wieso reicht es da nicht aus eine einfache "Insert" Anweisung auszuführen.

In der Anwendung gibt es eh nur eine Tabelle in einer Datenbank, es ist ja nicht so das ich in Tabelle X etwas einfüge und
wenn in Tabelle Y etwas schief geht das ich den Eintrag aus X wieder rückgängig machen will, das verstehe ich unter Transaktionen.


Mein Problem ist halt ich muß ja irgendwie Anfangen das Problem umzusetzen und wenn man im Internet stöbert findet man
hunderte von Datenbank Systemen und hunderte Möglichkeiten auf diese zuzugreifen, wie soll man als Laie sofort und ohne
Studium aller Dokumentationen herrausfinden was man benötigt also greift man auf das zu was man kennt oder wovon man
schon gehört hat und probiert damit aus das vorhandne Problem zu lösen.

mkinzler 27. Aug 2008 12:40

Re: FireBird - Too many Savepoints?
 
Zitat:

Warum man jetzt FireBird Embedded nicht für die Entwicklung nutzen sollte, verstehe ich nicht.
Währrend der Entwicklung bietet sich es an die Serverversion zu nehmen, so dass parallel von der IDE, deinem Programm und einem Admintool auf die Datenbank zugegriffen werden kann.
Zitat:

Also müßte ich vor einem Insert einen "Savepoint" setzen dann das Insert ausführen und dann muß ich das jetzt noch mit
einem "Commit" bestätigen!? Wieso reicht es da nicht aus eine einfache "Insert" Anweisung auszuführen.
Eine SavePoint würde ich nur machen wenn eine Tranaktion aus sehr vielen Operationen besteht. Starte die Tranaktion manuell und rufe nur in einem bestimmten Intervall (z.B. Anzahl von Inserts) Commit auf.

Hansa 27. Aug 2008 12:57

Re: FireBird - Too many Savepoints?
 
Sieht so aus, als hätteste Transaktionen immer noch nicht ganz gerafft.

Zitat:

Zitat von TUX_der_Pinguin
Da ich unabhängig und flexibel bleiben möchte dachte ich es macht am meisten Sinn eine Embedded Datenbank einzusetzen,
weil auf dem Anwender Rechner nichts mehr installiert werden muß außer die eine Anwendung und keinen Datenbank Server etc.

Warum man jetzt FireBird Embedded nicht für die Entwicklung nutzen sollte, verstehe ich nicht.
Ich lerne in der Fahrschule ja auch mit einem Auto das Autofahren und nicht mit einem Roller.
...

Was ist schlimm daran, einen Datenbank-Server zu installieren ? Ein paar Klicks zu machen ? Embedded ist wesentlich komplizierter und die paar MB interessieren heute nicht mehr.

Und die Fahrschule ist wirklich hervorragendes Beispiel. Du lernst Autofahren mit einem embedded Einrad. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:51 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz