Ситуация такая. Игровой портал, игра происходит на node.js, затем нода посылает данные на сервер php, а он в свою очередь просчитывает результат и делает записи в базу.
Как это выглядит:
Пользователи отыграли в игру, node.js послал массив пользователей с очками игры на сценарий php, php определил победителей и теперь необходимо сделать в базу кучу запросов:
1) достать данные игры и убедиться, что нам пришли правильные данные
2) записать в лог таблицу, что сыграна такая-то игра
3) сделать 4 запроса к каждому игроку:
- получить данные об игроке
- обновить рейтинг и тп
- сделать запись о том, что он сыграл игру (в 20:21 пользователь выиграл или проиграл и тп...)
- обновить данные
В игре может быть от 2 до 4 человек. Всего игр 10. В каждой игре может играть около 1000 человек.
По подсчетам, что бы обработать результат игры для 4 игроков нужно сделать около 20 запросов в базу данных.
Подскажите пожалуйста при росте посещаемости, как сервер отнесется к такой операции?
К примеру если одновременно будет сыгранно 100 партий в 10 играх. Серверу нужно будет сделать 2000 запросов в базу данных. Чем это черевато? И решит ли веб кластер проблему если она будет с нагрузкой?
СУБД бывают в двух типах:
- блокировочник: все обращения на сервер возвращают читаемое значение без всяких проблем. Скорость выполнения и логика работы очень простая. При изменении какой-либо записи, все операции временно блокируются, а потом продолжаются по окончании изменений.
- транзакционная модель: позволяет читать и изменять записи. Измененные записи создают временные копии, которые просто ожидают подтверждение или отмену этих изменений. Пока данные не подтверждены все другие записи видят только то, что было до изменений.