Software-Update per Datenbank
am 26.06.2006 15:52:17 von spam
Hallo, ich brauche mal Rat zu folgender Problematik:
Ich entwickle ein BDE-System, das in einer Druckerei eingesetzt wird und
einmal ca. 40 ... 50 Clients umfassen soll. Da vor Allem in der
Anfangsphase sicher häufig Updates der Client-Software nötig werden und
es ziemlich aufwändig wäre, durch den ganzen Betrieb zu rennen, dachte
ich mir, ich mache die Updates mit über die Datenbank. Zudem sollten aus
Sicherheitsgründen keinerlei Dateifreigaben o.ä. eingerichtet werden,
lediglich TCP/IP auf Port 3306 ist offen ... und die Rechner sind total
verammelt (kein FD/CD, kein USB usw.).
Die Client-Software ist etwa 2,5 MB groß. Ich habe sie mit einem
selbstgeschriebenen Tool in 1 KB große Segmente zerlegt und zusammen mit
Feldern für Versionsnummer,Segmentnummer und Gesamtzahl der Segmente in
eine eigene Tabelle gepumpt.
Wenn nun ein Client feststellt, in der Datenbank gibt es eine neuere
Version, beginnt er in einem Hintergrundprozess, die Segmente zu laden,
zu entpacken, zusammenzusetzen und lokal zu speichern. Ist die Datei
vollständig, wird beim nächsten Einbuchen eines Auftrages der aktuelle
Client kurz beendet und statt dessen die neue Version gestartet. Das
dauert nur Sekunden.
Das funktioniert auch Alles prima. Was mir jetzt nicht so richtig klar
ist (mangels Erfahrungen und Testmöglichkeiten mit richtig vielen
Clients):
a) wäre es besser, die Segmente kleiner/größer zu machen? Womit kommt
MySQL besser zurecht?
b) wie verhindere ich, dass alle Clients quasi gleichzeitig anfangen zu
saugen und damit den Server ausbremsen? "Zeitschlitze" nach IP-Adressen,
Kostenstellen, Abteilungen? Tablelocking?
Der eigentliche BDE-Prozess ist eher genügsam, max. einige huntert Byte
pro Minute von/zur Datenbank.
Danke für Tips. Frank
Re: Software-Update per Datenbank
am 26.06.2006 16:27:30 von Frank Schenk
Hallo Namensvetter,
Frank Esselbach wrote:
> Ich entwickle ein BDE-System, das in einer Druckerei eingesetzt wird und
> einmal ca. 40 ... 50 Clients umfassen soll. Da vor Allem in der
> Anfangsphase sicher häufig Updates der Client-Software nötig werden und
> es ziemlich aufwändig wäre, durch den ganzen Betrieb zu rennen, dachte
> ich mir, ich mache die Updates mit über die Datenbank. Zudem sollten aus
> Sicherheitsgründen keinerlei Dateifreigaben o.ä. eingerichtet werden,
> lediglich TCP/IP auf Port 3306 ist offen ... und die Rechner sind total
> verammelt (kein FD/CD, kein USB usw.).
ich würde es bevorzugen, auf dem Datenbankserver eine Serversoftware
bereitzustellen (Python/Perl/PHP) die Anfragen entgegennimmt, Rechte
verwaltet (welche IPs, welche User dürfen was machen) und die die Daten
ausliefert. Ob man die Updates per Push vom Server verteilt oder per
Pull vom Client ist eigentlich egal, in der Software kann man festlegen,
wieviele Clients (evtl. noch mit welcher Datenrate) gleichzeitig updaten
können.
> Die Client-Software ist etwa 2,5 MB groß. Ich habe sie mit einem
> selbstgeschriebenen Tool in 1 KB große Segmente zerlegt und zusammen mit
> Feldern für Versionsnummer,Segmentnummer und Gesamtzahl der Segmente in
> eine eigene Tabelle gepumpt.
Gibt es einen bestimmten Grund, die Daten zu splitten?
Datentypen für binäre Daten wären z.B.:
TINYBLOB, 255 (8-bit length)
BLOB, 65535 (16-bit length)
MEDIUMBLOB, 16777215 (24-bit length)
LONGBLOB, 4294967295 (32-bit length)
Wobei ich die Datei im Dateisystem anlegen würde und in der Tabelle nur
die Dateiinformationen (Datum, Version, Pfad etc) ablegen würde.
> a) wäre es besser, die Segmente kleiner/größer zu machen? Womit kommt
> MySQL besser zurecht?
Warum schnippelst du Datein in Stücke? Datein kann ein DBMS oder, vor
allem, ein Filesystem viel besser behandeln.
> b) wie verhindere ich, dass alle Clients quasi gleichzeitig anfangen zu
> saugen und damit den Server ausbremsen? "Zeitschlitze" nach IP-Adressen,
> Kostenstellen, Abteilungen? Tablelocking?
Siehe oben, einen kleinen Server in beliebiger Sprache aufsetzen der die
Requests behandelt und entsprechend die Dateien ausliefert (oder halt
ein 'Sorry, zur Zeit ist der Server voll belegt o.ä.)
Frank
Re: Software-Update per Datenbank
am 26.06.2006 16:35:16 von Christian Kirsch
Frank Esselbach schrieb:
--
Christian Kirsch
Heise Zeitschriften Verlag * iX-Magazin
Tel +49-511-5352-590 Fax +49-30-78702289
KEINE ANNAHME VON DOC-DATEIEN * NO DOC FILES, PLEASE
> Hallo, ich brauche mal Rat zu folgender Problematik:
>
> Ich entwickle ein BDE-System, das in einer Druckerei eingesetzt wird und
> einmal ca. 40 ... 50 Clients umfassen soll. Da vor Allem in der
> Anfangsphase sicher häufig Updates der Client-Software nötig werden und
> es ziemlich aufwändig wäre, durch den ganzen Betrieb zu rennen, dachte
> ich mir, ich mache die Updates mit über die Datenbank. Zudem sollten aus
> Sicherheitsgründen keinerlei Dateifreigaben o.ä. eingerichtet werden,
> lediglich TCP/IP auf Port 3306 ist offen ... und die Rechner sind total
> verammelt (kein FD/CD, kein USB usw.).
>
> Die Client-Software ist etwa 2,5 MB groß. Ich habe sie mit einem
> selbstgeschriebenen Tool in 1 KB große Segmente zerlegt und zusammen mit
> Feldern für Versionsnummer,Segmentnummer und Gesamtzahl der Segmente in
> eine eigene Tabelle gepumpt.
>
Was spricht gegen einen HTTP-Client? Der läuft auf dem Server und
jeder Client hat automagisch sofort die aktuelle Version. Ausgerechnet
so eine Overlay-Geschichte ist viel zu aufwendig und fehlerträchtig, ME.