Я занимаюсь разработкой игры и использую таблицу лидеров, чтобы отслеживать счет игрока.Существует также требование отслеживать около 200 дополнительных статистических данных.Эти характеристики такие как: убийства, смерти, время игры, использованное оружие, полученные достижения и т. Д.
Что будет интересно игрокам, так это счет, убийства, смерти и время игры.Все остальные характеристики не обязательно должны отображаться в игре, но должны быть доступны, если я хочу их просмотреть или сравнить с другими игроками.Ожидаемое количество игроков, которые будут сохранены в этой таблице лидеров, составляет около 2 миллионов.
В настоящее время дизайн заключается в том, чтобы хранить идентификатор игрока вместе со всеми статистическими данными в одной таблице, например:
player_id
, points
, stat_1
.. stat_200
, date_created
, date_updated
Если я хочу показать отсортированную таблицу лидеров по точкам, мне нужно будет поставить индекс науказывает и делает сортировку по нему с помощью запроса выбора и ограничивает результаты, чтобы возвращать, скажем, 50 каждый раз.Есть также идеи, чтобы игрок мог сортировать таблицу лидеров по паре других характеристик, таких как время игры или смерти, максимум до, скажем, 5 сортируемых характеристик.
Число ожидаемых пользователей, играющих в игру, составляетоколо 40к одновременно.Может быть, четверть из них, но это действительно приблизительная фигура, будет активно просматривать список лидеров, остальные просто будут играть в игру и загружать свои результаты, когда они будут закончены.
У меня есть несколько вопросов об этом подходе ниже:
Кажется, но у меня есть сомнения, что консенсус в том, что списки лидеров с миллионами записей должныБыть сортируемым по паре статистических данных не очень хорошо масштабируется в РСУБД.Это правильно?
Сортирует ли список лидеров по точкам с помощью запроса выбора, предполагая, что у нас есть индекс, будет очень медленным, и если да, то как я могу обойти это?
Должен ли я разделить хранение дополнительных статистических данных, которые не должны сортироваться в отдельной таблице, или есть другой, еще лучший подход?
Будет ли необходимо кэширование отсортированных результатов в памяти или в отдельной таблице, учитывая ожидаемую нагрузку и, если да, какие решения или варианты мне следует рассмотреть?
Еслимой подход совершенно неправильный, и мне было бы лучше сделать что-то подобное по-другому, пожалуйста, дайте мне знать, даже варианты, такие как решения NoSQL в облачных средах хостинга, открыты для рассмотрения.
Cheers