Нужно ли рассчитывать поле или обновлять информацию по каждой транзакции? - PullRequest
2 голосов
/ 19 мая 2019

Попытка создать базу данных. У меня есть таблица User, в которой должно быть поле balance. Он может быть рассчитан каждый раз, когда мне нужен баланс на основе 4 таблиц, как показано ниже:

enter image description here

Так что мне нужно выполнить некоторые математические операции, такие как сумма всех депозитов, минус сумма снятия средств, минус сумма ставки + прибыль, плюс сумма бонусов. В каждой связанной таблице могут быть тысячи записей для каждого пользователя.

Или же я могу просто обновить поле balance из кода приложения всякий раз, когда одна из связанных таблиц была изменена.

Однако первый метод, как правило, медленнее и медленнее по мере роста базы данных. Второй метод подвержен ошибкам, в случае, если мое приложение не сможет обновить поле и реальный баланс будет асинхронизирован с полем баланса.

Интересно, есть ли какой-либо шаблон проектирования или методика для обработки этих случаев? Как подсчитывают баланс в онлайн-банкингах или подобных сервисах? Проводят ли они каждую банковскую транзакцию каждый раз, когда запрашивается баланс?

1 Ответ

0 голосов
/ 19 мая 2019

Для первого метода, чтобы предотвратить загрузку всех транзакций для расчета баланса счета, мы можем периодически делать снимок значения баланса счета (например, в конце дня / месяца или для определенного количества завершенных транзакций)таким образом, чтобы при расчете последнего остатка на счете нам нужно было загружать только последний остаток на снимке счета и только транзакцию после этого последнего времени снимка, а не загружать все записи транзакций.

Подобный шаблон снимка также можно найти в

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...