2009-03-20 6 views
2

Ich entwickle eine PHP/MySQL-Anwendung, die mehrere gleichzeitige Benutzer behandelt. Ich denke an den besten Ansatz, wenn es darum geht, Datensätze, die gerade angezeigt/bearbeitet werden, zu sperren/zu warnen.Multi-User-Anwendung Datensatzsperre - beste Methode?

Das zu vermeidende Szenario ist, dass zwei Benutzer den Datensatz anzeigen, wobei der eine Änderungen vornimmt und der andere dies ebenfalls vornimmt - mit dem Potenzial, dass eine Änderung die vorherige überschreibt.

In den neuesten Versionen von WordPress verwenden sie eine Methode, um dies zu erkennen, aber es scheint nicht ganz zuverlässig - oft nach meiner Erfahrung oft falsch positive Ergebnisse.

Ich gehe davon aus, dass irgendeine Form von Ajax vorhanden sein muss, um die Anwendung zu "pingen" und sie wissen zu lassen, dass der Datensatz noch angezeigt/bearbeitet wird (andernfalls könnte ein Benutzer einfach sein Browserfenster schließen und dann die Anwendung) weiß das). Eine andere Lösung, die ich sehen konnte, ist die Überprüfung der letzten aktualisierten Zeit, wenn ein Datensatz zur Aktualisierung gesendet wird, um zu sehen, ob er in der Zwischenzeit an anderer Stelle aktualisiert wurde - und dann dem Benutzer die Wahl bietet, fortzufahren oder eigene Änderungen zu verwerfen .

Vielleicht bin ich bellt den falschen Baum in Bezug auf eine Lösung - was sind die Menschen Erfahrungen mit der Umsetzung dieser (was muss eine ziemlich häufige) Anforderung sein?

Antwort

6

Ich würde dies tun: in der Bearbeitungsform, die Zeit der letzten Änderung speichern. Vergleichen Sie diese Zeit bei der Einreichung mit der in der Datenbank gespeicherten Zeit. Wenn sie gleich sind, sperren Sie die Tabelle, aktualisieren Sie die Daten (zusammen mit der Änderungszeit) und entsperren Sie die Tabelle. Wenn die Zeiten anders sind, benachrichtigen Sie den Benutzer darüber und fragen Sie nach dem nächsten Schritt.

+0

Das ist definitiv der Ansatz, auf den ich zutrug - viel schneller zu implementieren als jede Art von Ajax-Lösung und zuverlässiger. – BrynJ

+0

Sie können die AJAX-Lösung immer mit dieser Idee bauen - Pingen oder die Zeitstempel entweder kurz vor dem Speichern oder regelmäßig anfordern, dann den Benutzer fragen, was er tun möchte - vielleicht eine Option zum Überschreiben geben wenn ihr Benutzerlevel so ist, dass sie erlaubt sind. – Paul

1

Gute Idee mit dem Timestamp-Vergleich. Es ist kostengünstig zu implementieren, und es ist eine kostengünstige Operation in der Produktion zu laufen. Sie müssen nur die Logik schreiben, um dem Benutzer die Statusnachricht zu senden, dass ihr Schreiben/Aktualisieren nicht stattgefunden hat, weil jemand sie dazu geschlagen hat.

Vielleicht in Betracht ziehen, den Benutzernamen bei jedem Update in einem Feld namens "LastUpdateBy" zu speichern und das Ergebnis an den Benutzer zurückzuliefern, dem die Aktualisierung vorgemerkt wurde. Nur ein bisschen Feingefühl für den Benutzer. Nett im unternehmerischen Sinne, vielleicht nicht in einer Umgebung, in der es nicht angebracht wäre.

+0

Gute Idee mit der Benutzerbenachrichtigung - Ich speichere bereits einen Zeitstempel und eine Benutzerkennung des letzten Updates. – BrynJ

Verwandte Themen