AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Wie langsam ist Firebird über Internet wirklich?

Wie langsam ist Firebird über Internet wirklich?

Ein Thema von alleinherrscher · begonnen am 11. Jul 2012 · letzter Beitrag vom 6. Aug 2012
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#1

Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 13:03
Datenbank: Firebird • Version: 2.5 • Zugriff über: IB
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
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#2

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 13:26
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, ...)?
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 13:33
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.
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS

Geändert von alleinherrscher (11. Jul 2012 um 13:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#4

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 13:35
Das schreit doch förmlich nach einer Stored Procedure oder einer View.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#5

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 13:37
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.
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 13:44
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?
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#7

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 13:50
Ruft das Teil immer die ganze Tabelle ab?
Jepp. Eine Query ist hier besser.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#8

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 13:52
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.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 14:20
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.
Andreas
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.364 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 15:01
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:23 Uhr.
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