Anzeige:
Ergebnis 1 bis 2 von 2

Thema: Update-View-Inkonsistenz (MySQL oder anderes DBMS)

  1. #1
    Registrierter Benutzer
    Registriert seit
    16.03.2007
    Beiträge
    10

    Update-View-Inkonsistenz (MySQL oder anderes DBMS)

    Hi,
    ich habe ein Problem mit folgendem Sachverhalt:
    Angenommen, es gibt eine Datenbasis (wie z.B. eine InnoDB-Tabelle) und zwei oder mehr unterschiedliche Benutzer b1...bn (bzw. Prozesse etc.) können gleichzeitig darauf zugreifen. Weiter angenommen, diese Datenbank befindet sich im Zustand z1, d.h. es sind beispielsweise die Datensätze A, B und C drin.

    Fragt der Benutzer b1 jetzt den Inhalt der Datenbasis ab (SELECT * FROM dbtab; ), so gibt ihm das DBMS laut oben gezeigten Beispiel A, B und C zurück.
    b1 arbeitet jetzt mit dieser Information, nennen wir sie eine "Sicht" (s1) - soweit so gut.

    Wenn nun b2 auf die Idee kommt, die Datenbasis in einen neuen Zustand z2 zu überführen, indem er beispielsweise den Datensatz B löscht, passiert was hässliches:
    Der Benutzer b1 mit seiner Sicht s1 arbeitet mit den Datensätzen A, B und C, obwohl B ja gelöscht ist, weil ihm keiner sagt, daß b2 den Zustand der Datenbasis geändert hat.

    Code:
    b1:    s1                                   s2
           ^                                    ^
           |                                    :
    Abfrage durch b1                  (!? keine Rückmeldung !?)
           |                                    :
           |                                    :
    db:    z1 --- Manipulation durch b2 ----->  z2
    Meine Frage:
    Gibt es eine Möglichkeit, MySQL beizubringen, dem Abonnenten (wie b1 im Beispiel) von Datensätzen eine Nachricht zu schicken, wenn Änderungen an den abonnierten Datensätzen in der Datenbasis passieren? (Oder hab ich bloß einen Denkfehler gemacht?) Gibt es andernfalls ein anderes Datenbanksystem als MySQL, welches dies unterstützt?

    Was ich nicht möchte, ist, den einzelnen Prozessen b1...bn oder Benutzern beibringen zu müssen,
    1. sich im Fall von Manipulationen an der Datenbasis selber gegenseitig Nachrichten zu schicken,
    2. ein paranoides Polling durchzuführen, das in kurzen zeitlichen Abständen prüft, die aktuelle Sicht noch konsistent mit dem aktuellen Datenbankzustand ist.

    Das oben gezeigte, ist vermutlich das einfachste Beispiel, um den Sachverhalt deutlich zu machen. Selbstverständlich gibt es auch sehr viel komplexere Szenarien in denen eine Lösung für dieses Problem gebraucht wird. In meinem konkreten Fall, möchte ich erreichen, daß ein Abonnent einer Teilmenge der Records der InnoDB-Tabelle A benachrichtigt wird, wenn Manipulationen an einer anderen InnoDB-Tabelle B (auch transitive Fortsetzung über mehrere Zwischenstufen ist möglich), die über eine Foreign-Key Verbindung (ON DELETE CASCADE/UPDATE etc.) verknüpft sind, durchgeführt wurden dies nötig machen.

    Man möge mir verzeihen, daß ich diesen Beitrag auch in anderen Foren anbringe, denn ich brauche dringend eine Antwort.

    Vielen herzlichen Dank für eure Antworten bereits vorab!
    Gruß
    Tom

  2. #2
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657
    hallo,

    nein Benachrichtigungen werden nicht versendet. Du kannst aber
    die Tabelle sperren. So dass während b1 mit den Daten arbeitet
    keiner Daten löschen kann. Nachdem b1 fertig ist, kann er die
    Tabelle wieder freigeben.

    Generell gibt es bei DBMS Transaktionen, um genau solche Fälle behandeln zu könnnen. Schau dir mal http://de.wikipedia.org/wiki/Isolation_(Datenbank) an da stehen die versch transaktionsiolationen, die es gibt, innodb unterst sie alle, du kannst dies einfach umstellen, dafür büßt du halt geschw ein.

    hier auch noch was interessantes evtl http://de.wikipedia.org/wiki/ACID

Lesezeichen

Berechtigungen

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