Verzeichnis synchronisieren

Fohnbit

Top Contributor
Hallo,

ich zerbreche mir gerade den Kopf, weil ich 2 Datenbanken synchronisieren muss.
Ich bekomme und schreibe die Daten über eine API.

DB1 soll auf DB2 übertragen werden. Die Struktur ist wie ein Fileverzeichnis mit Ordnern
DB1:
root
- sub1
- sub 2
-sub-sub 1
-sub-sub 2

Selbes gilt für die DB2.
jedoch hat jede eine eigene ID. Ich habe mit bei DB1 2 Felder hinzugefügt, wo ich nach neu erstellen die ID von DB2 schreibe:
DB1:
root;id;parent_id;db2_id;db2_parent_id
sub1;id;parent_id;db2_id;db2_parent_is

DB2:
root;id;parent_id
...


Es soll nur nach DB2 gesyncht werden.
Ich habe zuerst mal alle Einträge in DB2 gelöscht, die nicht in DB1/db2_id stehen ... da diese tote Links wären
aber das Problem: lösche ich eine sub1 .. werden auch die sub-sub mit gelöscht und das wiederum müsste ich im Code erfassen

Daher meine Frage:
Hat jemand ein gutes Beispiel wie man das macht?
Neue Einträge und updaten müsste bei DB2 unterschieden werden im Code.
Ich habe halt immer nur ID und Parent ID zur Verfügung.

Vielen dank!
 

mihe7

Top Contributor
Manche DBS bringen ein entsprechendes Feature (Replication) selbst mit. DB-Trigger wären auch eine Option.

Ansonsten wäre die Frage, ob die IDs denn unterschiedlich sein müssen? Falls nein, ist die Sache fast schon trivial.

Falls ja, musst Du lediglich dafür sorgen, dass Du Identität zwischen den Sätzen herstellst. Das kann man via UUIDs machen (hier eher suboptimal) aber auch durch Hinzufügen eines ID-Felds wie Du es schon gemacht hast.

Allerdings würde ich DB2 als Erweiterung ansehen, d. h. DB1 sollte von DB2 nichts wissen. Die DB1-ID würde ich dem entsprechend in DB2 aufnehmen, nicht umgekehrt (kann natürlich sein, dass Du andere Anforderungen hast, aber nach Deiner Beschreibung...)

Für das Mitführen der Parent-ID der anderen Datenbank sehe ich keinen Grund. Es wäre beim Einfügen einfach dafür zu sorgen, dass die Beziehung parent_id -> id auch in DB2 gilt. Das Löschen innerhalb von DB2 funktioniert dann genauso wie in DB1.

Bzgl. der Synchronisation muss Du lediglich die entsprechende DB2-ID ermitteln: SELECT id FROM tabelle WHERE db1_id = :id. Das gilt sowohl fürs Einfügen von Sub-Sätzen - DB2-ID anhand der DB1-Parent-ID ermitteln - als auch fürs Löschen - DB2-ID anhand der DB1-ID ermitteln.
 

Fohnbit

Top Contributor
Hallo,

danke für die Infos.

Es geht konkret
DB1: ERP System (postgres Datenbank) (directer SQL Query)
DB2: Magento 2 Webstore (mysql Datenbank) (Zugriff via API)

Ich muss in der DB1 ja die Verlinkung zu DB2 halten, da beide ja nicht in direkter Relation stehen.

Ich denk der Knackpunkt ist eine saubere rekursive Funktion.
 

mihe7

Top Contributor
Ich muss in der DB1 ja die Verlinkung zu DB2 halten, da beide ja nicht in direkter Relation stehen.

Der Schlussfolgerung kann ich nicht folgen:

DB1: id;parent_id
DB2: id;parent_id;db1_id

In DB2 besteht zwischen id und db1_id ein 1:1-Mapping -> db1_id ist eineindeutig einer id zugewiesen. Ich nehme im folgenden an, dass die id-Spalten automatisch hochgezählt werden.

Wenn in DB1 ein Satz eingefügt wird, erfolgt eine Mitteilung an die zweite DB. Nehmen wir mal an, die API würde eine Funktion insert(relatedId, relatedParentId) enthalten:

1. Ermitteln der DB2-ID des Eltern-Satzes:
x := (SELECT id FROM tabelle WHERE db1_id=:relatedParentId)
2. INSERT INTO tabelle(parent_id, db1_id) VALUES (x, :relatedId)

Auf DB1-Seite muss dann nichts mehr aktualisiert werden, denn DB1 weiß im besten Fall überhaupt nicht, dass DB2 existiert bzw. wie DB2 die Daten organisiert.

Wird in DB1 ein Satz gelöscht, geht man analog vor. Nehmen wir mal an, die API würde eine Funktion remove(relatedId) enthalten:

1. Ermitteln der DB2-ID:
x := (SELECT id FROM tabelle WHERE db1_id=:relatedId)
2. Löschen des Satzes mit ID x inkl. seiner Kinder: deleteTree(x)

deleteTree(id) - ab hier taucht DB1 gar nicht mehr auf:

1. Kinder raussuchen
liste := (SELECT id FROM tabelle WHERE parent_id = :id)
2. Die Bäume aller Kinder löschen:
for each x in liste: deleteTree(x)
3. Jetzt sind die Kinder weg, braucht man nur noch die Wurzel zu killen:
DELETE FROM tabelle where id = :id

