Что произойдет если несколько человек одновременно зайдут на сайт?

Статус
В этой теме нельзя размещать новые ответы.

1d37r

Читатель
Заблокирован
Регистрация
16 Сен 2007
Сообщения
287
Реакции
62
  • Автор темы
  • Заблокирован
  • #1
Тема немного не верна, вот меня интересует следующий вопрос:
допустим у нас есть такой код
PHP:
// соединяемся с базой данных MySQL получаем из таблицы count результат колонки site_count
// записываем результат в переменную $count
// приплюсовываем к $count посещение и записываем в БД
Что произойдет если допустим два или более человек ОДНОВРЕМЕННО запустят скрипт?

[ADD]
есть ли какая-нибудь альтернатива функции flock() которая так же работает с БД?
 
Если практически, то счетчик увеличится на 2.
Даже без использование LOCK TABLE READ;
 
  • Автор темы
  • Заблокирован
  • #3
Хм...
Предположим значение колонки count = 10
извлекаем и записываем в переменную $count = 10
прибавляем счетчик $cont++
Записываем в таблицу, получаем в колонке count = 11

Если запустить параллельно скрипт два раза (на двух машинах (или не дай бог на 1000), одновременно), то получим в итоге 11 а не 12, по логике.

Т.е. я так понимаю нужно что-то сделать, а что я пока не понимаю :(
Но это только на теории на практике не знаю как проверить.
 
ОДНОВРЕМЕННО ничего не происходит. Задержки в любом случае есть. Поэтому все посчитается ровно
 
  • Автор темы
  • Заблокирован
  • #5
хм... даже на условии если например на сайт примерно одновременно зайдет 1000-10000 пользователей?
 
Да.
PS А для счетчика и не обязательно создавать php переменную. Все в один запрос:
PHP:
UPDATE table SET counter=counter+1
 
Запросы update всегда идут последовательно
 
один из юзеров просто получит запуск скрипта с задержкой. при большом количестве юзеров задержка станет заметней.
 
Хм...
Предположим значение колонки count = 10
извлекаем и записываем в переменную $count = 10
прибавляем счетчик $cont++
Записываем в таблицу, получаем в колонке count = 11
Если запустить параллельно скрипт два раза (на двух машинах (или не дай бог на 1000), одновременно), то получим в итоге 11 а не 12, по логике.
Т.е. я так понимаю нужно что-то сделать, а что я пока не понимаю :(
Но это только на теории на практике не знаю как проверить.
при такой модели поведения, конечно не оберешся глюков
пользуйтесь примером SoaringHawk
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху