Хранение статистики пользователя для лидеров

Я пытаюсь сохранить пользовательскую статистику в базе данных, которая будет отображаться в таблице лидеров, которая может быть отсортирована по различным категориям (например, top XP, top kills и т. Д.), А также фильтрация по времени (ежедневная, еженедельная, ежемесячная и общая статистика).

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

Текущий размер моей таблицы опыта составляет ~ 1,4 миллиона строк, а таблицы убийств — ~ 4,1 миллиона строк. Иногда подсчет пользовательских убийств за месяц может занять около 1 секунды (с помощью MySQL count (), чтобы получить общую сумму за указанный период).

Текущий способ получения общей XP и упорядочения ее по значению:

SELECT DISTINCT `user_id`, SUM(`value`) AS `total`
FROM   `user_experience`
WHERE  `timestamp` > ?
GROUP  BY `user_id`
ORDER  BY `total` DESC
LIMIT  20 offset 0

Есть ли лучший способ получить общее количество очков опыта или более быстрый способ получить общее количество убийств, которые пользователь заработал за выбранное время и упорядочить по значению? Есть ли лучший способ сохранить журнал xp / kill и по-прежнему иметь возможность искать его по времени?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]