Hi,
denke schon eine Weile darüber nach, wie man Replikation in RDBMS programmieren kann. Für mich viel wichtiger ist die Möglichkeit der Replikation User <---> Server. Denn das ermöglicht dem User mit organisationsweiten Daten zu arbeiten, ohne dass er irgendwie mit einem Netzwerk verbunden ist.
Ich ahne schon seit geraumer Zeit, dass dies mit den neuen schlanken RDBMS geht (wie Cloudscape, dass IBM nun an Apache verschenkt hat und dann Derby heisst).
Cloudscape ist ähnlich wie HSQLDB (oder so ähnlich) so klein, dass es auf dem Client als jar in eine Java Anwendung gepackt werden kann. Es gibt dann also eine Art RDBMS per User.
Wenn man selbst ein RDBMS Schema erstellt, kann es nicht so schwierig sein, dass so zu machen, dass eine Replizierung wirklich einfach ist.
Bedingung: Jeder Datensatz in jeder Tabelle hat
immer eine eindeutige ID, was nicht schwierig ist da moderne RDBMS das automatisch erzeugen. Ausserdem ist das sowieso best practice für Datenbankdesign. Zumindest wiederholen das die von mir quasi-religiös verehrten Gavin King / Andreas Bauer in "Hibernate in Action" quasi gebetsmühlenartig.
Pro Datensatz müsste dann ausserdem ein lastEdited Feld geben.
Der Client initiiert immer die Replizierung und zwar als pull-push.
Der Client hat Zeit/Datum der letzten Replizierung mit dem Server in der Datenbank oder sonstwo gespeichert.
Der Client hält eine Liste der Namen der zur replizierenden Tabellen. Und zwar in einer bestimmten Reihenfolge, um nicht gegen irgendwelche Referentielle Integritäts Constraints zu verstossen.
Der Client sendet und empfängt immer die Datensätze, die nach dem Zeitpunkt der letzten Replizierung geändert worden sind.
Für die auf den Server gepushten Datensätze müsste in der Server-Haupt-Datenbank eine neue eindeutige ID pro Datensatz erzeugt werden und dann an den Client zurückgesendet werden.
Senden-Empfangen zwischen Client-Server kann sinnvollerweise über Webservices oder sonstwie laufen. Nicht so das Problem.
hier ist ein Interview von einem Kollegen von Ed.
http://www-106.ibm.com/developerworks/db2/library/techarticle/dm-0410prial/Interessant finde ich den Satz:
I mentioned that IBM Workplace uses Cloudscape on the client side for automatic replication back to the server.
Ein paar Kollegen von mir waren letztens bei einer IBM Veranstaltung zu Lotus Workplace. Die behaupteten das wäre dort z.Zt. so gelöst, dass zu Beginn einer Connection Client - Server
sämtliche Dokumente vom Server zum Client gesendet werden. Das ist ja wohl keine Replikation. Vielleicht haben die sich verhört oder IBM hat das für dieses Produkt im - meiner Meinung nach - Beta-Stadium noch nicht implementiert.
Technisch möglich dürfte es sein. Oder?