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

Тема в разделе "PHP", создана пользователем 1d37r, 25 сен 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. 1d37r

    1d37r Читатель

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

    [ADD]
    есть ли какая-нибудь альтернатива функции flock() которая так же работает с БД?
     
  2. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    Если практически, то счетчик увеличится на 2.
    Даже без использование LOCK TABLE READ;
     
    1d37r нравится это.
  3. 1d37r

    1d37r Читатель

    Заблокирован
    Регистр.:
    16 сен 2007
    Сообщения:
    287
    Симпатии:
    48
    Хм...
    Предположим значение колонки count = 10
    извлекаем и записываем в переменную $count = 10
    прибавляем счетчик $cont++
    Записываем в таблицу, получаем в колонке count = 11

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

    Т.е. я так понимаю нужно что-то сделать, а что я пока не понимаю :(
    Но это только на теории на практике не знаю как проверить.
     
  4. MrScruff

    MrScruff

    Регистр.:
    9 сен 2008
    Сообщения:
    279
    Симпатии:
    66
    ОДНОВРЕМЕННО ничего не происходит. Задержки в любом случае есть. Поэтому все посчитается ровно
     
    1d37r нравится это.
  5. 1d37r

    1d37r Читатель

    Заблокирован
    Регистр.:
    16 сен 2007
    Сообщения:
    287
    Симпатии:
    48
    хм... даже на условии если например на сайт примерно одновременно зайдет 1000-10000 пользователей?
     
  6. SoaringHawk

    SoaringHawk Постоялец

    Регистр.:
    25 апр 2009
    Сообщения:
    61
    Симпатии:
    2
    Да.
    http://www.inode.ru/articles/database/2005-08-19/43PS А для счетчика и не обязательно создавать php переменную. Все в один запрос:
    PHP:
    UPDATE table SET counter=counter+1
     
    1d37r нравится это.
  7. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    Запросы update всегда идут последовательно
     
    1d37r нравится это.
  8. west bomzh

    west bomzh Постоялец

    Регистр.:
    25 апр 2008
    Сообщения:
    69
    Симпатии:
    13
    один из юзеров просто получит запуск скрипта с задержкой. при большом количестве юзеров задержка станет заметней.
     
    1d37r нравится это.
  9. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    при такой модели поведения, конечно не оберешся глюков
    пользуйтесь примером SoaringHawk
     
Статус темы:
Закрыта.