Das Vorgehen der Funktion deleteTree ist vom Prinzip her in beiden DBs identisch.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Standard resources-Verzeichnis ändern Java Basics - Anfänger-Themen 9
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
J Alle Dateien aus einem Verzeichnis laden Java Basics - Anfänger-Themen 10
S Verzeichnis Lese-Berechtigung entziehen Java Basics - Anfänger-Themen 1
B Name von Verzeichnis bekommen - Files von einem Ordner auslesen Java Basics - Anfänger-Themen 4
S Image Datei selektieren und in Projekt Verzeichnis abspeichern/kopieren Java Basics - Anfänger-Themen 16
R Input/Output Dateinamen aus Verzeichnis in Datei schreiben Java Basics - Anfänger-Themen 3
M java.io.FileNotFoundException trotz dass Verzeichnis korrekt angegeben ist! Java Basics - Anfänger-Themen 20
M Erste Schritte Ordner im selber Verzeichnis wählen Java Basics - Anfänger-Themen 1
J Lokales Verzeichnis -> Globales Verzeichnis Java Basics - Anfänger-Themen 10
D Input/Output Ordner aus .Jar in das Verzeichnis der .Jar kopieren Java Basics - Anfänger-Themen 1
B Dateien aus dem "resource" - Folder kopieren in Verzeichnis Java Basics - Anfänger-Themen 9
B "Vor" Verzeichnis bekommen Java Basics - Anfänger-Themen 1
I Automatisch Verzeichnis erstellen bei File erstellen Java Basics - Anfänger-Themen 5
A Datei im erstelltem Verzeichnis erstellen? Java Basics - Anfänger-Themen 1
Z Gleiches Verzeichnis für class und java unter Windows Muss? Java Basics - Anfänger-Themen 11
Traxx JDK installieren .java nur im Java\bin Verzeichnis ausführbar Java Basics - Anfänger-Themen 22
S 3 Fragen, Verzeichnis, GridLayout psoitionieren, Werte für JSpinner Java Basics - Anfänger-Themen 2
D Input/Output Verständnisfrage Verzeichnis-/Dateiliste erstellen & Dateikonvertierung Java Basics - Anfänger-Themen 1
K Bin-Verzeichnis Java Basics - Anfänger-Themen 4
E Bild per Verzeichnis/JFileChooser auf JPanel laden Java Basics - Anfänger-Themen 13
kaoZ Input/Output Verzeichnis Inhalt in combobox ausgeben Java Basics - Anfänger-Themen 8
M Verzeichnis ausgeben mit Unterverzeichnissen und einzelnen Dateien Java Basics - Anfänger-Themen 18
S Darüberliegende Verzeichnis ansprechen Java Basics - Anfänger-Themen 3
C Datei in bestimmtes Verzeichnis speichern Java Basics - Anfänger-Themen 2
E Erste Schritte Verzeichnis auslesen, Dateinamen in Array speichern :-( Java Basics - Anfänger-Themen 7
P javac Verzeichnis Java Basics - Anfänger-Themen 2
N Input/Output mit FileDialog Verzeichnis wechseln Java Basics - Anfänger-Themen 20
eLogic Input/Output Liest Verzeichnis nicht aus??? Java Basics - Anfänger-Themen 6
G Bilder aus dem Projekt Verzeichnis werden n. angezeigt Java Basics - Anfänger-Themen 7
B Files aus Verzeichnis zählen Java Basics - Anfänger-Themen 9
M Verzeichnis öffnen? Java Basics - Anfänger-Themen 5
dognose Verzeichnis rekursiv auslesen / beschränkte Apis. Java Basics - Anfänger-Themen 6
J Verzeichnis auslesen und festgelegte Anzahl Bilder zeichnen Java Basics - Anfänger-Themen 4
G Verzeichnis auslesen mit sehr sehr vielen Bildern Java Basics - Anfänger-Themen 6
M Verzeichnis verschieben Java Basics - Anfänger-Themen 5
H Verzeichnis Java Basics - Anfänger-Themen 9
R Verzeichnis feststellen Java Basics - Anfänger-Themen 14
O Aktuelles Verzeichnis Runtime.getRuntime().exec Java Basics - Anfänger-Themen 6
L Datei kopieren in anders verzeichnis geht nicht Java Basics - Anfänger-Themen 17
G Dateien im Verzeichnis anzeigen lasssen Java Basics - Anfänger-Themen 7
M Systembefehl Verzeichnis öffnen Java Basics - Anfänger-Themen 5
G Verzeichnis herausfinden Java Basics - Anfänger-Themen 3
N Verzeichnis auf genügend Festplattenplatz überprüfen - Linux Java Basics - Anfänger-Themen 15
M Eclipse: mehrere Versionen einer *.class im Verzeichnis Java Basics - Anfänger-Themen 3
G Verzeichnis von *.class ausgeben lassen Java Basics - Anfänger-Themen 3
G in Verzeichnis auf gleicher Ebene wechseln Java Basics - Anfänger-Themen 4
M Dateien aus Verzeichnis filtern, aber nicht nach Endung Java Basics - Anfänger-Themen 59
A dateiname aus verzeichnis auslesen Java Basics - Anfänger-Themen 2
G Wie finde ich das Verzeichnis von meinen Java Projekt? Java Basics - Anfänger-Themen 7
S String für das java jre home verzeichnis Java Basics - Anfänger-Themen 3
A Gibt es standardmässig in Java einen Verzeichnis-Listener? Java Basics - Anfänger-Themen 6
T Dateien aus einem Verzeichnis in eine Textdatei schreiben Java Basics - Anfänger-Themen 3
E JFileChooser -> Verzeichnis setzen Java Basics - Anfänger-Themen 10
M window verzeichnis öffnen Java Basics - Anfänger-Themen 6
zilti In Java das Verzeichnis wechseln Java Basics - Anfänger-Themen 21
Q Prüfen, ob ein FTP-Verzeichnis vorhanden ist Java Basics - Anfänger-Themen 2
M Importieren einer Javadatei aus einem anderen Verzeichnis Java Basics - Anfänger-Themen 4
G Reflection - Klasse laden aus anderem Verzeichnis Java Basics - Anfänger-Themen 4
G Windows-Verzeichnis ermitteln Java Basics - Anfänger-Themen 7
M Verzeichnis der main Klasse herausfinden Java Basics - Anfänger-Themen 7
M Datei ins aktuelle Verzeichnis speichern Java Basics - Anfänger-Themen 5
loadbrain relatives Verzeichnis angeben Java Basics - Anfänger-Themen 3
P Verzeichnis meines Programms Java Basics - Anfänger-Themen 4
S Verzeichnis auf Existenz prüfen + Inhalt holen Java Basics - Anfänger-Themen 9
F Jar-"Home" Verzeichnis Java Basics - Anfänger-Themen 5
G aktuelles verzeichnis finden Java Basics - Anfänger-Themen 5
M Namen der Dateien in einem bestimmten Verzeichnis erhalten Java Basics - Anfänger-Themen 4
P Wieso wird der komplette Inhalt im verzeichnis nicht gelösch Java Basics - Anfänger-Themen 5
Bierhumpen verzeichnis auslesen? Java Basics - Anfänger-Themen 13
S Verzeichnis darstellen Java Basics - Anfänger-Themen 3
G Auf File / Verzeichnis innerhalb eines jars zugreifen Java Basics - Anfänger-Themen 2
T Dateien/Ordner in einem Verzeichnis zählen Java Basics - Anfänger-Themen 13
G das aktive Verzeichnis abfragen Java Basics - Anfänger-Themen 4
F Home-Verzeichnis des Benutzers ändern Java Basics - Anfänger-Themen 4
E In welches Verzeichnis müssen selbsterstellte Klassen ? Java Basics - Anfänger-Themen 6
L Mit File erzeugtes Verzeichnis ist schreibgeschützt Java Basics - Anfänger-Themen 3
H Verzeichnis lesen, und nur unterverzeichnisse heraus filtern Java Basics - Anfänger-Themen 6
M Paket aus beliebigem Verzeichnis importieren Java Basics - Anfänger-Themen 9
G Verzeichnis kopieren Java Basics - Anfänger-Themen 2
X Verzeichnis Probs mit Klassen Java Basics - Anfänger-Themen 3
S Verzeichnis auslesen! Java Basics - Anfänger-Themen 3
R dateien in einem verzeichnis einlesen Java Basics - Anfänger-Themen 3
T Unter Windows mit Java ein Verzeichnis erstellen? Java Basics - Anfänger-Themen 4
M Filecooser - Verzeichnis ohne "" Laufwerke mit &q Java Basics - Anfänger-Themen 2
S Ein Verzeichnis anpollen Java Basics - Anfänger-Themen 8
M Dateien in einem Verzeichnis zählen Java Basics - Anfänger-Themen 21
B Angabe import-Verzeichnis & Error704:cannot access direc Java Basics - Anfänger-Themen 6
G Dateinamen aus einem Verzeichnis ausgeben Java Basics - Anfänger-Themen 3
M alle Files aus einem Verzeichnis finden Java Basics - Anfänger-Themen 15
G Verzeichnis auslesen und alle Unterordner/Dateien speichern Java Basics - Anfänger-Themen 9
A Windows tmp-Verzeichnis ermitteln Java Basics - Anfänger-Themen 6
T Threads Synchronisieren Java Basics - Anfänger-Themen 6
T Threads Threads richtig synchronisieren Java Basics - Anfänger-Themen 3
G Ersetzen eines confirm dialogs/ synchronisieren von methoden Java Basics - Anfänger-Themen 6
V Threads Threads synchronisieren Java Basics - Anfänger-Themen 4
T Thread Synchronisieren Java Basics - Anfänger-Themen 4
H TreeMap/HashMap synchronisieren Java Basics - Anfänger-Themen 2
S Synchronisieren einer Linked List Java Basics - Anfänger-Themen 16
G Threads synchronisieren von threads Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben