Re[3]: Баланс клиента: хранить или вычислять
От: WMikhailov  
Дата: 01.02.12 14:35
Оценка:
Здравствуйте, fplab, Вы писали:

F>Здравствуйте, WMikhailov, Вы писали:


WM>>Ну, и посмотрите на существующий удачный опыт (у сотовых операторов, у банков, у интернет-провайдеров) — баланс должен быть всегда доступен для клиента в его личном кабинете (а не скрыт) — ведь это _его_ деньги (и доверие конторе, и удобство, и т.д.)


F>Не скажу, как у сотовых операторов, а в известных мне банковских системах (за единственным известным исключением RS-Bank 5/5.5) баланс не хранится, а рассчитывается.


Мой опыт работы говорит как раз об обратном.

F>Понятие "доступности", вообще говоря, определено не строго. Клиенту, по большому счету до 3.1415926-ы, как именно он получает баланс: как сформированный по операциям, или как хранящийся в виде какого-то определенного, заранее рассчитанного, числа. Скорость получения этого числа определяется качеством ДНК программистов и администраторов БД. Кроме того, в последнем случае вам все равно никуда не деться от запросов к БД


Конечно, даже по-малому клиенту всё равно, как получен актуальный (на данный момент) баланс — об этом я речи не велось. А речь о скорости получения информации клиентом.

От запросов к БД никуда не деться — тут Вы правы. Однако одно дело простой запрос одной строки с поиском из сотен тысяч записей по уникальному индексу, и совсем другое — агрегация набора записей с поиском из десятка миллионов записей по индексному интервалу. Напрасная нагрузка на БД.

F>Допустим, клиент пользовался своим пластиком 10 и 20 числа текущего месяца. Но он не обязан помнить точных дат совершения операций и поэтому вполне может запросить баланс по состоянию на 15 число. Но ведь данных на 15 число в БД нет. Понятно, что надо вернуть данные ближайшей меньшей даты, т.е. за 10-е. Для этого нужен дополнительный, не сложный, но все же SQL-запрос.


Речь велась об актуальном балансе (см. выше). Всё же выписка на дату редко интересует клиента (но в этом случае — да, без запроса не обойтись).

F>Не стоит плодить сущности сверх необходимого. Что можно не хранить — не храните. Все равно ведь есть таблица операций — вот по ней и вычисляйте баланс. При правильном подходе и грамотной реализации это занимает пустячное время.


Перефразирую: стОит иногда вводить сущности при необходимости. Здесь именно такой случай. Пожалейте БД — каждый клиент запрашивает баланс: на сотовом телефоне несколько раз в день, на банковской карточке — каждый раз при входе в личный кабинет. Заставлять SQL-машину поработать немного больше, чем она могла бы при такой простой процедуре — излишне.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.