offline betrieb?
am 14.09.2006 11:12:29 von Martin Kaffanke
Hallo!
Ein Kunde möchte eventuell in Zukunft eine Offline Version der Datenbank
haben, so dass er nicht im Netz sein muss, wenn er auf die Daten
zugreift, oder sie ändert. Er verwendet Windows...
Welche Möglichkeiten habe ich?
Eventuell könnte ich ein openoffice frontend bauen, das geht ja mit odbc
recht gut, wie ich gerade probiert habe. Allerdings weià ich nicht ob es
da Möglichkeiten gibt für einen offline Modus. Technisch stelle ich mir
das ohnehin schwierig vor, weil die offline Daten später wieder in den
Server synchronisiert werden müssen, und dort können sich die Daten aber
bereits verändert haben. Vor allem wenn neue Einträge hinzukommen, so
haben die dann die gleiche ID, das muss dann irgendwie aufgelöst werden
und ist dann erschwert, wenn man one to many oder many to many
relationships hat.
Gibts überhaupt eine Möglichkeit eine offline Version zur Verfügung zu
stellen?
Danke,
Martin
Re: offline betrieb?
am 14.09.2006 11:25:40 von Christian Kirsch
Am 14.09.2006 11:12 schrieb Martin Kaffanke:
> Hallo!
>
> Ein Kunde möchte eventuell in Zukunft eine Offline Version der Datenbank
> haben, so dass er nicht im Netz sein muss, wenn er auf die Daten
> zugreift, oder sie ändert. Er verwendet Windows...
Du meinst also eine lokal installierte Datenbank?
>
> Welche Möglichkeiten habe ich?
>
Für was jetzt? MySQL ist es relativ wurscht, ob man von einem lokalen
Client oder remote zugreift.
> Eventuell könnte ich ein openoffice frontend bauen, das geht ja mit odbc
> recht gut, wie ich gerade probiert habe.
Für leidlich anspruchsvolle Aufgaben würde ich davon abraten.
Gugelgruppen verrät Dir mehr dazu, was bei OOo/ODBC so alles schief
gehen kann (de.comp.office-pakete.staroffice.misc). Aber warum soll
der Kunde lokal einen anderen Client benutzen als bei der üblichen Arbeit?
> Allerdings weiß ich nicht ob es
> da Möglichkeiten gibt für einen offline Modus.
Was *meinst* Du denn nun mit "offline"? Laufen muss die Datenbank
schon, sonst kann man sie nicht fragen.
> Technisch stelle ich mir
> das ohnehin schwierig vor, weil die offline Daten später wieder in den
> Server synchronisiert werden müssen, und dort können sich die Daten aber
> bereits verändert haben.
Zwei-Wege-Synchronisierung?
> Vor allem wenn neue Einträge hinzukommen, so
> haben die dann die gleiche ID, das muss dann irgendwie aufgelöst werden
> und ist dann erschwert, wenn man one to many oder many to many
> relationships hat.
>
> Gibts überhaupt eine Möglichkeit eine offline Version zur Verfügung zu
> stellen?
Du willst also eine Kopie der Daten irgendwie lokal vorhalten. Der
Anwender soll mit denen alles machen dürfen. Gleichzeitig kann sich
das Original der Daten beliebig verändern. Irgendwann sollen dann alle
Änderungen irgendwie magisch zu einem sinnvollen Neuen verschmelzen.
Lokal hat also jemand das Gehalt des Mitarbeiters um 10% erhöht, im
Original wurde er gefeuert. *Was* ist jetzt das gewünschte Ergebnis
der Synchronisierung?
Wenn Dir dazu eine algorithmische Lösung einfällt, kannst Du
vermutlich sehr, sehr reich werden. Wenn es schon eine gibt, dürfte
sie sehr, sehr viel kosten.
Krücken sind natürlich denkbar: getrennte Nummernkreise für Kopie und
Original können in Grenzen Konflikte bei neuen Datensätzen vermeiden.
Aber beliebige Änderungen können weiterhin zu beliebigen Konflikten
führen.
Re: offline betrieb?
am 14.09.2006 11:58:24 von Martin Kaffanke
Am Thu, 14 Sep 2006 11:25:40 +0200 schrieb Christian Kirsch:
> Du willst also eine Kopie der Daten irgendwie lokal vorhalten. Der
> Anwender soll mit denen alles machen dürfen. Gleichzeitig kann sich
> das Original der Daten beliebig verändern. Irgendwann sollen dann alle
> Ãnderungen irgendwie magisch zu einem sinnvollen Neuen verschmelzen.
> Lokal hat also jemand das Gehalt des Mitarbeiters um 10% erhöht, im
> Original wurde er gefeuert. *Was* ist jetzt das gewünschte Ergebnis
> der Synchronisierung?
>
> Wenn Dir dazu eine algorithmische Lösung einfällt, kannst Du
> vermutlich sehr, sehr reich werden. Wenn es schon eine gibt, dürfte
> sie sehr, sehr viel kosten.
>
> Krücken sind natürlich denkbar: getrennte Nummernkreise für Kopie und
> Original können in Grenzen Konflikte bei neuen Datensätzen vermeiden.
> Aber beliebige Ãnderungen können weiterhin zu beliebigen Konflikten
> führen.
So in der Art habe ich mir das auch schon gedacht. Ich wollte der
Sicherheit nach mal nachfragen, weil es für Dateibäume ja gute tools
gibt (subversion, cvs). Im Konfliktfall muss natürlich immer derjenige
der gerade synchronisieren möchte, die Konflikte händisch lösen. Eine
derartige Lösung wäre bestimmt auch in einer datenbank möglich, da wir
aber bei mysql immer davon ausgehen müssen, dass man nicht nur die
Datenbank sondern auch ein Frontend ganz spezifisch zugeschnitten wird,
müsste man auch für so ein Tool ein Frontend ganz spezifisch zuschneiden
können.
Angelehnt an die Idee von Subversion könnte man auf jeden fall ein
derartiges Tool erstellen.
1. Die Lokale Datenbank checkt vom server aus. Der Zeitpunkt des
checkouts wird gespeichert.
2. Beide Datenbanken verändern sich.
3. Die Lokale Datenbank wird wieder eingecheckt, Konflikte werden gelöst.
(dazu muss jede Tabelle zumindest ein mtime (timestamp oder datetime) Feld
haben). Jeder Datensätz deren mtime nach dem zeitpunkt des
checkouts liegt ist betroffen. Hat sich nur lokal was verändert, so
liegt mtime am server vor checkout time, also kann man getrost updaten,
ebenso umgekehrt, wenn sich nur am server was verändert hat. Liegen
beide mtimes eines datensatzes nach dem checkout termin, so muss der User
die Datensätze vergleichen und entscheiden, was jetzt gültigkeit hat.
(Möglicherweise wurden ja beide datensätze in gleicher weise verändert,
dann kann das system das natürlich selber erledigen.)
Probleme machen hier vor allem die neu hinzugefügten datensätze.
Deshalb braucht man zusätzlich noch ein ctime feld (also creation time),
liegt dies nämlich nach dem checkout zeitpunkt, so sind die datensätze
neu. Hier würde ich dann die lokalen datensätze dem server einfach
hinten an stellen. Also einfach die ID von lokal am server auf den
nächsten auto increment wert laden. Und dies natürlich dann in der
lokalen version ebenfalls anpassen.
Also als Lösung könnte das auf jeden Fall durchgehen denke ich.
Allerdings wird sich mein Kunde das nicht leisten können und ich habe
wohl neben dem Studium auch nicht genügend Zeit dafür. Deshalb wollte
ich wissen obs da nicht schon was gibt...
lg,
Martin
Re: offline betrieb?
am 14.09.2006 12:06:14 von Christian Kirsch
Am 14.09.2006 11:58 schrieb Martin Kaffanke:
> Am Thu, 14 Sep 2006 11:25:40 +0200 schrieb Christian Kirsch:
>
>> Du willst also eine Kopie der Daten irgendwie lokal vorhalten. Der
>> Anwender soll mit denen alles machen dürfen. Gleichzeitig kann sich
>> das Original der Daten beliebig verändern. Irgendwann sollen dann alle
>> Änderungen irgendwie magisch zu einem sinnvollen Neuen verschmelzen.
>> Lokal hat also jemand das Gehalt des Mitarbeiters um 10% erhöht, im
>> Original wurde er gefeuert. *Was* ist jetzt das gewünschte Ergebnis
>> der Synchronisierung?
>>
>> Wenn Dir dazu eine algorithmische Lösung einfällt, kannst Du
>> vermutlich sehr, sehr reich werden. Wenn es schon eine gibt, dürfte
>> sie sehr, sehr viel kosten.
>>
>> Krücken sind natürlich denkbar: getrennte Nummernkreise für Kopie und
>> Original können in Grenzen Konflikte bei neuen Datensätzen vermeiden.
>> Aber beliebige Änderungen können weiterhin zu beliebigen Konflikten
>> führen.
>
> So in der Art habe ich mir das auch schon gedacht. Ich wollte der
> Sicherheit nach mal nachfragen, weil es für Dateibäume ja gute tools
> gibt (subversion, cvs).
Die aber auch an Änderungskonflikten scheitern (müssen): Wenn zwei
Entwickler an derselben Datei arbeiten und im selben Bereich
Änderungen durchführen, kann m.E. auch svn nicht entscheiden, wessen
Änderungen "gewinnen".
> Im Konfliktfall muss natürlich immer derjenige
> der gerade synchronisieren möchte, die Konflikte händisch lösen.
ACK.
> Eine
> derartige Lösung wäre bestimmt auch in einer datenbank möglich, da wir
> aber bei mysql immer davon ausgehen müssen, dass man nicht nur die
> Datenbank sondern auch ein Frontend ganz spezifisch zugeschnitten wird,
> müsste man auch für so ein Tool ein Frontend ganz spezifisch zuschneiden
> können.
>
Kann man alles tun. Ob allerdings das Ergebnis den Aufwand lohnt? Wenn
es um sowas wie Kundendaten geht, muss man ja für eine Entscheidung
möglicherweise erstmal zig Leute anrufen oder sich auf anderem Weg ein
Bild von der *gewünschten* Änderung verschaffen. Wäre es da nicht
einfacher, bestimmte Änderungen einfach ganz zu verbieten?
[ Beschreibung eines Sync ]
Übrigens gibt es Großbuchstaben nicht nur, um Dich zu ärgern - sie
erleichtern die Lesbarkeit. Ähnliches gilt für Bindestriche und Kommata.
Re: offline betrieb?
am 14.09.2006 12:16:39 von unknown
Post removed (X-No-Archive: yes)
Re: offline betrieb?
am 14.09.2006 12:19:53 von Martin Kaffanke
Am Thu, 14 Sep 2006 12:06:14 +0200 schrieb Christian Kirsch:
> Kann man alles tun. Ob allerdings das Ergebnis den Aufwand lohnt? Wenn
> es um sowas wie Kundendaten geht, muss man ja für eine Entscheidung
> möglicherweise erstmal zig Leute anrufen oder sich auf anderem Weg ein
> Bild von der *gewünschten* Ãnderung verschaffen.
Oder man loggt mit, wer welche Ãnderungen durchgeführt hat, dann kann
man hier ja nachfragen. Normalerweise müssen die selben Leute nämlich
schon beim Ãndern des Datensatzes angerufen werden. Und ich denke, dass
das dann nur einer in der Firma macht und der andere in der Regel vom Sync
nichts mitkriegt.
> Wäre es da nicht
> einfacher, bestimmte Ãnderungen einfach ganz zu verbieten?
Ich schätze dass es in diesem Fall darauf hinaus läuft, dass es keine
Offline Version geben wird. Ist es nicht leichter eine Internetverbindung
an den relevanten Arbeitsorten herzustellen als eine derartige Software zu
erstellen?
> Ãbrigens gibt es GroÃbuchstaben nicht nur, um Dich zu ärgern - sie
> erleichtern die Lesbarkeit. Ãhnliches gilt für Bindestriche und Kommata.
Ja, ich weiÃ, aber je schneller ich schreibe, desto weniger achte ich
darauf.
lg,
Martin
Re: offline betrieb?
am 14.09.2006 12:22:58 von Martin Kaffanke
Am Thu, 14 Sep 2006 12:16:39 +0200 schrieb Ulrich Gehauf:
> Im Allgemeinen wird sowas gelöst, indem die lokale DB nur zu Lesezwecken
> hergenommen wird (z.B. Auswertungen, Statistiken, Sicherung, ...) und
> Ãnderungen dann auf dem Master ausgeführt werden.
Ok, ich denke, dass wäre schon besser. Muss sich mein Kunde halt auf
Papier notieren was er ändern möchte, wenn er grade kein Netz hat.
Danke für den Tipp.
lg,
Martin
Re: offline betrieb?
am 15.09.2006 02:10:14 von Dirk Brosowski
Martin Kaffanke schrieb:
> Am Thu, 14 Sep 2006 12:06:14 +0200 schrieb Christian Kirsch:
>
>> Kann man alles tun. Ob allerdings das Ergebnis den Aufwand lohnt? Wenn
>> es um sowas wie Kundendaten geht, muss man ja für eine Entscheidung
>> möglicherweise erstmal zig Leute anrufen oder sich auf anderem Weg ein
>> Bild von der *gewünschten* Ãnderung verschaffen.
>
> Oder man loggt mit, wer welche Ãnderungen durchgeführt hat, dann kann
> man hier ja nachfragen. Normalerweise müssen die selben Leute nämlich
> schon beim Ãndern des Datensatzes angerufen werden. Und ich denke, dass
> das dann nur einer in der Firma macht und der andere in der Regel vom Sync
> nichts mitkriegt.
>
>> Wäre es da nicht
>> einfacher, bestimmte Ãnderungen einfach ganz zu verbieten?
>
> Ich schätze dass es in diesem Fall darauf hinaus läuft, dass es keine
> Offline Version geben wird. Ist es nicht leichter eine Internetverbindung
> an den relevanten Arbeitsorten herzustellen als eine derartige Software zu
> erstellen?
Klar, UMTS-Datenkarte und die Sache ist erledigt. Lokal einen Slave für
die Lesevorgänge und Schreibvorgänge dann auf dem Master, welcher
irgendwo "im Internet" steht. Einen lokalen Slave habe ich deswegen
dazugenommen, damit Lesevorgänge fix sind. Hier sollte man aber die
Datenbank schon fragen, wieviele ms sie hinter dem Master liegt und
einen Schwellwert definieren, ab dem dann der Slave als nicht gültig
markiert wird.
GrüÃe
Dirk