MiSchmi,
ich denke, dein grundlegender Ansatz ist das Problem.
Du solltest nicht direkt in der Datenbank arbeiten, sondern stattdessen ein botschaftbasierendes System verwenden.
Die Datenbankverbindung hat ja erkennbar den großen Nachteil, daß sie hohe Antwortzeiten für die jeweilige Abfrage besitzt. Du sitzt also de facto mit einer DSL-Leitung an einer Datenbank, die eine Verbindung in Echtzeit erfordert.
Im LAN sind Pingzeiten unter 200 ms normal, im Internet dagegen nicht.
Deine 30Kbit/s sind rein theoretisch=hypothetisch und ergeben sich aus der Größe des Pakets und der jeweiligen Antwortdauer.
Würdest du aus 10 einzelnen Paketen (bspw. 1Paket=1024 Bytes) mit je 200-1000 ms Antwortzeit ein einzelnes Paket (10240 Bytes) mit der gleichen Antwortzeit machen, hättest du geschwindigkeitsmäßig schon viel gewonnen. Je mehr du in ein Paket packst, umso besser.
Der große Nachteil momentan (und Grund für den Geschwindigkeitseinbruch) ist, daß du durch die langen Pingzeiten der einzelnen Pakete deine Bandbreite niemals voll ausschöpfst.
Drum kriegste auch nur 4KB/sec.
Vorteil wäre, daß deine Anwendung auch über eine 9.600-Baud-Modem-Verbindung laufen würde, entsprechende Geduld vorausgesetzt ... aber das wäre bei einem botschaftsbasierenden System genau so. :-)
MiSchmi wrote:SOAP: Hey, klinkt interessant. Hat zwar nicht mit meinem aktuellen Problem zu tun (?), aber die Moeglichkeit eines Zugriffs ueber SOAP macht mich neugierig. Wird das von irgendeiner DB angeboten (MySql), oder handelt es sich dabei um eine Eigenentwicklung?
"Hat zwar nicht mit meinem aktuellen Problem zu tun?"
Doch ... botschaftsbasierendes System.
Nein, wird nicht von irgendeiner DB angeboten.
Es ist eine Entwicklung, die zum aktuellen Webstandard gehört.
Serverseitig:
Perl programmieren können, Perlmodul schreiben, Perlmodul testen, das Perlmodul als SOAP-Modul verwenden. Fertig.
Clientseitig:
Borland Delphi mit Indy Komponenten und Indy SOAP Komponenten (war mal auf der Homepage
http://www.nevrona.com, kann jetzt noch unter ftp.nevrona.com liegen ... ), SOAP-Envelope und SOAP-Body vorbereiten, per HTTP (oder HTTPS) an einen Soap-Proxy POSTen.
Der Aufbau ist einfach:
- Clientprogramm sendet SOAP-Botschaft an den Server.
- Der Server hat einen SOAP-Proxy zum Parsen der Botschaften.
- Dieser Proxy leitet das SOAP-Paket an das entsprechende Perlmodul und die entsprechende Funktion weiter.
- Der Server antwortet mit dem Ergebnis der angesprochenen Funktion.
Eine SOAP-Botschaft sieht immer so aus (stark vereinfacht):
<SOAP-ENVELOPE >
<SOAP-BODY m:Funktionsname>
<PARAMETER1>PARAMETERWERT1</PARAMETER1>
<PARAMETER2>PARAMETERWERT2</PARAMETER2>
</SOAP-BODY>
</SOAP-ENVELOPE>
Request und Response unterscheiden sich hier kaum. Jeder hat den SOAP-Envelope (SOAP-Umschlag) und den SOAP-Body (SOAP-Inhalt).
Anleitungen dazu gibts unter
http://www.soaplite.com.
SOAP::Lite ist SOAP, aber nur dessen Grundlagen ohne weiterführende Funktionen. Alles andere kann man sich dann selbst anprogrammieren, und das ist sowieso immer optimal.
pierro