phpbar.de logo

Mailinglisten-Archive

[PHP] Synchronisieren von Datenbanken

[PHP] Synchronisieren von Datenbanken

Florian Clever clever_(at)_aracnet.com
Sun, 9 Jan 2000 21:34:51 +0100


> 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