Как бороться с большими таблицами в MySQL? (Дизайн БД для игры) - PullRequest
0 голосов
/ 14 сентября 2011

Предположим, у меня есть стол с играми, стол с игроками и стол с пользователями.

  • В каждой игре много игроков
  • Каждый игрок имеет статус, например, «мертвый» или'в живых'.Таким образом, игроки не являются пользователями.
  • У каждого игрока есть пользователь

Структура пока выглядит отлично.Но мне было интересно, могут ли быть тысячи игр в день (игра такого типа очень короткая), и в каждой игре по 10 или 20 игроков ... Я могу закончить с миллионами рядов в таблице игроков меньшечем год.И мне нужно хранить каждого игрока в таблице даже после окончания игры, потому что я хочу иметь возможность воспроизвести любую игру.Я беспокоюсь о производительности в тот момент, выбор и обновления будут становиться все медленнее и медленнее, верно?

Есть мысли?

Ответы [ 2 ]

2 голосов
/ 14 сентября 2011

По сути это вопрос масштабируемости.Поскольку масштабируемость является проблемой, с которой сталкиваются почти все популярные веб-сайты, игры и т. Д., Существует ряд решений для этого.Прежде всего, при разумной структуре базы данных и использовании индексов современные базы данных могут нормально обрабатывать миллионы строк данных.Если ваша игра настолько популярна, что объем данных выходит за рамки возможностей современных баз данных, и у вас есть какая-то бизнес-модель для вашего предприятия, вы, вероятно, заработаете достаточно, чтобы нанять первоклассных экспертов, которые помогут вам в решении этой проблемы.

Если вы только начинаете внедрять игру, я бы посоветовал вам оставить точную настройку базы данных и запросить ее на более поздний срок, и, скорее всего, узкие места в производительности окажутся не там, где вы ожидаете.Не оптимизируйте преждевременно:)

1 голос
/ 14 сентября 2011

Да, через долгое время могут возникнуть некоторые проблемы с производительностью, но правильное индексирование этих полей таблиц сделает это намного проще для вас.

Отслеживайте все предстоящие запросы выбора и обновления в ваших таблицах и выполняйте правильную индексацию.

Вы можете сослаться Как MySQL использует индексы и ОБЪЯСНЯТЬ Формат вывода

Можно также придумать логику для архивации некоторых игр или записей через некоторое время (например, 1 месяц или 2 месяца) в другие таблицы с такой же структурой.

...