Suchen Sie für eine Empfehlung zur Aufzeichnung sichernd innerhalb eines verteilten Systems

StackOverflow https://stackoverflow.com/questions/207724

  •  03-07-2019
  •  | 
  •  

Frage

Wir versuchen, mit einem empfohlenen Entwurfsmuster für unser Team zu kommen, wenn es Verriegelung aufzunehmen kommt. Die typische Denkschule geht in etwa so: 1. Der Benutzer wählt einen Datensatz aus einer Liste 2. Sperren Sie den Datensatz mit der Benutzer-ID 3. Laden Sie den gesperrten Datensatz Datensatz (keine Sperre, dann jemand ya es schlagen).

Bin ich etwas fehlt, oder scheint dies der einzige Weg, dies zu tun? ((In unserem Fall Optimistisches Sperren würde sich als umständlich und verwirrend für die Endbenutzer. Edits sind oft ganz erheblich.))

War es hilfreich?

Lösung

Das Detail, das Ihre Lösungsverwaltung intensiv machen könnte, wird immer nach Abstürzen oder Verbindungsfehlern von Sperren befreien. Das ist, wo der Kompromiss zwischen optimistischen und pessimistischen Verriegelung wirklich liegt. Manuelles Zusammenführen oder redoing, Bearbeitungen, wenn das optimistische Sperren ein Schmerz nicht, aber nach Abstürzen auf pessimistisch und persistent Verriegelungs Modelle bis wischt schafft seine eigenen Kopfschmerzen (wie jeder, der Nutzer von Pervasive unterstützt Abrechnungssysteme in den 90er Jahren unterstützt Sie ausführlich gegeben erzählen die Möglichkeit)

Eine Antwort ist Ihre RDBMS Mechanismen zu verwenden, um Transaktionen und Parallelität zu verwalten: Besorgen Sie sich die Aufzeichnung mit SELECT FOR UPDATE oder was auch immer Syntax Ihre Anzüge Ihrer Umgebung und Isolationsstufe. Wenn einer Ihrer Kunden abstürzt oder wird die Transaktion getrennt rollt zurück und die Sperre wird freigegeben.

In einer verbindungslosen Umgebung wie das Internet oder eine Umgebung, in Verbindungen verloren und gewonnen häufig eine Sitzung basiertes Modell mit einem Session-Timeout funktionieren könnte auch:

  • Versuchen Sie, die bestehende Sperre auf den Datensatz zu löschen, wenn es für eine abgelaufene Sitzung
  • ist
  • Versuchen Sie, den Datensatz in die sessionid zu sperren (schlägt fehl, wenn der vorherige Schritt nicht)
  • Wählen Sie den gesperrten Datensatz (kein Datensatz zurückgegeben, wenn der vorherige Schritt nicht)

So die Sperre aufgehoben wird, wenn die Sitzung abläuft. NO manuell Sperren nach Abstürzen und einer gewissen Toleranz von Client / Verbindungsprobleme zu entfernen. Es dauert ein bisschen mehr Arbeit, obwohl zu codieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top