Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Konzeptionelle Frage - Datenabgleich (https://www.delphipraxis.net/196621-konzeptionelle-frage-datenabgleich.html)

Incocnito 4. Jun 2018 16:22

Datenbank: MariaDB • Version: 10.3.7 • Zugriff über: MyDac

Konzeptionelle Frage - Datenabgleich
 
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

timog 4. Jun 2018 16:47

AW: Konzeptionelle Frage - Datenabgleich
 
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.

TigerLilly 5. Jun 2018 12:30

AW: Konzeptionelle Frage - Datenabgleich
 
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.

rapante 5. Jun 2018 15:09

AW: Konzeptionelle Frage - Datenabgleich
 
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.

hoika 5. Jun 2018 15:22

AW: Konzeptionelle Frage - Datenabgleich
 
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

p80286 5. Jun 2018 16:46

AW: Konzeptionelle Frage - Datenabgleich
 
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

Rollo62 5. Jun 2018 17:32

AW: Konzeptionelle Frage - Datenabgleich
 
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

mkinzler 5. Jun 2018 17:39

AW: Konzeptionelle Frage - Datenabgleich
 
BigInt mit unterschiedlichen Initialwerten der Sequenzen sollte ausreichend sein.

TigerLilly 5. Jun 2018 20:21

AW: Konzeptionelle Frage - Datenabgleich
 
Ganz vergessen:
https://www.tmssoftware.com/site/tmsecho.asp

hoika 5. Jun 2018 20:37

AW: Konzeptionelle Frage - Datenabgleich
 
Hallo,
ich hatte Integer benutzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:10 Uhr.
Seite 1 von 4  1 23     Letzte »    

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