@pro100chel

Может ли база данных не успевать обновляться?

Представим ситуацию. Есть база данных MySql и в ней таблица в которой всего 1 запись. В этой записи идет подсчет количества посещений сайта.
Представим, что на сайт зашли 1000 человек и сервер справляется с нагрузкой, при этом посетители заходят с задержкой в 0.01 секунды. То есть первый посетитель, потом через 0.01 секунды второй и т.д. Успеет ли база данных обновиться и показывать всегда актуальные значения? А что если все зайдут одновременно? Или с задержкой в наносекунды? Какое число будет отдавать база данных?
  • Вопрос задан
  • 186 просмотров
Пригласить эксперта
Ответы на вопрос 3
inoise
@inoise
Solutions Architect, AWS Certified, Serverless
Для начала стоит определиться с тем что значит актуально. После того как определяемся с этим понятием сразу осознаем что вам "актуально" и не надо
Ответ написан
BojackHorseman
@BojackHorseman Куратор тега MySQL
...в творческом отпуске...
может. зафлудить сервак конкурирующими апдейтами несложно, поэтому никто так и не делает.
Ответ написан
Gomonov
@Gomonov
На самом деле можно словить состояние гонки. Ну это опять же, как будет реализовано обновление данных. Если сначала запрос на существующее количество пользователей, инкремент значения в коде, запрос на обновление - поймаете состояние гонки. Т. Е. заходят одновременно два посетителя. Происходит одновременно чтение текущего кол-ва посетителей - например 100. Для обоих посетителей вычисляется новое значение - 101 и записывается в базу. Т. е. по факту после посещения двух пользователей, в базе получилось 101, а должно быть значение 102. Это состояние гонки. Если апдейтить одним запросом, а потом выбирать - то будет всё норм. Я, правда, для таких целей посоветовал бы redis, и там уже к значению применять incr, который инкрементит на 1 и сразу возвращает значение. Но это другая история)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы