AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Konzeptionelle Frage - Datenabgleich
Thema durchsuchen
Ansicht
Themen-Optionen

Konzeptionelle Frage - Datenabgleich

Ein Thema von Incocnito · begonnen am 4. Jun 2018 · letzter Beitrag vom 11. Aug 2020
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Incocnito

Registriert seit: 28. Nov 2016
210 Beiträge
 
#1

Konzeptionelle Frage - Datenabgleich

  Alt 4. Jun 2018, 16:22
Datenbank: MariaDB • Version: 10.3.7 • Zugriff über: MyDac
Hi!

Ich wollte mal hiermit fragen, was ihr für Ideen hättet:
Es sollen Daten zwischen verschiedenen Standorten abgeglichen werden.
Beispielsweise soll ein neu angelegter Kunde aus einem Standort
auch an einen anderen übertragen werden.
Wir haben uns hier in der Firma natürlich auch schon was überlegt,
aber ich wollte mal in die Runde fragen, auf was für Ideen ihr kommen
würdet? Was uns (parallel auch) noch eingefallen ist, war das Stichwort
"Replication-Server", vielleicht weiß jemand ob das in dem Zusammenhang
relevant ist und falls ja wo man idiotensicher ( ;-) ) erfährt
wie das funktioniert.
Es soll möglich sein, dass an beiden Standorten
"gleichzeitig" Kunden (und natürlich auch andere Daten, aber das wäre
dann ja übertragbar) angelegt werden können und diese dann
untereinander abgeglichen werden. Es gibt ja sicher auch hier
State-Of-The-Art-Lösungen, aber welche wäre das?

Als Datenbank dient MariaDB (also so ähnlich wie MySQL),
zum "drauf schauen" nehmen wir "HeidiSQL" (falls das überhaubt relevant ist)
und zum Entwickeln Delphi 10.2 mit MyDac auf Windows 10 x64.

Ich hoffe ich habe alle interessanten Infos genannt und freue mich auf
Hinweise, Links, Ideen, Vorschläge und all' das woran ich gerade nicht denke!

Vielen Dank schonmal für die Mühe und Zeit!

Liebe Grüße und euch allen schonmal einen wunderschönen Tag
Incocnito
  Mit Zitat antworten Zitat
Benutzerbild von timog
timog

Registriert seit: 26. Sep 2006
Ort: Landkreis Oldenburg (Oldb)
117 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Konzeptionelle Frage - Datenabgleich

  Alt 4. Jun 2018, 16:47
Replication ist da sicher das richtige Stichwort und die Doku von MariaDB gibt ja auch eine grobe Übersicht dazu. Erfahrung habe ich persönlich nur mit MS SQL Replikation, kann also leider nicht viel bei MariDB weiterhelfen.
Timo
Real Programmers are surprised when the odometers in their cars don't turn from 99999 to 9999A.
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.174 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Konzeptionelle Frage - Datenabgleich

  Alt 5. Jun 2018, 12:30
Replikation ist eine Einbahnstraße, das hilft dir hier nicht unbedingt. Du brauchst eher Synchronisation.

Hier gibt es einen Ansatz dazu:
https://www.hagenfragen.de/linux-tip...?cn-reloaded=1

Diese Fragen solltest du aber beantworten können, bevor du an eine Umsetzung gehst:
- Wir erkennst du, ob ein Datensatz (Kunde, Artikel, etc), der in DB A neu ist, bereits in einer anderen DB vorhanden ist.
- Was passiert bei so einer Kollision? Wird auf Feldebene gemerged Oder der ganze Satz übernommen?
- Können Kollisionen überhaupt auftreten?
- Wie oft werden Kollisionen auftreten?
- Wie lange können Synchronisationen im Status "pending" bleiben? Je kürzer desto besser, weil sonst die Wahrscheinlichkeit, dass der Satz in anderen DBs auch angelegt wird, steigt.
- Gibt es zyklische Abhängigkeiten? Beispiel: In DB A kann Kunde X gelöscht werden, weil er noch keine Buchungen hat. In DB B darf er aber nicht gelöscht werden, weil es schon Buchungen gibt. Stichwort: verteilte Transaktionen.

Grobkonzept:
Ich würde eine Tabelle machen:
- Database
- Kennzeichen Insert/Update/Delete
- Tabelle
- Feld
- Inhalt
- Timestamp
- Kennzeichen ob schon gesynct
- Applied

