Большое количество записей: как быстро подсчитать сумму?

Я пишу довольно большое приложение, которое позволяет людям отправлять текстовые сообщения и электронные письма. Я буду взимать 7c за SMS и 2c за отправленное письмо. Я позволю людям "пополнять" свой счет. Таким образом, конечным результатом, вероятно, будет таблица базы данных с несколькими небольшими записями, такими как +100, и многими, многими записями, такими как -0.02 и -0.07.

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

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

  • Всего добавлено
  • Всего вывезено
  • Баланс к этому моменту

Есть ли лучшие, устоявшиеся способы решения этой проблемы?

1 ответ

Решение

Во многом зависит от РСУБД.

Если бы это был SQL Server, одним из решений было бы создание индексированного представления (или представлений) для автоматического постепенного вычисления и хранения агрегированных значений.

Другое решение заключается в использовании триггеров для агрегирования всякий раз, когда строка вставляется с максимальной детализацией деталей.

Другие вопросы по тегам