MySQL Forums
Forum List  »  German

Update-View-Inkonsistenz
Posted by: Thomas Wunder
Date: January 07, 2010 05:27PM

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.


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

Options: ReplyQuote


Subject
Views
Written By
Posted
Update-View-Inkonsistenz
3816
January 07, 2010 05:27PM
1718
January 13, 2010 06:45AM
1699
January 14, 2010 02:08AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.