Критерии для хранения результатов расчета и выполнения расчетов во время выполнения - PullRequest
0 голосов
/ 29 августа 2011

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

Например, процент ударов, сделанных и пропущенных при попытке на расстоянии менее 10 футов.

Некоторые параметры:

  1. просмотры отчетов происходят чаще, чем новые записи записей
  2. Отчеты должны запускаться как можно быстрее, и это является более высоким приоритетом, чем быстрое сохранение
  3. Каждая лунка в раунде имеет запись
  4. Каждый раунд имеет запись
  5. Каждый пользователь имеет запись статистики за всю жизнь
  6. Мы храним более 250 отдельных точек данных за раунд (включая запись отверстий)
  7. На страницах статистики отображается около 100 отдельных расчетов

Мой текущий подход заключается в добавлении полей в таблицы статистики дыр / раундов / времени жизни по мере необходимости новой статистики и для вычисления статистики каждый раз при сохранении раунда.

Проблема в том, что в какой-то момент мы можем превысить максимальный размер строки mySQL, равный 65535 байт.

Итак, вопросы:

  1. Есть ли момент, когда я должен начать вычислять статистику на лету, а не хранить ее?
  2. В качестве альтернативы, я должен просто планировать добавление новых таблиц статистики для удержания переполнения?

1 Ответ

0 голосов
/ 29 августа 2011

Если у вас есть индексы в полях date, hole, user и round, для расчета последних статистических данных потребуется очень мало времени.

SELECT s.*           
       , 1 - perc_missed as perc_hit
FROM (
  SELECT IFNULL(putts_missed / total_putts,1) as perc_missed
         ,player
         ,hole 
  FROM golf_stats gs
  WHERE gs.playdate BETWEEN '2011-01-01' AND '2011-02-01'
  GROUP BY gs.player, gs.hole ) AS s;     
...