Как лучше реализовывать баланс?

Делаю сайт для игры. Игроки донатят. Как лучше хранить баланс? Создать таблицу для хранения платежей (пополнения списания) и считать баланс путем сложения операций? Или просто создать колонку balance и все?
  • Вопрос задан
  • 796 просмотров
Решения вопроса 3
xpert13
@xpert13
Full Stack Developer
Создать таблицу для хранения платежей (пополнения списания) и считать баланс путем сложения операций? Или просто создать колонку balance и все?

И то и другое. Колонка balance для быстрого получение этой информации, чтобы, к примеру, выводить на странице профиля. Но при любой операции с балансом эту колонку пересчитываем путем сложения. Так же не стоит её использовать при определении того хватает ли пользователю на какую-то операцию или нет.
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Все операции должны быть логированы, соответственно таблица, выборка, подсчет.
Ответ написан
Комментировать
@aynur_safin
Или просто создать колонку balance и все?

Так делать не рекомендую, может возникнуть ситуация, когда обновление записи может быть производится из двух потоков, например пользователь пополняет баланс, а в это время сервис списывает с него, и одна из операций не выполнится, т.к. запись будет заблокирована. Поэтому, лучше определять баланс сложением операций, но не за весь период, а например хранить остатки на начало месяца и прибавлять к нему обороты с начала месяца. А оперативный баланс, чисто для отображения в интерфейсе, можно держать в кэше и обновлять при добавлении операций.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы