StaDi
@StaDi
Курьер в it отделе

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

Всем привет! Ввожу в курс дела:
Дали на доработку простую браузерную-онлайн игрушку.
Игровой момент сводится к тому, что игрок делает ставку и выбирает 1 из 3ех предметов, а соперник должен угадать. Если угадал, ставка твоя, не угадал ставку отдал.

По мне реализовано странно (хотя возможно здравая мысль в этом есть).
- Игрок делает ставку и выбирает предмет -> улетело в бд (назовём это столом)
- Раз в минуту включается сборщик "столов" и все созданные, но не отыгранные "столы" выгружаются из бд -> в файл json
- Раз в минуту js подгружает в игровую страницу содержимое файла с актуальными столами
- Любой из соперников (но только самый первый) может участвовать в игре за "столом" т.е. указывает предмет который как ему кажется выбрал игрок.
- Выбор соперника сравнивается с результатом игрока делавшего ставку, стол закрывается всё улетает в БД
...
И всё по кругу, кто-то создаёт, кто-то отгадывает, хотя можно делать то и то.

Надеюсь я объяснил понятно.

Поверхностные плюсы/минусы такой стратегии
+ Количество запросов к бд о информации по столам не зависит от игроков онлайн (тем самым мы должны выигрывать на производительности)
- Игроки не знают какие столы отыграны пока не файл с актуальными столами не перезапишется

Наверное есть и другие +/- с удовольствием прочитаю ваши комментарии на этот счёт.
И вопрос, как по вашему нужно реализовать механизм общения клиента с бд.

И спасибо!
  • Вопрос задан
  • 184 просмотра
Решения вопроса 1
Denormalization
@Denormalization
Вместо Mysql, можно использовать какую-нибудь key -> value БД, с автоматическим удалением ключей.

Тогда бОльшая часть запросов к mysql - просто не понадобится. В Mysql сохранять только результат игры (в случае успеха).

Плюс, если использовать redis, можно использовать его же sub/pub механизм, для синхронизации с клиентом.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы