Про очередность заполнения базы данных при высокой нагрузке сайта

Рейтинг: 0Ответов: 1Опубликовано: 24.12.2014

Представим себе такую ситуацию (гипотетическую).
Пользователи какого-то сайта могут оставлять комментарии на какой-то (фиксированной) странице сайта, и доспустим, что эти комменты сохраняются и нумеруются в базе данных по очереди, т.е. номер следующего коммента = номер предыдущего + 1.
Если комментов будет добавляться очень много в единицу времени (много пользователей), то может ли быть такое, что какие-то два коммента будут иметь один и тот же номер из-за того, что они пришли на обработку одновременно?

Если такая проблема возможна, то как она решается?
Celery или Gearman могут решить эту задачу?

Ответы

▲ 1

Если такая проблема возможна, то как она решается?

Полем AUTO_INCREMENT / IDENTITY в БД (в зависимости от того, что за движок используется).

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