@nimfai
Full stack developer

Как реализовать хранение и вывод статистики пользователя?

Здравствуйте!
Есть приложение, например, трекер финансов, где каждый пользователь может вести учёт своих доходов и расходов. В данном приложении есть раздел аналитики, где можно посмотреть подробнейшую статистику (как за выбранный период, так и за всё время). Вопрос вот в чём, как хранить эту статистику? Ну то есть не правильно же будет при каждом открытии данной страницы на сервере\клиенте всё считать? При 500-1000 транзакциях проблем не должно быть, но что если у пользователя 10 000, 100 000, 1 000 000 транзакций? Как такие задачи решаются?
У меня было две идеи:
1) При добавлении транзакции делать перерасчёт показателей и сохранять в БД. Но проблема остаётся той же, долго.
2) При добавлении добавлять в крон задачу и в фоне пересчитывать и обновлять. Но, очень часто, после добавления транзакции пользователь будет идти в аналитику и смотреть что изменилось, а не измениться ничего, так как сервак не успеет посчитать всё.

P.S. финансовое приложение я взял как просто пример. Интересует просто как подобные задачи решаются в подобных приложениях.
  • Вопрос задан
  • 358 просмотров
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Ну то есть не правильно же будет при каждом открытии данной страницы на сервере\клиенте всё считать?
Почему, очень даже правильно, для этого и придуманы быстрые хранилища и SQL/noSLQ бд.

но что если у пользователя 10 000, 100 000, 1 000 000 транзакций? Как такие задачи решаются?
Во первых, юзер все равно не получает все мульен транзакций в статистике за раз, получает постранично, а это вполне нормальные запросы по 50-100 записей за раз, что вполне себе быстро. Ну и всякие редко обновляющиеся и часто запрашиваемые данные хранят в кэше, дабы не дергать бд попусту.

идти в аналитику и смотреть что изменилось, а не измениться ничего, так как сервак не успеет посчитать всё.
Это просто не знаю какой мертвый сервак должен быть, чтобы не успеть "посчитать" за время необходимое для прохода 1-2 экранов приложения.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@maksim_fix
Junior PHP developer
Создайте таблицу, где будут храниться статистика(пополнение и тд), затем при получении текущего баланса высчитывайте его из этой самой таблицы. Вам всеравно придется получать всю историю(а иначе как пользователь ее получит)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы