Einzelnen Beitrag anzeigen

Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
671 Beiträge
 
FreePascal / Lazarus
 
#23

AW: Wie langsam ist Firebird über Internet wirklich?

  Alt 11. Jul 2012, 23:40
Moin,

wie hier schon mehrfach erwähnt, bringt jedes execsql oder open immer diverse Datenpakete vom Client zum Server und zurück.
Auch einfach nur mit next durch die Datenmenge zu laufen erzeugt blockweise Traffic.

Da greift jeweils die Latenz, sprich wie lange dauert der Ping. Wenn dein Server auf localhost ist, dann merkst du das nicht,
im lokalen Netzwerk auch eher nicht, weil ping zeit 1ms o.ä., wenn dein Server über gute Leitung mit schneller Ping zeit
extern in irgendeinem Rechenzentrum erreichbar ist, dann geht pro Paket 15-20 ms drauf. Da sind 50 Pakete ca. eine Sekunde.
Ist dein server in Australien, dann sind 300-400ms schon ganz gute Werte, aber 50 Pakete ca. 15-20 Sekunden.

Bei jedem open und execsql kannst du die pingzeit schon mal mit 10 multiplizieren, auch jeder parambyname erhöht das ganze noch mal.

Es hilft also nur, die Anzahl Datenpakete möglichst zu minimieren, genau so machen das auch http Server: Du sendest einen Request
und der Webserver liefert dir einen unidirektionalen Datenstrom, den du lokal auswertest. Wenn du in einer Ajax Webanwendung
einen ähnlichen Quatsch programmierst und jede Zeile im Grid einzeln in eigenen requests abholst, dann läuft das genau so langsam.
Macht man aber bei Webanwendungen nicht freiwillig.

Man kann das auch mit Firebird minimieren, ich hatte dafür hier mal einen kleinen Denkanstoß veröffentlicht:
link

Vielleicht ist das für dich schon passend, die E-Mails, die du abholen willst, liegen ja sicherlich eh als Blob vor. Daher
konstruier dir einfach eine SP, wo du deinen Befehl selbst gestalten kannst und den als Blob parameter zum Server sendest.
Dann hol dir das Ergebnis in einem einzigen Blob zurück, mit von dir definierten Trennern, die du dann ggf lokal wieder
zum auseinandernehmen benutzen kannst. Das gleiche Format kannst du auch im Firebird Server zum senden benutzen:
Nichts hindert dich daran, den Quellcode von 100 E-Mails mit deinem Trenner zusammenzupacken und das als ein Blobparam an
die SP auf dem FBServer zu senden, der die dann lokal wieder mit deinem Trenner auseinander nimmt.
Die Geschwindigkeit ist dann eher durch die Bandbreite der Verbindung limitiert als durch die Ping Zeit.

Per UDF kannst du den Datenstrom dann serverseitig noch komprimieren und Clientseitig ggf mit der gleichen Funktion wieder
entpacken. Solche UDFs kannst du ggf mit Delphi für win32 oder xe2 auch für win64 FB Server in Pascal Code schreiben
(oder auch mit Lazarus, dann auch noch für Linux u.a., wir haben das für Kunden bereits mit lazarus gemacht).

Die Frage ist also eigentlich nicht wie langsam Firebird über das Internet wirklich ist, sondern bist du bereit, die
Möglichkeiten auszunutzen, um den maximalen Speed rauszuholen. Der Umweg über die Blob I/O Prozedur ist eigentlich nichts
anderes als das was Application Server machen, die als Middleware da zwischen gepackt werden. Damit fehlen dann bei Appserver
aber schnell Dinge wie echte Transaktionskontrolle oder du mußt ein weiteres Protokoll implementieren, was dir am ende nicht
wirklich Vorteile bringt. Wenn du das auf Basis der o.a. I/O SP machst musst du wenig neues lernen ....
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat