PHP MVC update data without refresh
Доброго времени суток!
Написал некий функционал на сайте, но реализовано все это не очень удобно, хотелось-бы узнать мнение экспертов :)
Суть следующая: Имеется сайт PHP MVC, на нем есть некая страничка, при загрузке которой выполняется некая логика, после чего выводится табличка с данными из MSSQL.
$a = кол-во записей в таблице
if ($a > 0){
проверяем статус последней записи в таблице
if($status = 0){
апдейтим статус
} else {
добавляем запись в таблицу
}
} else {
добавляем запись в табличку
}
->Выводим страничку
Соответственно при апдейте страницы каждым пользователем будет селектиться запрос и если несколько пользователей одновременно обновят страничку, то в табличку могут добавиться дубликаты.
Вижу 2 варианта решения: 1. Добавить дополнительную проверку, работает-ли данная штука в текущий момент (если работает - ничего не делаем) 2. Не выполнять данные действия при загрузке страницы, но тогда вопрос - как получать данные ? Разве что вынести в отдельный метод и дергать по расписанию раз в несколько (сек\мин). 3. ???? 4. PROFIT!!11
Есть-ли идеи на данный счет ? :)
Ответы (1 шт):
Всё, что Вы написали - слишком общее описание. Никакой конкретики. Дам такие же общие ответы, что можно сделать:
1) Почитать про race condition - что это такое и как с этим работать. Особенно почитать про атомарные операции, в связи с чем: 2) Почитать про транзакции. Как их запускать и завершать. Впрочем, это только одно из решений.
А на практике - если возникает race condition - значит, с очень большой вероятностью, что-то плохо спроектировано в самом приложении (да, страница веб-сайта, это тоже приложение). И имеет смысл подумать над тем, как сделать так, чтобы на данной странице вообще не возникало ситуации, в которой может быть состояние гонки. То есть - лечить не следствие (возможность возникновения ситуации порчи данных), а причину - сделать так, чтобы не возникало ситуации, когда надо наперегонки менять статус.
Ну и, в связи с этим, рекомендую почитать про функциональное программирование, в части "состояний". Впрочем, это уже сильное колдунство.