2013-08-23 3 views
1

Я создаю теннисный сайт, который, конечно, должен отображать результаты. В настоящее время для получения рейтинга мне нужно суммировать баллы для каждого игрока, а затем заказывать их, даже если мне нужны только одиночные результаты. Я думаю, что это будет очень медленно, когда количество игроков в системе будет расти. Вот почему мне нужно каким-то образом кэшировать результаты и обновлять их только тогда, когда что-то изменилось (или добавьте какой-то тайм-аут, когда результаты будут обновлены).Правильный способ создания таблицы ранжирования?

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

В настоящее время я думаю, что это будет одна таблица для хранения всего. Это схема будет:

ranking_tbl Шма

rank_type (может быть конкуренция, команда, игрок или что-то еще)

rank_owner (кто владеет эти ряды, может быть командным игроком звания - владелец будет команда)

rank_item (который занимает, в примере команды будет игрок)

счет (фактический счет ранжировать по)

ранга (кэшированный ранг, обновляется только при добавлении новых баллов)

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

Вопрос: Есть ли лучший способ добиться рейтинга, чем использование моей таблицы shema?

ответ

1

Я думаю, что ваша схема будет работать. Я могу видеть 3 возможных решения, которые вы могли бы использовать, чтобы получить желаемую функциональность.

  1. Крон - Использование Cron Job (Запланированное задание) для обновления рейтинга на каждую ночь будет означать, что вы можете сделать объемную обработку при выключенном пиковое время (2 утра, например). Вы планируете сценарий, который заново заказывает игроков по зачету, присваивает им ранг и сохраняет это в базе данных.
  2. Single Save Recalculation - Если вы вставляете оценки одного игрока за один раз, вы можете посмотреть пересчет рангов после того, как сохраните какой-либо результат. Это обеспечило бы отличные современные ранги, но может иметь некоторый компромисс в производительности при добавлении большого количества баллов.
  3. Multi Save Recalculation - Скомпилируйте свои результаты в файл CSV, содержащий идентификатор игрока, и забейте его. Затем вы можете написать сценарий для анализа вашего CSV, обновите оценки всех игроков. После сохранения баллов вы можете пересчитать ряды для всех игроков.

Я лично предпочел бы 3-й вариант, но у него может быть немного больше накладных расходов по времени, чтобы первоначально настроить.

Надеюсь, это поможет.

+0

Благодарим за ваше время, система начнется с небольшого количества игроков, поэтому второй вариант должен сделать это сейчас. Я приму свой ответ. – insanebits

Смежные вопросы