2009-03-20 3 views
2

Я разрабатываю приложение php/mysql, которое обрабатывает несколько одновременных пользователей. Я думаю о лучшем подходе к блокированию/предупреждению относительно записей, которые в настоящее время просматриваются/редактируются.блокировка записи многопользовательского приложения - лучший способ?

Сценарий, который следует избегать, - это два пользователя, просматривающих запись, один из которых делает изменение, а другой делает то же самое - с потенциалом, что одно изменение может перезаписать предыдущее.

В последних версиях WordPress они используют некоторый метод для обнаружения этого, но он не кажется полностью надежным - часто возвращающим ложные срабатывания, по крайней мере, в моем опыте.

Я предполагаю, что какая-то форма ajax должна быть на месте, чтобы «пинговать» приложение и сообщить ему, что запись все еще просматривается/редактируется (в противном случае пользователь может просто закрыть окно своего браузера, а затем как приложение знайте это).

Другим решением, которое я мог видеть, является проверка последнего обновленного времени, когда запись отправляется на обновление, чтобы убедиться, что в промежутке она была обновлена ​​в другом месте, - и затем предложит пользователю возможность продолжить или отменить свои собственные изменения ,

Возможно, я лаю неправильное дерево с точки зрения решения - что такое опыт людей в реализации этого (что должно быть достаточно распространенным) требованием?

ответ

6

Я хотел бы сделать это: Хранить время последней модификации в форме редактирования. Сравните это время с отправкой со временем, хранящимся в базе данных. Если они одинаковы, заблокируйте таблицу, обновите данные (вместе с временем модификации) и разблокируйте таблицу. Если время отличается, сообщите об этом пользователю и попросите следующий шаг.

+0

Это, безусловно, подход, к которому я склонялся - гораздо быстрее реализовать, чем любое причудливое решение ajax, и более надежным. – BrynJ

+0

Вы всегда можете создать решение AJAX поверх этой идеи - пинговать или запрашивать отметку времени либо непосредственно перед сохранением, либо регулярно, а затем спрашивать у пользователя, что они хотели бы сделать - возможно, предоставив возможность «переписать», если их уровень пользователя таков, что они разрешены. – Paul

1

Хорошая идея с сопоставлением времени. Это недорого для реализации, и это недорогая операция для запуска в производстве. Вам просто нужно написать логику, чтобы отправить пользователю сообщение о статусе, что их запись/обновление не произошло, потому что кто-то избил их.

Возможно, подумайте о том, чтобы сохранить имя пользователя при каждом обновлении в поле, называемом «LastUpdateBy», и вернуть его обратно пользователю, у которого было исправлено их обновление. Просто немного для пользователя. Ницца в корпоративном смысле, возможно, не в среде, где это может быть неприемлемо.

+0

Хорошая идея с уведомлением пользователя - я уже хранил временную метку и идентификатор последнего обновления. – BrynJ

Смежные вопросы