Ergebnis 1 bis 8 von 8

Thema: Tabellensynchronisierung unidirektional

  1. #1
    f3rdy ist offline Neuer Benutzer
    Registriert seit
    16.03.2009
    Beiträge
    4

    Standard Tabellensynchronisierung unidirektional

    Hallo,

    ich will mal kurz die Problemstellung beschreiben und dann die zwei Möglichkeiten beschreiben, die ich als Lösung sehe.

    Ich habe zwei Datenbanken DB1 und DB2. Die können auf unterschiedlichen Rechnern liegen, müssen aber nicht. Die DB1 stellt eine Tabelle bereit, in der Nutzerdaten (Name, Vorname, Personalnummer, usw.) eingetragen werden. Sobald eine Änderung in DB1 geschieht, soll der Datensatz in die DB2 synchronisiert werden. Dabei müssen Teile der Daten im Eintrag in die Einzeltabelle von DB1 in unterschiedliche, mehrere Tabellen von DB2 befördert werden. Es gibt also etwas Logik, die man beim Eintrag in DB2 umsetzen muss. Dieser Vorgang soll automatisiert werden.

    Hintergrund ist die Bereitstellung einer Art Schnittstellen-DB (DB1), in die ein Kooperationspartner per ODBC etwas eintragen kann, während er auf die DB der Hauptanwendung (DB2) keinen Zugriff erhält.

    Bemerkung: Es wird nur uni-direktional synchronisert, also DB1 --> DB2.

    Lösung 1: Ich schreibe Triggerfunktionen in der DB1, die bei INSERT, UPDATE oder DELETE den Eintrag hernehmen und unter Anwendung der Logik in die DB2 synchronisieren.

    Frage: Kann man Trigger Datenbank-Übergreifend machen, etwa mit PL/PGSQL? In den Beispielen finde ich immer nur Trigger, die auf einer und derselben DB arbeiten.

    Lösung 2: Ich schreibe mir einen Service in Java, der zwei JDBC-Verbindungen zu DB1 und DB2 aufbaut und die Logik abbildet. Dabei guckt der Service zyklisch alle paar Sekunden, ob sich in DB1 etwas geändert hat.

    Mir ist Lösung 2 fast lieber, weil ich da ungefähr weiß, wie ich ansetzen muss. Aber ich hab das "Gefühl", dass man das eigentlich ganz anders machen könnte...

    Gibt es da Ideen dazu?

    Viele Grüße,
    ferdy

  2. #2
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Hast du dir schon mal Slony (Homepage) angeschaut?
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  3. #3
    f3rdy ist offline Neuer Benutzer
    Registriert seit
    16.03.2009
    Beiträge
    4

    Standard

    Danke für deine Antwort.

    Ja, ich kenne Slony-I und wir haben es auch schon eingesetzt um teilweise identische Datenbankstrukturen in zwei unterschiedlichen Datenbanken zu synchronisieren.

    Gegen den Einsatz bei dem hier genannten Problem spricht zum Beispiel dieser Satz aus der Dokumentation:

    "Slony-I is a complex multi-client, multi-server system, with the result that there are almost an innumerable set of places where problems can arise."

    Ausserdem repliziert man ja komplette Tabellen damit, soweit ich weiss. ich denke, dass Slony hier einfach ein bisschen zu komplex ist und gleichzeitig zu grob.

  4. #4
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Dann wirst du wohl um etwas spezielles nicht herumkommen.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  5. #5
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    PL/Java haette dazu interessante Ansaetze

    z.B. könntest du in einer PL/Java funktion auf einer Verbindung in einer andere DB operieren - außerdem soll man in PL/Java auf Transaktion (begin/end) einen listener setzen koennen - so kannst du in abhaengigkeit von geglückter oder misglueckter synch. die transaktion abbrechen ..

    Ok ich verrate mal soviel - das mit den Transaktionen ist etwas hakelig - und PL/Java braucht viele Streicheleinheiten ... aber es lohnt sich damit mal zu experimentieren.

    Ich kann mir gut vorstellen, dass ein andere Language-handler aehliche Fähigkeiten bietet (so krimskrams mit Transaktionen) - weiss es aber nicht genau - weil ich mir bisher nur PL/Java angeschaut habe.

    Diese Java-Funktion kannst du dann als Triggerfunktion erstellen und verwenden.

    So zumindest die Theorie

  6. #6
    f3rdy ist offline Neuer Benutzer
    Registriert seit
    16.03.2009
    Beiträge
    4

    Standard

    Ich denke, ich schreibe einen kleinen Java-Daemon. (Mal sehen, wie klein der bleibt.)

  7. #7
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    das ist wahrscheinlich der weg der am schnellsten zu einem ergebnis fuehrt ..

    dazu solltest du dir LISTEN und NOTIFY anschauen - gehoert zum PostgreSQL funktionsumfang .. koennt nuetzlich sein

    meine anregung galt eher dem geneigten "entdecker" wie ich schon sagte - die PL/Java funktioniert ganz gut - ist aber auch an einigen stellen etwas hakelig .. wenn man damit keine erfahrung hat wird man schon mal auf dö gosch fallen - es lohnt sich aber das mal anzuschauen.
    Geändert von symbiont (16.03.2009 um 11:58 Uhr)

  8. #8
    zweigelt ist offline Neuer Benutzer
    Registriert seit
    27.07.2010
    Beiträge
    6

    Standard

    ich suche nun schon seit längerer zeit nach einer ähnlichen lösung und wollte hier fragen ob sich seit dem letzten post schon neue möglichkeiten aufgetan haben und dieses Problem leichter zu lösen.

    konkret muss ich in meinem fall einzelne Tabellen von 2 Datenbanken (beide DBs auf gleichem Server mit gleicher Tabellen-Struktur) synchron halten. würde dies am liebsten ohne JAVA logik umsetzen.

    wie mache ich das mit postgre am einfachsten?

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum