Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Wie langsam ist Firebird über Internet wirklich? (https://www.delphipraxis.net/169309-wie-langsam-ist-firebird-ueber-internet-wirklich.html)

alleinherrscher 11. Jul 2012 12:03

Datenbank: Firebird • Version: 2.5 • Zugriff über: IB

Wie langsam ist Firebird über Internet wirklich?
 
Hi@all!

Ich weiß, dass es schon einige Themen zu Firebird und der Geschwindigkeit im Netzwerk gibt und dass Firebird bzw Interbase ziemlich viele kleine Datenpakete schickt, weshalb die Engine im Internet langsamer wird.

Ich habe hier ein Programm, das in der Firebird-DB ca 40 Abfragen macht. Dafür braucht das Programm 20 Sekunden übers Internet. Im Netzwerk geschieht die Abfrage nahezu sofort.

der Code sieht ungefähr so aus:

Delphi-Quellcode:
function TDataBaseConnection.IsDocumentInDB(CustomerID:integer;EMailDate:tDateTime):boolean;
var table: TIBTable;
    ta: TIBTransaction;
begin
   ta:=TIBTransaction.Create(nil);
  ta.DefaultDatabase:=DB;
  ta.Params.Add('read');
  table:=TIBTable.Create(nil);
  table.database:=DB;
  table.Transaction:=ta;
  table.TableName:='DOCUMENTS';
  table.filter:='CUSTOMER = '''+inttostr(CustomerID)+''' AND MODIFYDATE = '''+DateTimetoStr(EMailDate)+'''';
  table.Filtered:=true;
  table.Open;
  result:=(table.RecordCount>0);
  table.Close;
  freeandnil(table);
  freeandnil(ta);
end;
Dieser Code wird eben 40 mal aufgerufen. Ist dieser Code irgendwie sehr unperformant? Oder ist Firebird wirklich so extrem langsam über das Internet?
Gibt es andere DB's die die Aufgabe schneller erfüllen können (und wenn irgendwie möglich über TIBDatabase angesteuert werden können?)


Gruß und besten Dank,
Michael

tsteinmaurer 11. Jul 2012 12:26

AW: Wie langsam ist Firebird über Internet wirklich?
 
Ich würde mir angewohnen, dass man eine Art Profiling/Monitoring/Tracing verwendet, wenn es um Performanzthemen geht, damit man weiss, was der eigene Code so "verbricht".

Dein Code ist sehr Desktop-DB belastet. Kenn jetzt nicht die Implementierung im Hintergrund von IBX, aber ich könnte mir vorstellen, dass bei Verwendung von TIBTable/Filter/RecordCount im Worst-Case alle Datensätze zum Client transferiert werden.

Du willst ja im Wesentlichen überprüfen, ob basierend auf einem Filterkriterium, Datensätze existieren. Das kann mit SQL in einem SELECT gemacht werden, was dann am Server ausgeführt wird und letztendlich nur ein einzelner Wert zum Client übertragen wird.

Ja, Firebird's Remote-Protokoll ist geschwätzig und übers WAN weniger geeignet, aber in deinem Code steckt bei Verwendung einer Client/Server-Datenbank viel Verbesserungspotential.

Kommst du von einem Desktop-DB Background (Paradox, dBase, ...)?

alleinherrscher 11. Jul 2012 12:33

AW: Wie langsam ist Firebird über Internet wirklich?
 
Ne, ich habe nicht sehr viel Ahnung von Datenbanken im Allgemeinen und bin eher bei normaler Pascal-Programmierung zu Hause. Habe mir einfach über das Internet die entsprechenden Informationen zusammengesucht, um die Funktion zu schreiben. An anderen Stellen gehen ich auch über TDatasets, in denen ich mir die SQLInsert,Modify etc selber generiere. Aber auch die sind entsprechend langsam über WAN. Ist TIBTable sehr langsam? Allerdings sind in der entsprechenden Tabelle nur 5 Einträge gespeichert.

RWarnecke 11. Jul 2012 12:35

AW: Wie langsam ist Firebird über Internet wirklich?
 
Das schreit doch förmlich nach einer Stored Procedure oder einer View.

tsteinmaurer 11. Jul 2012 12:37

AW: Wie langsam ist Firebird über Internet wirklich?
 
Zitat:

Ne, ich habe nicht sehr viel Ahnung von Datenbanken im Allgemeinen
Schlecht, wenn man eine Datenbank-gestützte Anwendung schreiben muss. TIBTable ist für eine Client/Server-Anwendung nicht zu empfehlen.

alleinherrscher 11. Jul 2012 12:44

AW: Wie langsam ist Firebird über Internet wirklich?
 
Zitat:

Zitat von RWarnecke (Beitrag 1174306)
Das schreit doch förmlich nach einer Stored Procedure oder einer View.

Okay, das werde ich mal versuchen und dann das Ergebnis melden. Danke!

@tSteinmaurer Keine Ahnung zu haben ist immer schlecht, aber ich versuche dies gerade zu ändern. ;) Danke für den Hinweis mit tibtable. Ruft das Teil immer die ganze Tabelle ab?

RWarnecke 11. Jul 2012 12:50

AW: Wie langsam ist Firebird über Internet wirklich?
 
Zitat:

Zitat von alleinherrscher (Beitrag 1174309)
Ruft das Teil immer die ganze Tabelle ab?

Jepp. Eine Query ist hier besser.

tsteinmaurer 11. Jul 2012 12:52

AW: Wie langsam ist Firebird über Internet wirklich?
 
Zitat:

Ruft das Teil immer die ganze Tabelle ab?
Dafür kenne ich IBX zu wenig, aber könnte gut sein. Darum auch der Tipp in Bezug auf Monitoring etc. um von Anfang an etwas im Köcher zu haben.

shmia 11. Jul 2012 13:20

AW: Wie langsam ist Firebird über Internet wirklich?
 
Mit einer Query sieht das ganz grob so aus:
Delphi-Quellcode:
query.SQL.Text := 'SELECT COUNT(*) AS Anzahl FROM DOCUMENTS';
query.SQL.Add('WHERE CUSTOMER = '+QuotedStr(inttostr(CustomerID))+' AND MODIFYDATE = '+QuotedStr(DateTimetoStr));
ShowMessage(query.SQL.Text); // zum Debuggen die SQL-Abfrage anzeigen
query.open;
result := query.Fields[0].AsInteger <> 0;
Das lässt sich mit Parametern noch verbessern sollte so aber auch funktionieren.

Lemmy 11. Jul 2012 14:01

AW: Wie langsam ist Firebird über Internet wirklich?
 
Hi,

als Jeff Overcash die IBX vor über 10 Jahren veröffentlicht hat, hat er auch 2 Dinge klar gestellt:

1. TIBTable ist lediglich für die Abwärtskompatibilität da, d.h. sollte nur für Umstellungen (d.h. von DBase, Paradox usw. nach Interbase) verwendet werden und dann durch TIBQuery oder TIBDataSet ersetzt werden
2. IBX werden Firebird nicht unterstützen.

Die IBX funktionieren zwar meistens mit Firebird, aber es wird halt nicht offiziell unterstützt, d.h. kann auf Besonderheiten nicht eingehen.

Wenn es dir nur mal um den GEschwindigkeitsunterschied geht, nimm mal die UIB, bzw. wenn es später um "einfache" Datenbankanwendungen geht (d.h. Datenbank-Query-Datasouce-DBKomponente) dann auch die kommerziellen FIBplus oder IBDAC (gibts sicherlich auch Testversionen von denen). Die funktionieren auch mit den aktuellen Firebird-Versionen ohne "Tricks".

Wenn Du bei Firebird bleiben willst, gibts eine einfache Möglichkeit die Performance rasant zu steigern: Übertrag die Abfrage als Text auf einen "Anwendungsserver" der im lokalen Netz beim FBServer steht (oder direkt auf der selben Maschine läuft), führ die Abfrage dann dort "lokal" aus und übertrag das Ergebnis wiederum per TCP/IP Verbindung an den eigentlichen Client. Dazu hat sich auch mal einer Gedanken gemacht und ein Framework geschrieben, das find ich aber auf die schnelle nicht, oder doch:

http://leonardorame.blogspot.de/2009...work-part.html

da gehts zwar gleich um Objekte, aber auf eine vergleichbare Art und weise kannst Du ja auch ein Abfrageergebnis übertragen...

GRüße

Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:56 Uhr.
Seite 1 von 4  1 23     Letzte »    

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