#postgresql
Вопрос:
Я не знаком с PostgreSQL. Я нашел этот запрос
UPDATE theater_visitor
SET viewer_total_count = viewer_total_count 1
WHERE movie_id = $1
Давайте рассмотрим это. 100 пользователей начнут смотреть одновременно, 100 запросов поступят одновременно, как поведет себя сервер postgresql?
Я лично думаю, что этот дизайн можно улучшить, учитывая некоторый механизм организации очередей для снижения скорости записи, какой еще вопрос меня должен беспокоить?
Комментарии:
1. 100 пользователей-это ничто, и с опубликованным вами кодом не будет проблем с производительностью. Увеличьте это число до 100 000, которые начинаются точно в одно и то же время, и это может стать проблемой. Не работайте над преждевременной оптимизацией. Позвольте СУБД выполнять свою работу, и когда у вас начнутся проблемы с производительностью, вы можете использовать план выполнения запроса, чтобы выяснить, где находится узкое место, и поработать над его устранением.
2. @KenWhite, спасибо за ответ.
Ответ №1:
Если 100 пользователей смотрят разные фильмы, они будут обновляться параллельно. Если все они смотрят один и тот же фильм, обновления будут автоматически сериализованы. Поскольку блокировки сохраняются до конца транзакции базы данных, важно, чтобы эта транзакция была как можно более короткой.
Комментарии:
1. Спасибо, точка беспокойства-это вход в один и тот же фильм. 100 — плохой пример. Ожидание, 10000 активности в одном потоке. Ваш вклад полезен.
2. «Поток»? Не совсем понимаю, что ты имеешь в виду.