|
DB Update auf dem WWW-ServerSchon mal versucht, eine mdb Datenbank, die online ist, zu aktualisieren? Und das auch noch während eines Live-Events, bei dem ständig die aktuellen Ergebnisse aus dem Zeiterfassungssystem abgegriffen und via Internet zur Verfügung gestellt werden? Warum nicht einfach alle 20 Minuten eine mdb kopieren?Tja, erstens sollte ja schon live drin sein, wenn live drauf steht - das Problem liegt aber an einer anderen Stelle. Für den Wettkampftag waren auf den Server bis zu 80.000 Zugriffe erwartet. Die Datenbank mit den Startlisten und den Ergebnissen konnte bereits Wochen vor dem Event nicht mehr via FTP überschrieben werden - sie war praktisch rund um die Uhr im Gebrauch. Gibt's denn da nix, was man machen kann?Logisch, eine simple TCP/IP Verbindung zur Datenbank oder ein
Progrämmchen aus der Developer Version von Office oder eine RDO
Verbindung. Dann halt selbst ans Werk:Hier nur kurz die Grundidee des Programms. Da eine solche Lösung stark vom Umfeld und den speziellen Anforderungen an die Datenbankaktualisierung abhängt, dürfte die Realisierung eigener Programme vor allem Anforderungen an die Problemspezifikation und weniger an das Ausprogrammieren stellen.
Die lokale Steuerungs Datenbank "merkt" sich, welche Datensätze bereits auf dem WWW-Server aktualisiert sind und frägt die Datenbank mit den aktuellen Daten (hier die Endzeiten aller Starter) nach Neuerungen ab und sendet diese anschliessend an die Internet Maschine. 1. Kurz und knapp: unser ProblemDie Startnummern und damit (vereinfacht) der Primärschlüssel standen bei Beginn des Rennens natürlich fest. Das Problem konnte also auf die WWW-Aktualisierung derjenigen Starter reduziert werden, die bereits im Ziel waren, d.h. deren Endzeit auf der "Ergebnis DB" des Zeitnahmesystems verfügbar (NOT NULL) waren. 2. Auf der lokalen SteuermaschineEine Verbindung zu den Tabellen in der Zeitnahme Datenbank (war Oracle), eine lokale Tabelle mit den Startnummern, die bereits ins Internet überstellt worden sind ("IsUpdated") und eine Abfrage, die alle Starter mit ihren Zeiten liefert, deren Startnummer noch nicht in IsUpdated enthalten sind und deren Endzeit auf der Zeitnahme DB NOT NULL ist. 3. Auf dem WWW ServerVia .idc musste lediglich ein Statement zur Verfügung gestellt werden: UPDATE StarterIronman
SET SchwimmZeit = %Schwimm%
WechselZeit1 = %Wechsel1%
...
WHERE StartNr = %Nr%
Für Diagnosezwecke liefert dann die .htx das Wort "ok" sowie die Startnummer zurück. 4. Alles zusammen: Update der Internet-DBKurz skizziert: Hole alle Starter in ErgDB mit Erg.EndZeit <> NULL und NOT IN IsUpdated For Each Starter do GeheZuHTTPAdresse "...idc?Schwimm=" & Format$(Erg.Schwimmzeit) & ... Wenn Antwort enthält "ok" (im Explorer Ereignis ausprogrammiert) dann Insert Startnummer in LokDB als IsUpdated ... und das ganze alle 1-2 Minuten. Und wie macht man das ganze heute?Tja, dieser etwas ältere Tipp stammt noch aus der Zeit vor ASP. Insbesondere, wenn sämtliche Zeiten (insgesamt sind dies beim Triathlon immerhin 6 + in unserem Fall 5 Zwischenzeiten und das für 2300 Starter!) hochgeladen werden sollen, müssen die http-Anfragen optimiert werden: einfach alle paar Minuten eine Datei mit den Updates hochladen und dann per ASP komplett einlesen.
|