Mailinglisten-Archive |
> ein konzeptionelles Problem,was ich mir seit einiger Zeit stelle. > Beispiel ShopSystem:Es existieren zwei MySQL-Server, > der eine Online,der andere lokal. > Auf der OnlineSeite kommt es zur Bestellannahme,lokal werden die Artikel = > gepflegt. > Nun sollen beide Datenbanken synchronisiert werden. > Wie geh ich so etwas an? Ich arbeite momentan an einem Projekt (Sales Support Application) für die hollänidsche KPN bei dem etwa 450 Klient Access Datenbanken (der Salespersons) mit einer zentralen Server Datenbank per Email synchronsiert werden müssen. Die Produktdaten werden dabei auf dem Server gepflegt. Man kann dann immer Versionsupdates an die Klienten schicken. Immer wenn man einen Datensatz ändert wird dessen Versionsfeld auf die aktuelle Version gesetzt. Bei einem Export werden alle Datensätze bei denen das Versionsfeld auf die aktuelle Version gesetzt ist exportiert und die Version hochgezählt. Man kann auch die kompletten Daten an die Klienten exportieren. Sobald die Klients ihre Daten (keine Produktdaten sondern Offerten für deren Kunden) an den Server exportiert haben, sind diese solange bei ihnen gesperrt. Sobald der Server sie bearbeitet (modifiziert) hat und zurück an den Klient exportiert hat kann dieser sie wieder bearbeiten. >Das kann aber Probleme geben, wenn z.B. ein Artikel bestellt wird, >der in der Offlinedatenbank währenddessen gelöscht wurde. >Solche Integritätsverletzungen müßte man dann durch einen >einen Extra-Status frei nach der Devise "Datenbank gelockt, jetzt >keine Transaktionen" zu bestimmten Zeitpunkten abfangen. >Aber das wird dann immmer kompliziert ;-) . Wir haben das so gelöst in dem Produkte ein Gültig_bis Feld haben. Sobald dieses Datum erreicht ist können sie einem Kunden nicht mehr angeboten werden. Sie können also dann nach diesem Datum irgendwann gelöscht werden. Im allgemeinen ist es sinnvoll jedem Datensatz einen Timestamp zu verpassen, damit man sicherstellen kann nur das der richtige Datensatzt gupdated wird. Ansonsten kann es passieren dass in einer Klient db einer neuer Datensatz mit demselben Primary Key wie ein bereits auf dem Server (oder einem anderen Klienten) existierender angelegt wird. Durch Vergleich des Timestamp kann so etwas abgefangen werden und das Primary Key Problem gelöst werden. Gruß Flori Florian Clever Phone.: ++49 (0)761 7070268 / Fax.: ++49 (0)761 23565 Email: clever_(at)_aracnet.com / Internet: http://www.aracnet.com/~clever Zasiusstr. 45 / D-79102 Freiburg / Germany
php::bar PHP Wiki - Listenarchive