Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.06.2011, 13:47
Аспирант
Отправить личное сообщение для igrok Посмотреть профиль Найти все сообщения от igrok
 
Регистрация: 09.07.2010
Сообщений: 98

блокировка записи в БД на изменение в веб приложении
Привет всем,
пишу небольшое веб приложение, ситуация следующая -
есть запись в БД, допустим один юзер загрузил страницу с содержимым этой записи и начал редактировать, в это время второй ее изменил и сохранил, после этого первый юзер делает submit т.е. сохраняет свои изменения, в итоге получается что работа юзера номер 2 потеряна. На уровне БД это делается блокировками записей, но как это можно релизовать в веб приложении если у первого юзера между загрузкой страницы редактирования и сабмитом формы блокировка не сохранится.

P.S. язык php

Всем заранее спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 24.06.2011, 14:20
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,589

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

Последний раз редактировалось dmitriymar, 24.06.2011 в 14:24.
Ответить с цитированием
  #3 (permalink)  
Старый 24.06.2011, 14:24
Аспирант
Отправить личное сообщение для igrok Посмотреть профиль Найти все сообщения от igrok
 
Регистрация: 09.07.2010
Сообщений: 98

блокировка целой таблицы? - это слишком жестоко, а если эта запись -товар, то получается остальные товары тоже нельзя изменять пока кто то один редактирует, получается однопользовательское приложение
Ответить с цитированием
  #4 (permalink)  
Старый 24.06.2011, 14:26
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,589

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

Последний раз редактировалось dmitriymar, 24.06.2011 в 14:32.
Ответить с цитированием
  #5 (permalink)  
Старый 24.06.2011, 14:30
Аспирант
Отправить личное сообщение для igrok Посмотреть профиль Найти все сообщения от igrok
 
Регистрация: 09.07.2010
Сообщений: 98

я просто ответил раньше чем сообщение обновилось

да согласен так можно сделать, но это велосипед получается, сделать его конечно реально, мне просто интересно как эту проблему решают другие, или может уже есть реализация этого велосипеда.
Ответить с цитированием
  #6 (permalink)  
Старый 24.06.2011, 14:33
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,589

igrok,
ну mysql позволяет только всю таблицу блокировать-не думаю что есть решения кардинально отличающиеся
Ответить с цитированием
  #7 (permalink)  
Старый 24.06.2011, 14:40
Аспирант
Отправить личное сообщение для igrok Посмотреть профиль Найти все сообщения от igrok
 
Регистрация: 09.07.2010
Сообщений: 98

innodb позволяет блокировать конкретные записи вроде

в любом случае спасибо за помощь
Ответить с цитированием
  #8 (permalink)  
Старый 24.06.2011, 15:16
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,589

Сообщение от igrok
innodb позволяет блокировать конкретные записи вроде
та да если порыться в ответвлениях mySql можно найти многое,вопрос с чем придётся распрощаться взамен с отказом от mysam.
Ответить с цитированием
  #9 (permalink)  
Старый 04.07.2011, 16:07
Интересующийся
Отправить личное сообщение для Vuzy Посмотреть профиль Найти все сообщения от Vuzy
 
Регистрация: 01.07.2011
Сообщений: 19

Помоему если речь идет о конкретной записи (строке) в БД то лучше внести в нее определенный параметр и при запросе на изменение обновлять параметр и устанавливать максимальное время редактирования скажем 5 минут. после чего когда пользователь нажал на кнопку сохранить убирать таймстамп и запись из этого поля.
И добавить проверку таймстампа тоже не помешает. самый оптимальный варинт. Тогда и другие записи будут открыты для редактирования и таблицу закрывать не надо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск