Большое количество записей: как быстро подсчитать сумму?
Я пишу довольно большое приложение, которое позволяет людям отправлять текстовые сообщения и электронные письма. Я буду взимать 7c за SMS и 2c за отправленное письмо. Я позволю людям "пополнять" свой счет. Таким образом, конечным результатом, вероятно, будет таблица базы данных с несколькими небольшими записями, такими как +100, и многими, многими записями, такими как -0.02 и -0.07.
Мне нужно немедленно проверить баланс человека, когда он пытается отправить электронное письмо или сообщение.
Очевидный ответ - кэшировать "общее" где-нибудь и обновлять его всякий раз, когда что-то добавляется или удаляется. Однако, как всегда в программировании, есть еще кое-что: как насчет ежемесячных отчетов, где баланс должен быть перенесен с предыдущего месяца? Мое "интуитивное" решение состоит в том, чтобы иметь два уровня кэширования: один для текущего месяца и одну запись для каждого месяца (или расчетного периода) с тремя записями:
- Всего добавлено
- Всего вывезено
- Баланс к этому моменту
Есть ли лучшие, устоявшиеся способы решения этой проблемы?
1 ответ
Во многом зависит от РСУБД.
Если бы это был SQL Server, одним из решений было бы создание индексированного представления (или представлений) для автоматического постепенного вычисления и хранения агрегированных значений.
Другое решение заключается в использовании триггеров для агрегирования всякий раз, когда строка вставляется с максимальной детализацией деталей.