Datenbanken - Mehrbenutzersynchronisation

Dieses Thema im Forum "Off-Topic" wurde erstellt von BooWseR, 16.09.2015.

  1. #1 BooWseR, 16.09.2015
    BooWseR

    BooWseR Erfahrener Benutzer

    Dabei seit:
    08.11.2011
    Beiträge:
    742
    Zustimmungen:
    6
    Ort:
    Deutschland
    Moin Leute,

    am Freitag steht mein zweiter Versuch im Modul Datenbanken an und habe gewisse Probleme in einer Aufgabe. Weder in den Unterlagen, noch im Netz habe ich eine Erklärung zu der Vorgehensweise gefunden und hoffe jetzt drauf, dass hier vielleicht jemand unsere Vermutungen bestätigen kann.

    Erstmal verlinke ich die Aufgabe:

    [​IMG]

    Diese Aufgabe kam bereits mehrfach in alten Klausuren vor, nur ist die Darstellung hier eine völlig andere. Vorher sah die Aufgabe noch wie folgt aus:

    [​IMG]
    Hier war bspw. der Schedule:
    T2 READ B
    T1 READ A
    T1 WRITE A
    T2 READ A
    T1 READ B
    T2 WRITE A
    T1 WRITE B

    Stellt man nun die entsprechenden Konfliktoperationen auf, so stellt sich heraus, dass diese Verzahnung nicht serialisierbar ist. Soweit auch nicht weiter schwer, doch setzt diese Erkenntnis einen korrekten Schedule voraus.

    Um wieder zum ursprünglichen Problem zu kommen, sind wir uns unsicher, was genau UPDATE, Begin und End Transaction für eine Rolle bezüglich der Read und Write Operationen spielen. Unsere Vermutung wäre, dass Begin und End Transaction entweder keine Rolle spielen, oder eben für das lesen/schreiben zuständig sind. Lassen wir jedoch die Transaction außer Acht und betrachten Update als Read/Write, dann würde sich folgender Schedule ergeben:
    T2 READ A
    T2 WRITE A
    T1 READ B
    T1 WRITE B
    T2 READ B
    T2 WRITE B
    T1 READ A
    T1 WRITE A

    Sind wir mit dieser Überlegung auf der richtigen Spur, oder ist es doch etwas komplett anderes?!
    Hoffe jemand hat eine Antwort. @xandros vielleicht, mir war so als hättest du beruflich was mit DB zu schaffen?

    Hoffnungsvolle Grüße,
    BooWseR
     
  2. #2 xandros, 18.09.2015
    Zuletzt bearbeitet: 18.09.2015
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    25.881
    Zustimmungen:
    91
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Genau genommen spielen sie schon eine Rolle.
    zum Teil ja. Gelesen werden die Werte direkt aus der Datenquelle/Tabelle. Geschrieben wird der in der jeweiligen Transaktion befindliche Wert ohne Prüfung auf mögliche Veränderung des Ausgangswertes durch andere Transaktionen.

    Begin/End gehört in den Bereich der Control-of-Flow-Keywords, mit denen die Abarbeitung der SQL-Anweisungen gesteuert werden können und schliesst einen Transaktionsstapel ein. Das kann eine Anweisung oder ein kompletter Batch sein.
    Innerhalb des Stapels stehen gelesene Werte zur Bearbeitung zur Verfügung, die aber nicht zwangsläufig auch mit den realen Daten übereinstimmen. Beim Read ist das noch der Fall, aber beim Write kann der Ausgangswert bereits durch eine andere Transaktion verändert worden sein.
    Siehe dazu die Stichworte "Dirty Data" oder "Phantom Problem".

    Im Beispiel 1:
    T2 liesst A (mal als Wert 100 angenommen) und verändert diesen zu 95. In der Tabelle steht noch 100.
    T1 liesst B (mal als Wert 400 angenommen) und verändert diesen auf 200. In der Tabelle steht noch 400.
    T2 liesst B mit dem unveränderten Wert 400 und macht daraus nun 380. In der Tabelle steht immer noch 400.
    Jetzt wird T2 abgeschlossen und bestätigt.
    A wird zu 95 und B zu 380.
    Nun kommt T1 und liesst A (aktueller Wert 95) und verändert diesen auf 295. In der Tabelle steht noch 95.
    Jetzt schliesst T1 seine Transaktion ab.
    A wird zu 295 (korrekt) und B wird zu 200 (FEHLER).
    B wird falsch, weil T2 einen Phantomwert gelesen hat, der zu diesem Zeitpunkt bereits nicht mehr hätte existieren dürfen.
    Das Problem lässt sich nur vermeiden, wenn die in Bearbeitung befindlichen Daten gesperrt, unmittelbar geändert und wieder freigegeben werden.(Sprich T2 muss mit dem Lesen von B so lange warten, bis T1 seine Änderung abgeschlossen hat.) Wird nach dem Update ein Commit ausgeführt, kann direkt von einer anderen Transaktion auf den aktualisierten Wert zugegriffen werden.....
    Soweit richtig. Nun betrachte Update als Read und virtuelles Write innerhalb der Transaction, welches erst beim Commit (oder spätestens beim End) real wird.
    Dürfte so aussehen:
    T2 Begin
    T2 Read A
    T1 Begin
    T1 Read B
    T2 Read B
    T2 Write A, B; End
    T1 Read A
    T1 Write A, B; End

    Fügt man nun ein Commit nach jedem Update ein, dann ergibt sich daraus dann folgendes Bild:
    T2 Begin
    T2 Read A
    T2 Write A
    T1 Begin
    T1 Read B
    T1 Write B
    T2 Read B
    T2 Write B
    T2 End
    T1 Read A
    T1 Write A
    T1 End


    Es wird richtig Spassig, wenn man kein Commit verwendet und in nur einer Transaktion vor dem End ein Abort ausführt....... (Die andere Transaktion muss dann einen Fehler werfen und eventuell bereits geschriebene Werte via Rollback zurücksetzen. Im Anschluss kann die komplette Transaktion erneut ausgeführt werden....) Zum Glück wird das heute vom DBMS übernommen.
     
    BooWseR gefällt das.
  3. #3 BooWseR, 18.09.2015
    BooWseR

    BooWseR Erfahrener Benutzer

    Dabei seit:
    08.11.2011
    Beiträge:
    742
    Zustimmungen:
    6
    Ort:
    Deutschland
    Wie sich heute rausstellte, ist in unserem Fall tatsächlich ein Update sowohl Read als auch Write. Ein Begin/End spielt dabei für die Konfliktoperationen und den Schedule keine Rolle. Die kommt erst im nachfolgendem "logischen Logfile" zum Tragen, welche ich hier nicht mit aufgeführt hatte. Diese sollte wie folgt aussehen:

    [#1, T2, BOT, 0]
    [#2, T2, PA, A1 *= 0.95, A1 /= 0.95, #1]
    [#3, T1, BOT, 0]
    [#4, T1, PB, B2 -= 200, B2 += 200, #3]
    ... usw.

    Dummerweise habe ich in der Klausur die Zahlen hinter A und B vergessen, also A1 und A2 waren bei mir einfach A. Ziemlich ärgerlich.
    Ich hoffe mal, dass es gereicht hat und ich mit diesem Thema (vorerst) abschließen kann.
    Aber vielen Dank für deine Antwort.

    Herzlichst,
    BooWseR
     
  4. #4 xandros, 18.09.2015
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    25.881
    Zustimmungen:
    91
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Was dann wohl bedeutet, dass ihr durch diese Zeilen einfach nur in die Irre geführt werden solltet....
    Tatsächlich hat das auf allen DBM-Systemen, die diese Befehle unterstützen, den o.g. Effekt. Und da kommt auch keine Klausuraufgabe dran vorbei, wenn der Sachverhalt nicht ausdrücklich so dargestellt wurde.
    Aber was solls. Wichtig ist ja nur, dass du möglichst viele Punkte mit deinen Ergebnissen holst.
     
  5. #5 BooWseR, 18.09.2015
    BooWseR

    BooWseR Erfahrener Benutzer

    Dabei seit:
    08.11.2011
    Beiträge:
    742
    Zustimmungen:
    6
    Ort:
    Deutschland
    Gehe ich mal von aus. Wie zu sehen war vorher ja explizit nur ein Read und Write aufgeführt, was das Ganze deutlich vereinfachte.

    Ja, stimmt. Wobei mir nächste Woche die praktische Prüfung blüht, da ist der Sachverhalt natürlich ein deutlich anderer. Auch schön mit psql, was gefühlt niemand mehr benutzt :D
     
  6. #6 xandros, 18.09.2015
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    25.881
    Zustimmungen:
    91
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    ist gar nicht so selten. Andere Typen sind natürlich stärker verbreitet. Ich hab psql bisher auch noch nicht benutzt.
     
Thema: Datenbanken - Mehrbenutzersynchronisation
Besucher kamen mit folgenden Suchen
  1. Mehrbenutzersynchronisation Datenbanken

Die Seite wird geladen...

Datenbanken - Mehrbenutzersynchronisation - Ähnliche Themen

  1. Access Datenbank umwandeln in Exeltabelle

    Access Datenbank umwandeln in Exeltabelle: Ich möchte eine Access-Datenbank – erstellt mit Access 2002 SP3 – in eine Exeltabelle konvertieren. Was muß ich tun? Bitte Schritte aufführen,...
  2. Frage über Datenbank:)

    Frage über Datenbank:): Hallo, Also ich habe jemanden in einem anderen Forum gefunden der mir beim einrichten meines phpbb Forum hilft. Da es irgendwie nicht auf meiner...
  3. Datenbanken XML oder einfach Textdateien

    Datenbanken XML oder einfach Textdateien: das programmieren php,javascript,html,as3 etc.. habe ich mir selber beigebracht,darum habe einige Wissenslücken. die frage.. wo sind die...
  4. Webseite mit Datenbank verknüpfen

    Webseite mit Datenbank verknüpfen: Hallo Leute, bin einsteiger in Sachen html und php scripten. Habe einen rootserver und auf diesen Läuft eine MySql Datenbank und ein...
  5. Fragen zur Datenbank

    Fragen zur Datenbank: Hallo, ich habe eine Frage zu meiner Datenbank und hoffe, es nimmt sich jemand die Zeit mich darüber aufzuklären, weil ich nicht mehr...