Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Umsetzung einer Datensynchronisierung zwischen zwei Datenbanken (https://www.delphipraxis.net/189026-umsetzung-einer-datensynchronisierung-zwischen-zwei-datenbanken.html)

BUG 27. Apr 2016 20:56

AW: Umsetzung einer Datensynchronisierung zwischen zwei Datenbanken
 
Zitat:

Zitat von jobo (Beitrag 1336861)
ich würde aber "ausschließlich technisch" sagen.

Stimmt schon natürlich :stupid:

Zitat:

Zitat von Sir Rufo (Beitrag 1336860)
Statt eines Zeitstempels nimmt man eine RowVersion und inkrementiert diese bei jeder Änderung des Datensatzes.

Damit lässt sich schon etwas anfangen. Aber dafür müssen die Daten halt passend strukturiert sein und man muss sich vorher Gedanken gemacht haben, was passieren kann.

Namen wir an, wir haben eine Datenbank und jeder Nutzer hat ein Punktekonto (id, punkte). Während der Client getrennt ist, überweist dieser 5 Punkte von Alice an Bob. Auf dem Onlineserver bekommt Bob 10 Punkte für gutes Benehmen gutgeschrieben.
Wenn ich dann nicht auch die Transaktionen als neue Spalte gespeichert haben, dann kann ich Fehler zwar erkennen, für die Fehlerbehebung (selbst manuelle) sieht es düster aus.

madas 27. Apr 2016 21:02

AW: Umsetzung einer Datensynchronisierung zwischen zwei Datenbanken
 
Zitat:

Zitat von BUG (Beitrag 1336862)
Namen wir an, wir haben eine Datenbank und jeder Nutzer hat ein Punktekonto (id, punkte). Während der Client getrennt ist, überweist dieser 5 Punkte von Alice an Bob. Auf dem Onlineserver bekommt Bob 10 Punkte für gutes Benehmen gutgeschrieben.
Wenn ich dann nicht auch die Transaktionen als neue Spalte gespeichert haben, dann kann ich Fehler zwar erkennen, für die Fehlerbehebung (selbst manuelle) sieht es düster aus.

Für diesen Fall kann man ja History-Tabelle mitführen. :D

Sprich wenn (Client.RowVersion > Client.RemoteRowVersion) && (Server.RowVersion > Client.RemoteRowVersion) dann müsste man mit den History-Tabellen arbeiten bzw. diese beim Abgleich mit einbeziehen.

RWarnecke 27. Apr 2016 21:07

AW: Umsetzung einer Datensynchronisierung zwischen zwei Datenbanken
 
Hallo zusammen,

danke für die vielen Antworten. Ich glaube, dass ich für mein Vorhaben das nochmal überdenken muss, ob ich wirklich eine Synchronisierung in zwei Richtungen realisiere. Nach den ganzen Posts, tendiere ich immer mehr zu einem Live System, wo das mobile Gerät direkt über einen Dienst auf die Datenbank zugreift.

Aber ich bin immer noch für weitere Vorschläge offen, da es ja bis jetzt immer noch irgendwo einen Haken gibt. Wobei ich sagen muss, je länger ich darüber nachdenke, es aus meiner Sicht keine hundertprozentige Lösung für die Konstellation SQLite <--> FirebirdSQL und SQLite <--> MSSQL gibt. Da die Software, die auf dem Desktop genutzt wird beiden Datenbanken unterstützt (MSSQL und FirebirdSQL).

Sir Rufo 27. Apr 2016 21:10

AW: Umsetzung einer Datensynchronisierung zwischen zwei Datenbanken
 
@BUG

Es gibt Stammdaten (Alice, Bob), Bewegungsdaten (5 Punkte von Alice nach Bob, 20 Punkte an Bob) und dann die kumulierten Daten (Saldo für Alice, Bob).

Die Stammdaten und Bewegungsdaten werden zwischen den Systemen ausgetauscht. Die kumulierten Werte bildet jedes System selber.

Nur so zum Verständnis, ein Update sieht dann z.B. so aus
Delphi-Quellcode:
Query.SQL.Text := 'UPDATE person SET version = version+1, deleted = :deleted, name = :name WHERE id=:id AND version = :version';
Query.ParamByName('id').Value := aPerson.Id;
Query.ParamByName('version').Value := aPerson.Version;
Query.ParamByName('deleted').Value := aPerson.Deleted;
Query.ParamByName('name').Value := aPerson.Name;

Query.ExecSQL;

if Query.RowsAffected = 0 then
  raise EConcurrencyException.Create('Datensatz wurde schon vorher geändert');


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz