OPTIMISTIC & PESSIMISTIC LOCK Design Patterns PILLER NADIA SARBACH MATTHIAS
Agenda 2 Persistenz und ihre Muster (3 ) Optimistic Offline Lock (6 ) (Optimistisches Sperren) Pessimistic Offline Lock (5 ) (Pessimistisches Sperren) Vergleich (1 ) Fragen (5 )
Persistenz (Informatik)* 3 Beschreibt die Fähigkeit, Daten (oder Objekte) oder logische Verbindungen über eine längere Zeit bereitzustellen Die Daten sind auch nach einem Neustart des Programmes vorhanden (gewolltes oder ungewolltes Schliessen des Programmes) und können rekonstruiert werden. Die Daten werden in Datenbanken oder im Dateisystem gespeichert. *Quelle Wikipedia [August 2014]
Persistenz Muster 4 Eager Load O/R Mapping Identity Map Coarse-Grained Lock Pessimistic Offline Lock Lazy Load Optimistic Offline Lock Auswahl von Persistenz Muster Persistenz Muster definieren Strategien zur Abbildung von Objekten und ihren Beziehungen in der Datenbank, zum Lesen und Schreiben der Daten von und in die Datenbank, sowie das Handling von konkurrierenden Zugriffen auf die Datenbank.
Konkurrenz (Grundproblematik) 5 Mehrbenutzersystem Daten sind schon erfasst Zeitgleicher Zugriff (lesen und/oder schreiben) auf einen oder mehrere Datensätze in der Datenbank möglich Es muss garantiert werden können, dass keine inkonsistenten Daten entstehen. Konkurrenz kann mittels optimistischem oder pessimistischem Sperren gehandhabt werden
Optimistic Offline Lock 6 Beispiel Intro Sitzplatzreservierungssoftware für ein Flugzeug Nadia ist eine Kundenberaterin und erhält ein telefonische Reservierung für Sitz 19 von Hans Mustermann Während Nadia die Personalien aufnimmt will auch Matthias für Frau Renata Hauswurst denselben Sitz reservieren. Nadia wird von Ihrem Vorgesetzten abgelenkt und in ein Gespräch vertieft. Matthias validiert die Benutzerdaten und speichert die Daten für Sitz Nummer 19. Der Vorgesetzte ist weg und auch Nadia möchte jetzt Sitz Nummer 19 bestätigen. Was kann, sprich muss das Programm tun, dass die Daten nicht überschrieben werden und inkonsistent werden? ID SitzID KundenID Status Preis 114 18 2598 Besetzt 350.00 115 19 NULL Frei 365.00
Optimistic Offline Lock 7 Lösungsansatz Beim optimistischen Sperren geht man davon aus, dass alle Benutzer den Datensatz gleichzeitig lesen dürfen. (Read Rechte) Die Datentabelle wird um mindestens ein Feld erweitert (Revisionsnummer / Letzte Änderung). Schlüssel Feld01 Feld02 Version Letzte Änderung Verantwortlicher Falls nötig wird ein zweites Feld mit dem Verantwortlichen der Änderung hinzugefügt. (Nachfrage Möglichkeit) Beim Speichern der Daten (Update) wird überprüft (mittels einer where-klausel), ob die Version des Datensatzes noch stimmt. (Inkonsistenz Überprüfung) Falls Ja Daten speichern, Version inkrementieren / Zeitstempel aktualisieren Falls Nein Änderungen verwerfen, Fehlermeldung ausgeben, Rollback durchführen
Optimistic Offline Lock 8 Beispiel Lösung ID SitzID KundenID Status Preis Version Verantwortlicher 115 19 NULL Frei 365.00 1 BOOT ID SitzID KundenID Status Preis Version Verantwortlicher 115 19 6543 Besetzt 365.00 2 Matthias
Optimistic Offline Lock 9 Varianten Falls unterschiedliche Felder in einem Datensatz editiert wurden, wäre es unter Umständen möglich ein programmatisches Merge durchzuführen. ID SitzID KundenID Status Preis Version Verantwortlicher 115 19 NULL Frei 365.00 1 BOOT ID SitzID KundenID Status Preis Version Verantwortlicher 115 19 6543 Besetzt 365.00 2 Matthias ID SitzID KundenID Status Preis Version Verantwortlicher 115 19 NULL Frei 450.00 2 Hans ID SitzID KundenID Status Preis Version Verantwortlicher 115 19 6543 Besetzt 450.00 2 Hans
Optimistic Offline Lock 10 Zusammenfassung Optimistisches Sperren kann drohende Inkonsistenzen von Mehrbenutzersystemen beim Zeitpunkt des Updates in die Datenbank erkennen und verhindern. Vorteile: Lesezugriff ist zu jederzeit gestattet Lesende Clients sind uneingeschränkt Keine künstliche Freigabe für einen Datensatz der nur gelesen wird Nachteile: Nach abgewiesenem Update, muss das Formular (Daten) erneut eingegeben oder die Daten zusammengeführt werden Es besteht trotzdem keine Garantie, dass es beim zweiten Mal klappt Daten können veraltet sein Der Optimistic Offline Lock ist nur geeignet für Situationen in denen es nur gelegentlich zu Konfliktsituationen kommen kann. Für häufige Konfliktsituationen ist der Pessimistic Offline Lock zu wählen.
Pessimistic Offline Lock 11 Beispiel Intro Der Patient Peter Egger wird im Krankenhaus auf verschiedenen Stationen untersucht. Fortlaufend treffen neue Untersuchungsergebnisse ein und werden in der elektronischen Krankenakte erfasst. Da viele Untersuchungen durchgeführt wurden und die Resultate zeitversetzt bekannt gegeben werden, kommt es zu zeitgleichen Zugriffen auf die Krankenakte. An den Untersuchung von Peter Egger sind mehrere Abteilungen und Ärzte beteiligt, weshalb ein konkurrierender Zugriff häufig vorkommt. Aufgrund der häufigen, konkurrierenden Updates der Krankenakte würde man mit einer optimistischen Sperre laufend Daten verwerfen, da in der Zwischenzeit schon ein Update durchgeführt wurde. Was kann man also tun um keine inkonsistenten Daten zu erhalten?
Pessimistic Offline Lock 12 Lösungsansatz Der Datensatz wird gesperrt, sobald er mit dem Ziel der Bearbeitung gelesen wird. ID Feld01 Feld02 Sperre Benutzer Ja Der Datensatz wird erst wieder freigegeben, wenn die Transaktion (das Ändern des Datensatz) abgeschlossen wird. ID Feld01 Feld02 Sperre Benutzer Nein NULL Um ein Blockieren des Datensatzes zu verhindern, wird oft ein Zeitstempel hinzugefügt. Nach dessen Ablauf wird der Datensatz wieder freigegeben. (Fehlermeldung an Nutzer) Es sollte unbedingt ein zentraler Lockmanager (Singelton), der exklusiven Zugriff auf die Sperren hat, erstellt werden.
Pessimistic Offline Lock 13 Beispiel Lösung ID Name Vorname Resultat Gesperrt Verantwortlicher 115 Egger Peter Nein NULL ID Name Vorname Resultat Gesperrt Verantwortlicher 115 Egger Peter Ja Dr. F. Meyer
Pessimistic Offline Lock 14 Varianten Exklusive Schreibsperre: Sperrt den Datensatz um diesen zu bearbeiten. Lässt jedoch zu, dass weiter Anwender den Datensatz lesen können. Exklusive Lesesperre: Sperrt den Datensatz beim Lesen für jeden weiteren Lese- oder Schreibzugriff. Lese/Schreibsperre: Kombination aus exklusiver Schreib- und Lesesperre. Datensätze können von mehreren Benutzern zum Lesen gesperrt werden, falls keine Schreibsperre existiert oder die einzige ihm selbst gehört. Eine Schreibsperre kann nur von einem Benutzer gesetzt werden, wenn keine Sperren existieren oder die einzige Lesesperre dem Benutzer selbst gehört
Pessimistic Offline Lock 15 Zusammenfassung Pessimistisches Sperren verhindert drohende Inkonsistenzen von Mehrbenutzersystemen, in dem es den Datensatz beim Lesen für die anderen Zugriffe sperrt. Vorteile: Nur einer kann Änderungen durchführen und er weiss, dass seine Daten gespeichert werden können. Es muss nicht gemerget werden. Der Anwender welche die Daten sperrt, kann sich sicher sein, dass er auf der aktuellsten Version arbeitet. Nachteile: Bei exklusiver Schreibsperre weiss man nicht, ob die Daten für das folgende Lesen aktuell sind. Exklusive Lesesperren verhindern jeden gleichzeitigen Zugriff auf den selben Datensatz. Lese-/Schreibsperren sind meist kompliziert zum Umsetzen. Der Pessimistic Offline Lock wird verwendet, wenn es zu vielen Konfliktsituationen kommt.
Vergleich 16 Anwendung Optimistic Offline Lock Wenn selten Konflikte vorkommen Pessimistic Offline Lock Wenn häufig Konflikte vorkommen Umgang mit Konflikten Konflikt wird behandelt Konflikt wird verhindert Implementation gering Je nach Variante sehr komplex Strategie Prüfen vor Update Sperren beim Lesen
Fragen? 17