Я создаю игру, которая должна ежедневно сохранять статистику игроков (игры, exp & золота, текущее золото), а также статистику за все время.Хранение ежедневных статистических данных в реляционной базе данных
Мой текущий подход У меня есть 3 таблицы:
table `stats_current` -> for storing player's stats on CURRENT DAY
player_id | games_played | gold_earned | current_gold
table `stats_all_time` -> player's stats accumulated from the very beginning
player_id | games_played | gold_earned | current_gold
table `stats_history` -> player's stats daily, one record for one day
player_id | date | games_played | gold_earned | current_gold
Каждый игрок имеет один рекорд по stats_current
, одна запись на stats_all_time
и ограниченные записи на stats_history
таблице (например, только за последние 30 дней записываются) ,
Тогда есть работа демона/хрон, что делать эти операции на ежедневной основе:
- Для каждого игрока:
- Искать его запись на
stats_current
, получить значение. - Вставить новую запись в
stats_history
, значение отstats_current
- Обновления записи на
stats_all_time
, увеличивают его значение со значениями изstats_current
- На
stats_current
обнулите значенияgames_played
,gold_earned
0. Но оставитьcurrent_gold
как это является.
решения для общих задач:
- Получить проигрыватель текущее золото Х: получить
current_gold
отstats_current
- Получить статистику игрока X в последние 7 дней: выбрать 6 записей из
stats_history
, плюс сегодняшняя запись вstats_current
- Получите полные игры игрока игрока X: извлечения значений из
stats_history
Вопросы:
- Является ли это жизнеспособный подход?
- Каковы недостатки?
- Есть ли способ оптимизировать решение?