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
tsteinmaurer

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

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 12: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
 
#2

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 12: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 12:36 Uhr)
  Mit Zitat antworten Zitat
tsteinmaurer

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

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 12: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 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, 12:35
Das schreit doch förmlich nach einer Stored Procedure oder einer View.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

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

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 12: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
 
#6

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 12: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
 
#7

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 12: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
 
#8

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 13: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.403 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 14: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
Benutzerbild von alleinherrscher
alleinherrscher

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

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 14:39
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.
@Shima: Okay, die Benutzung von TIBQuery hat die Dauer der Abfrage von 20 Sekunden auf 5 Sekunden verringert. Das ist doch schonmal ein Anfang. Danke!!

@RWarnecke: Denkst du, dass Stored Procedures das ganze schneller machen, als die eine TIBQuery Abfrage von Shmia? Hier wird ja auch nur noch eine einzige Zahl an den Client übermittelt.

@Lemmy Danke für die Tipps. Ich werde Tibtable nicht mehr verwenden. Ich habe auch schon daran gedacht, einen TCP Server zu verwenden, der die DB lokal ansteuert. Habe die Idee aber zunächst verworfen, da der Server ein Debian System ist und ich dann den FPC verwenden müsste + sehr viel Arbeit für das kleine Programm.

Macht es sinn, in meiner Funktion, die 20 mal aufgerufen wird, jedes mal eine neue Transaction zu erstellen und diese hinterher wieder zu zerstören? Wäre es schneller/sinnvoller, die transaction nur einmal zu erstellen?
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Antwort Antwort

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 17:21 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