У меня есть система, которая позволяет пользователям вводить финансовые транзакции, включая суммы в долларах.Как только транзакция добавлена \ обновлена или удалена из системы, общая сумма счета должна быть пересчитана и немедленно отображена для пользователя.Пользователи имеют доступ к определенным учетным записям в системе, но не ко всем.
Ниже приведена ссылка на снимок экрана с таблицами, в которых хранятся данные учетных записей и транзакций.
http://i.imgur.com/EqV7w.png
В настоящее время для получения общей суммы счета я использую следующий запрос:
select sum(t.Amount)
from [Transaction] t
join [Account] a on a.AccountId=t.AccountId
where a.AccountId=@AccountId
У меня есть неуникальный некластеризованный индекс в таблице транзакций в столбцах AccountId и Amount, который позволяет запросу быстро находить транзакцииby AccountId.
Он делает то, что я хочу, но меня беспокоит то, что таблица транзакций растет довольно быстро, в настоящее время у меня там около 1 миллиона записей, и со временем я ожидаю, что она достигнет десятков миллионов.Также растет количество пользователей, которые могут активно редактировать транзакции, у меня их около 5500 в системе.
Я ищу решение для ограничения использования таблицы транзакций при получении общей суммы $ для учетной записи, чтобы система могла масштабироваться.У меня есть 2 решения для этого:
- Рассчитать общую сумму аккаунта по требованию, попросив пользователей нажать на определенную кнопку, когда им нужна эта информация.Я мог бы пойти по этому пути, но я все еще хочу изучить свои варианты с обновлением в реальном времени общего количества аккаунта.
- Сохраните промежуточную сумму в другом месте и используйте ее для вычисления общей суммы счета.С этим связано ограничение, так как все должно быть сделано через единый интерфейс, который бы знал обо всех этих нюансах.Редактировать транзакции в базе данных было бы непросто, поскольку вы также должны убедиться, что итоговая сумма обновлена.
Я ищу другие альтернативы для расчета общей суммы счета в реальном времени, не беспокоясь о производительности базы данных.