Я бы еще предложил ввести таблицу с текущим потребленим и систему отслеживания сеанса потребления. Начало потребления, продолжение потребления ( сравнение потребления с остатком на счету ), конец потребления ( списываем деньги со счета)1) Radius может использоваться для регулярных запросов на подтверждение полномочий потребления услуги. Тоесть идет постоянный контроль за наличием денег на счету.
2) Постоянное снятие денег со счета(например раз в минуту) приведет к слишком большому количеству записей, в принципе потом базу можно подчистить, но надо иметь ввиду.
3) таблица будет явно меньше таблицы всех пользователей, много из которых могут быть мертвыми.
4) Мониторинг потребителей.
Всегда можно пределать упрощенный сеанс потребления, стар и стоп.
Но закрывание услуги по радиусу сразу после опустошения счета крайне необходимо.
Плюсом даже не Radius, а например подсчет IP для выделенки тоже лучше делать в реальном времени, а в итоги за день заносить одной записью.
Возникает ряд проблем: потребление нескольких сервисов одновременно, перевод денег на счет в момент потребления. Но это не смертельно: суммируешь все потребление по таблице текущего потребления и сравниваешь со счетом, в случае конца потребления можешь все заново пересчитать, можешь перенести запись из текущего потребление. Варианты.
Использование храниых процедур - необходимость. Использование БД как тупого хранилища создаст больше проблем.