Jede Änderung wird lokal in der Tabelle mitgeschrieben.
Wenn du Syncst, holst du dir aus allen anderen DBs diese Inhalte + duplizierst sie in deine Tabelle (dort Status setzen!). Dann arbeitest du dich in chronologischer Reihenfolge durch (Applied:=Y).

Wie oft du syncst + ob die das syncen bei einem anderen anstoßen kannst, sind Details.
Wahrscheinlich musst du Löschen gesondert behandeln, siehe oben.
  Mit Zitat antworten Zitat
Benutzerbild von rapante
rapante

Registriert seit: 3. Jun 2009
Ort: OPR
171 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Konzeptionelle Frage - Datenabgleich

  Alt 5. Jun 2018, 15:09
Hallo,
wie sind denn deine Standorte untereinander verbunden? Welche Latenzen sind da vorhanden?

Wir haben bei uns seit Jahren einen global erreichbaren Master-Mysql-Server auf dem alle Schreibvorgänge stattfinden und je Ort einen Slave-Server der für die Lese-Zugriffe zuständig ist.
Fällt der Master-Server aus, kann allerdings niemand mehr Änderungen tätigen. Langfristig planen wir auf eine Master-Master Replikation umzusteigen. Bisher haben wir damit leider keine Erfahrung.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Konzeptionelle Frage - Datenabgleich

  Alt 5. Jun 2018, 15:22
Hallo,
Replication=Synchronisation, wenn ich in beide Richtungen replizieren.

Wichtig sind verschiedene Nummernkreise für die DB-Ids.
Jeder Standort einen anderen.

Bsp: Kunden-Id
Standort1: 1-1.000.000
Standort2: 1.000.001-2.000.000

Dann finden schon mal keine unschönen Kollisionen bei den Primary Keys auf DB-Ebene statt.
Logische Kollisionen (doppelte Kundennummer) müssen intelligent gelöst werden.

Die anderen Vorschläge (Änderungstabelle) sind genau richtig.
So hatte ich das damals mal unter Firebird bei einem Kunden implementiert.
Das Füllen der Tabelle erfolgt sinnvollerweise durch die DB selbst (Trigger).

Hier noch ein Link zum IBReplicator-Handbuch für grundlegende Sachen
http://www.ibphoenix.com/downloads/i...ator_2_5_2.pdf
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Konzeptionelle Frage - Datenabgleich

  Alt 5. Jun 2018, 16:46
Ich hatte auch einmal das "Vergnügen" eine LotusNotes DB vertretungsweise zu betreuen. Bei der Replizierung traten immer wieder Fehler auf, die nur durch Handarbeit zu beheben waren. Das hierfür intime Kenntnisse der Inhalte nötig waren, war den Benutzern nicht klar, dementsprechend unwirsch reagierten sie auf Anfragen nach den "richtigen" Daten. Seither bevorzuge ich zentrales DB-Schreiben.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.901 Beiträge
 
Delphi 12 Athens
 
#7

AW: Konzeptionelle Frage - Datenabgleich

  Alt 5. Jun 2018, 17:32
Zitat:
Bsp: Kunden-Id
Standort1: 1-1.000.000
Standort2: 1.000.001-2.000.000
Nimmst du dafür wirklich Integer, oder sind das Strings ?

Das ist eine interessante Frage welche "Primary keys" man am Besten nutzen sollte,
diese Frage kommt bei mir auch schonmal ab und an auf.

Normalerweise nehme ich gerne Integer, aber zum Synchronisieren mit mehreren verteilten Systemen wäre TGuid eigentlich besser geeignet, oder eine Art von Timestamp mit ID ?
Könnte man Alles auch als String abbilden, aber das wäre wohl schlecht für die Performance.
Gibt es noch bessere Alternativen, z.B. zusammengesetzte Columns, etc. ?

Ich habe bisher den echten GUID noch nicht dafür eingesetzt, könnte es vielleicht irgendwelche Probleme damit geben (z.B. doppelte ID's) ?

Rollo
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Konzeptionelle Frage - Datenabgleich

  Alt 5. Jun 2018, 17:39
BigInt mit unterschiedlichen Initialwerten der Sequenzen sollte ausreichend sein.
Markus Kinzler
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.174 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Konzeptionelle Frage - Datenabgleich

  Alt 5. Jun 2018, 20:21
Ganz vergessen:
https://www.tmssoftware.com/site/tmsecho.asp
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Konzeptionelle Frage - Datenabgleich

  Alt 5. Jun 2018, 20:37
Hallo,
ich hatte Integer benutzt.
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 06:42 Uhr.
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