Moin!
die synchronisation von daten beschäftigt mich schon seit ner ganzen weile. wie funktioniert das? woher weiss die master-datenbank, was sie von der client-db abgleichen soll? sicherlich ist zum beispiel bei einem kalender (mein poket pc und outlook waren der ausschlaggebende grund) ein neues datum, was ich angelegt habe leicht zu synchronisieren. aber woher weiss nun das programm, dass der termin auf dem einen gerät angelegt und nicht auf dem anderen gelöscht wurde?
In Abhängigkeit von den typischen Datenbewegungen (gehts zwingend nur in eine Richtung, oder in beide?) und den Änderungswahrscheinlichkeiten (wird immer an beiden Stellen alles gleichzeitig geändert, oder üblicherweise nur wenig geändert, und wenn dann auch nur zwischen zwei Synchronisationen an einer Stelle - oder nicht an denselben Datensätzen) kann man gewisse Hilfsdaten verwenden.
Am Beispiel "Adressdatensätze":
Zusätzlich zu den Daten gibts ein Feld "geändert" als true/false-Flag. Wird ein Datensatz neu angelegt oder verändert, wird das Feld auf true gesetzt. Wird es zur Gegenstelle synchronisiert, dann wird es auf false gesetzt.
Neue Datensätze, die nur auf der einen Datenbank auftauchen, werden beim Sync dann immer anhand dieses Flags erkannt und übertragen. Gelöschte Datensätze haben genau wie neue Datensätze kein Gegenstück - der Unterschied ist, dass neue Datensätze als "geändert" gekennzeichnet sind, und (noch nicht) gelöschte Datensätze als "unverändert".
Wenn man das ganze auch noch mit mehreren Datenstationen (ein PDA an mehreren unabhängigen Computern) funktionieren soll, dann speichert man zusätzlich noch das Datum der letzten Änderung mit ab und vergleicht, welcher Datensatz neuer ist.
Was damit allerdings nicht funktioniert: Wenn auf beiden Stationen die gleiche Adresse geändert wird, kann man das mit diesem System nicht feststellen, sondern müßte im Prinzip auf eine Protokollierung sämtlicher Änderungen zurückgehen, die gemacht wurden. Wenn auf dem PDA die Telefonnummer und auf dem PC die Hausnummer geändert wurde, sind das ja im Grundsatz zwei konfliktfreie Änderungen, das Ergebnis sollte ein Datensatz sein, in dem beide Änderungen auftauchen.
Richtig problematisch wird es, wenn auf beiden Stationen dasselbe Feld geändert wurde, wobei Änderungen auf den gleichen Wert immer noch kein Problem darstellen. Unterschiedliche Werte hingegen sind problematisch, also beispielsweise die Telefonnummer einmal auf die neue Zentrale, und einmal auf die Durchwahl. Oder eine neue Nummer ist falsch, die andere richtig. Welche Angabe ist dann als korrekt zu bewerten? Ein Computer kann das nicht entscheiden, weshalb man in der Konzeption solcher Synchronisationen diesen Fall entweder ausschließt (entweder dadurch, dass Änderungen nur an einer zentralen Datenbank vorgenommen werden, oder dass der Änderungswunsch zunächst eine Schreibblockade auf allen angeschlossenen, zu synchronisierenden Stationen erstellen muss, damit niemand anders den Datensatz parallel ändert - mir gefällt der zweite Ansatz allerdings überhaupt nicht), oder im Konfliktfall den Benutzer fragt, welche Information denn jetzt korrekt ist.
Das Problem mit der Nachfrage: Derjenige, der gefragt wird, ist mit so einer Frage unter Umständen überfordert. Er wird in seinem Arbeitsfluß "nur mal eben schnell abgleichen, ich muß gleich weg" unterbrochen und kriegt komplizierte Fragen gestellt, die er mitunter gar nicht so direkt beantworten kann. Beispielsweise wenn der Chef mobil eine Telefonnummer ändert, und die Sekretärin am Rechner ebenfalls, aber eben anders.
- Sven Rautenberg
"Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)