ich wollte zum Thema Locking in Mehrbenutzerumgebungen eure Meinung hören um vielleicht eine Strategie zu erarbeiten. Das Thema brennt jetzt nicht unter den Fingernägeln, macht für mich aber Sinn es mal anzugehen.
Nehmen wir mal an es ist eine Mehrbenutzerungebung in einem Unternehmen, alle User müssen sich anmelden. Weiters nehmen wir eine Applikation mit Kontaktdaten (Name, Adresse Telnummer etc etc)
Für jeden Kontaktdatensatz sind mehrere Tabellen betroffen (also zB mehrere Adressen, mehrere Namen, historische Notizen und vieles mehr)
Grafisch wird das in einem Fenster präsentiert in dem mehrere andere Fenster und Frames eingeklebt sind und so logisch zu einem "Kontaktobjekt" zusammengefasst sind.
Nachdem es für den Benutzer aussieht als ob es nur ein Fenster mit einem Kontaktobjekt ist, wären "Speichern"-Buttons auf allen Teilframes nicht sinnvoll. (oder seht ihr das anders?)
Daher gibt es nur einen Knopf "Editieren" der das ganze Konglomerat in den Editiermodus versetzt und eine "Speichern" Knopf der alles speichert. (dass dazwischen einiges an Logik passieren muss sein mal dahingestellt.)
Nun -- es wäre möglich direkt in der Datenbank für die zeit des Editierens Tabellen zu sperren (halte ich für unpraktisch weil Benutzer gerne mal in den Editiermodus gehen und dann ein längeres Telefonat annehmen).
Als Alternative in der DB wäre noch direktes Record-Locking, was aber auch seine Herausforderungen hat wenn mehrere Records in unterschiedlichen Tabellen betroffen sind und dann auch noch mehrere Records je Tabelle (zb mehrere Telefonnummern).
Zudem drückt das auf die Performance, nicht alle Datenbanken bieten so etwas an und jede löst das anders.
Bleibt für mich so etwas wie logisches Locking -- Man sperrt quasi die Benutzung des gesamten Objektes wenn ein Benutzer mit einem Kontaktobjekt in den Editiermodus geht.
Praktisch erfolgt das durch eine Prozedur die zuerst prüft ob das Kontaktobjekt noch nciht gelockt ist, danach selbst einen Lockeintrag setzt und alle zugehörenden Frames in den Editiermodus setzt.
Dabei wäre wichtig eine Art Semaphormodus zu haben dass es nicht möglich ist dass sich zwei Sperranforderungen kreuzen und alles trotzdem performant bleibt.
==> für diese sichere Sperrung fehlt mir irgendwie praktisch der Plan
Nach dem Editieren mit Cashedupdates müsste man transaktionsgesichert alle ApplyUpdates durchführen (reicht das alleine oder braucht es noch etwas anderes?)
Die Diskussion ist eröffnet
