AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Umsetzung einer Datensynchronisierung zwischen zwei Datenbanken
Thema durchsuchen
Ansicht
Themen-Optionen

Umsetzung einer Datensynchronisierung zwischen zwei Datenbanken

Ein Thema von RWarnecke · begonnen am 27. Apr 2016 · letzter Beitrag vom 27. Apr 2016
Antwort Antwort
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Umsetzung einer Datensynchronisierung zwischen zwei Datenbanken

  Alt 27. Apr 2016, 12:18
Hallo zusammen,

ich habe die Aufgabe eine Synchronisierung zwischen einer SQLite Datenbank und den zwei Datenbanken FirebirdSQL oder MS-SQL zu realisieren. Die SQLite-Datenbank ist auf einem mobilen Gerät, welches im ersten Schritt über WLAN mit den entsprechenden Servern (FirebirdSQL oder MSSQL) die Daten synchronisieren soll. Dabei sollen lediglich nur die entsprechenden Daten synchronisiert werden, so dass es die Möglichkeit gibt die Daten auch Offline zu nutzen. Die Synchronisierung soll in beide Richtungen erfolgen.

Meine Frage, wie kann man jetzt am besten so eine Synchronisierung realisieren ? Dabei geht es nicht um Quelltext sondern um den Aufbau und den Ablauf.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Bambini
(Gast)

n/a Beiträge
 
#2

AW: Umsetzung einer Datensynchronisierung zwischen zwei Datenbanken

  Alt 27. Apr 2016, 12:38
Dabei geht es nicht um Quelltext sondern um den Aufbau und den Ablauf.
Wenn auf beiden Datenbanken gearbeitet wird, kommt man an einem Transaktionslog nicht vorbei.
Jede Datenbank protokolliert welcher Datensatz in welcher Tabelle ukModify, ukInsert oder ukDelete wurde, mit Datum und Uhrzeit.
Dieses Log wird dann beim Sync auf der anderen DB nachgeführt. Spannend wird es wenn es Kollisionen geben kann, d.h. auf beiden Seiten wurde am gleichen Datensatz geändert oder gar gelöscht. Um dies zu erkennen, muss beim Sync beide Transaktionslogs gelesen, verglichen und dann erst abgeglichen werden.

Auch unklar: Was passiert bei abhängigen Daten. Eine Eintrag in der Tabelle 1 hat 1:n Einträge in Tabelle 2. Jetzt löscht einer einen Eintrag in Tabelle 1, vermutlich werden die lösch-Statements für Tabelle 2 auch im Log stehen, aber wenn die andere Seite Einträge in Tabelle 2 hinzugefügt hat??
  Mit Zitat antworten Zitat
hstreicher

Registriert seit: 21. Nov 2009
223 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Umsetzung einer Datensynchronisierung zwischen zwei Datenbanken

  Alt 27. Apr 2016, 12:40
Also ich kenne da 2 Möglichkeiten

1) in die Records ein Flag einbauen "Muss syncronisiert werden" geht aber nur für 1:1 Also 1 Mobilgeräte auf eine Grosse DB

2) Trigger die Geänderte Daten (oder Referenzen darauf) in eine "ToDo" Tabelle schreiben , hier wären bei mehreren Syncronisationspartnern dann eben ein Eintrag pro Ziel notwendig

mfg Hannes
  Mit Zitat antworten Zitat
Bambini
(Gast)

n/a Beiträge
 
#4

AW: Umsetzung einer Datensynchronisierung zwischen zwei Datenbanken

  Alt 27. Apr 2016, 12:44
1) in die Records ein Flag einbauen "Muss syncronisiert werden" geht aber nur für 1:1 Also 1 Mobilgeräte auf eine Grosse DB
Wie klappt das bei ukDelete?
  Mit Zitat antworten Zitat
hstreicher

Registriert seit: 21. Nov 2009
223 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Umsetzung einer Datensynchronisierung zwischen zwei Datenbanken

  Alt 27. Apr 2016, 12:49
wie bei DBase und Co ein Deleted Flag und erst nach der Sync löschen

aber die 2 Lösung ist eh besser
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.164 Beiträge
 
Delphi 12 Athens
 
#6

AW: Umsetzung einer Datensynchronisierung zwischen zwei Datenbanken

  Alt 27. Apr 2016, 16:10
Käme das Briefcase Modell in Frage ?
http://docwiki.embarcadero.com/InterBase/XE7/en/Using_the_Briefcase_Model

http://www.drbob42.com/examine/examin64.htm
https://en.wikipedia.org/wiki/Briefc...oft_Windows%29

Rollo
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

AW: Umsetzung einer Datensynchronisierung zwischen zwei Datenbanken

  Alt 27. Apr 2016, 18:29
Hallo Rolf,

ClientDataset ist schon mal ein guter Gedanke. Die Tücke steckt aber im Detail, wenn die Synchronisierung in beide Richtungen erfolgen soll. Doch das ist dir ja wohl selber bewusst, sonst würdest du nicht fragen. Also, ich hatte so eine Synchronisierung jahrelang (2003 bis ca. 2010) im Einsatz. Zwar nur mit Notebooks (wo ich wenigstens die selbe Datenbank aufsetzen konnte) aber die Probleme sind die gleichen. Mit einem einzelnen Flag pro Datensatz (ich hatte hierzu ein Feld Timestamp der letzten Änderung im Einsatz) kommt man nicht weit. Das ist bestenfalls für die Performance-Optimierung beim Abgleich zu gebrauchen. Es muss jede Änderung pro Datensatz und Datenfeld protokolliert werden. Idealerweise in einer DB die dann beim Synchronisieren abgearbeitet wird. Und selbst dann kann es noch Ärger geben, wenn z.B. beim gleichen Datensatz das selbe Feld von unterschiedlichen Usern verändert wurde.

Wer gewinnt? Den User fragen wäre eine mögliche Variante, doch selbst das müsste man dann wieder protokollieren, denn sonst zieht deine Hotline die A-Karte und Ärger ist irgendwann vorprogrammiert. So viel ist nach meiner Erfahrung sicher.

Abhilfe: Datentransfer nur in einer Richtung. Wenn jemand unbedingt beide Richtungen haben will, dann soll er besser Geld in eine Online-Lösung (Teamviewer, Remote-Desktop...) investieren, als in eine Datenbank (Sonder-)Programmierung die sowieso langfristig gesehen mehr kostet.

Darum ein gut gemeinter Rat: die Finger von der Umsetzung "in dieser Art und Weise" lassen. Es gibt genügend fertige Alternativen.
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz