Ergebnis 1 bis 8 von 8

Thema: JDBC & DB Transaction für parallele Applikationen

  1. #1
    myklynysh ist offline Neuer Benutzer
    Registriert seit
    11.11.2009
    Beiträge
    4

    Standard JDBC & DB Transaction für parallele Applikationen

    Hallo zusammen,
    ich habe ein Machbarkeitsproblem und weiß nicht mehr weiter.
    Ich habe 2 PG-Datenbanken (DB_A, DB_B) und 2 Java-Applikationen (Appl_1, Appl_2), die parallel laufen sollen.

    Die Appl_1 schreibt in DB_A in alle Tabellen beinah gleichzeitig und benutzt JTA. Die Transaktionen dauern manchmal mehrere Minuten.
    Die Appl_2 will die Daten aus DB_A konsistent in die DB_B 'kopieren'. Die Tabellen sind miteinander über FK verknüpft. Deshalb kann ich nicht einfach aus jeder Tabelle "alle vorhandenen" Daten kopieren, weil später gelesene Tabellen die Verweisen auf nicht existierende Daten beinhalten werden. Man kann Appl_1 nicht anhalten und Appl_1 und Appl_2 können nicht miteinander kommunizieren.

    Gibt es die Möglichkeit über JDBC oder andere Framework die Daten in DB erkennen, bei denen die zugehörige JDBC Transaction noch nicht commited ist? So könnte ich z.B. die Daten nur aus den commited Transaktionen kopieren, das würde mein Problem lösen.

    Für alle Ideen bin ich sehr dankbar.
    myklynysh

  2. #2
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.467

    Standard

    Zitat Zitat von myklynysh Beitrag anzeigen
    Hallo zusammen,
    ich habe ein Machbarkeitsproblem und weiß nicht mehr weiter.
    Ich habe 2 PG-Datenbanken (DB_A, DB_B) und 2 Java-Applikationen (Appl_1, Appl_2), die parallel laufen sollen.

    Die Appl_1 schreibt in DB_A in alle Tabellen beinah gleichzeitig und benutzt JTA. Die Transaktionen dauern manchmal mehrere Minuten.
    Die Appl_2 will die Daten aus DB_A konsistent in die DB_B 'kopieren'.
    Wäre das nicht eher ein Job für z.B. Slony?

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    myklynysh ist offline Neuer Benutzer
    Registriert seit
    11.11.2009
    Beiträge
    4

    Standard

    Wäre das nicht eher ein Job für z.B. Slony?
    Möglicherweise gibt es dafür gute Tools. Beim 'kopieren' werden die daten auch ein wenig modifiziert: z.B. Byte-array-Daten(serialisierte Java-Objekte) werden in String ungewandelt. Dafür benutze ich Java-Klassen.

    Wäre das mit Slony auch möglich?

  4. #4
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.467

    Standard

    Zitat Zitat von myklynysh Beitrag anzeigen
    Möglicherweise gibt es dafür gute Tools. Beim 'kopieren' werden die daten auch ein wenig modifiziert: z.B. Byte-array-Daten(serialisierte Java-Objekte) werden in String ungewandelt. Dafür benutze ich Java-Klassen.

    Wäre das mit Slony auch möglich?
    Nein. Aber sowas kann auch die DB machen (vielleicht).

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

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

    Standard

    Du solltest dich für den Anfang mit Two-Phase-Commit und Prepared Transactions beschäftigen. Das könnte eine Lösung für dein Problem sein.

    Wenn nicht, muss man da wohl viel mehr Logik draufwerfen.
    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

  6. #6
    myklynysh ist offline Neuer Benutzer
    Registriert seit
    11.11.2009
    Beiträge
    4

    Standard

    Du solltest dich für den Anfang mit Two-Phase-Commit und Prepared Transactions beschäftigen. Das könnte eine Lösung für dein Problem sein.
    Ich fürchte, das wird nicht reichen. Ich kann Appl_1 nicht anfassen. Sie schreibt mit Hibernate in die Datenbank. Außerdem man möchte auch Postgres unabhöngig sein, d.h. nur über JDBC daraf zugreifen.

    Es bleibt nur an Ansatz mit mehr Logik. Mir fehlt die Grundidee, wie ich es umsetzen kann.

  7. #7
    castorp ist offline Erfahrener Benutzer
    Registriert seit
    27.06.2009
    Beiträge
    524

    Standard

    Zitat Zitat von myklynysh Beitrag anzeigen
    So könnte ich z.B. die Daten nur aus den commited Transaktionen kopieren, das würde mein Problem lösen.
    Du wirst in einer Transaktion sowieso niemals Daten einer anderen Transaktion sehen wenn diese noch nicht committed sind.


    Sie schreibt mit Hibernate in die Datenbank. Außerdem man möchte auch Postgres unabhöngig sein, d.h. nur über JDBC daraf zugreifen.
    Two phase commit ist Bestandteil von JTA und damit unabhängig von Postgres.

    Aber wenn Du die Anwendung nicht ändern kannst, dann wird Dir das wirklich nicht helfen.

    Ich sehe die einzige Möglichkeit über Trigger:

    In DB 1 legst Du Trigger auf alle Tabellen die Du "replizieren" möchtest. Im Trigger schreibst Du in eine weitere Tabelle die Datensätze die geändert wurden. Mittles LISTEN/NOTIFY beobachtest Du diese Tabellen und schreibst die geänderten Datensätze in die Ziel-DB.

    Letztendlich ist das aber genau das was auch Lösungen wie Slony machen.
    A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

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

    Standard

    Zitat Zitat von myklynysh Beitrag anzeigen
    Ich kann Appl_1 nicht anfassen.
    Da hätten wir Problem Nummer 1. Die Datenbank soll richten, was die Anwendung nicht hinbekommt.


    Sie schreibt mit Hibernate in die Datenbank.
    Oh, und da wäre schon Problem Nummer 2.


    Na ja, zum Rest wurde schon was gesagt. Das ganze auf Datenbankebend zu lösen halte ich für gewagt, da die Anwendung schon mit mehreren Datenbanken arbeitet. Das geht in irgendeiner Konstellation immer schief.
    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

Ähnliche Themen

  1. Frage Transaction JDBC Postgresql 8.X
    Von seawolf im Forum Programmierung
    Antworten: 2
    Letzter Beitrag: 09.12.2010, 11:46
  2. Frage Parallele PG-Instanzen mit eigenem data directory?
    Von schwarzf im Forum Konfiguration
    Antworten: 4
    Letzter Beitrag: 13.04.2010, 19:34
  3. Problem mit <IDLE> in transaction
    Von InstantCoffee im Forum Allgemeines
    Antworten: 11
    Letzter Beitrag: 12.01.2010, 21:13
  4. Analog zu AUTONOMOUS TRANSACTION
    Von petra im Forum PL/pgSQL
    Antworten: 9
    Letzter Beitrag: 17.10.2007, 12:15
  5. Transaction Timeout
    Von johanna im Forum Programmierung
    Antworten: 1
    Letzter Beitrag: 11.07.2007, 13:01

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