Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как лучше проектировать расчет для биллинговой системы  [new]
Пашок
Member

Откуда:
Сообщений: 287
Здравствуйте, нужен совет.


Есть большие таблицы (миллионы строк) с пользователиями их состояниями, покупками и т.д.

Нужно на процедурах MS SQL сделать алгоритм некоего расчета новых состояний, остатков и т.д. партнерских вознаграждений. Сам расчет по оценкам может выполнятся от нескольких минут до нескольких часов, он производит миллионы операций модификации данных.


Обсуждаем разные варианты разработки.


1) Открыть транзакцию и просто делать все нужные действия, в конце сделать commit или rollback. Плюсы: простота, 100% целостность данных. Минусы: блокировки, при очень длинной транзакции происходит неленейное замедление времени обработки.

2) Создать темповые таблицы и в них все делать НО БЕЗ ТРАНЗАКЦИИ, а потом перелить в реальные (под транзакцией конечно). Плюсы: нет длинной транзакции, нет блокировок, т.к. действий с данными много, а транзакции нет, то сервер не будет писать гиганский лог ранзакции, значит будет быстрее считать Минусы: нет защиты маханизмом транзакций


В общем вопрос такой, насколько правильно использовать механизм транзакций для очень больших операций модификаций данных.
26 ноя 12, 19:28    [13532144]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше проектировать расчет для биллинговой системы  [new]
aleks2
Guest
Правильна НЕ ДЕЛАТЬ "очень больших операций модификаций данных".
26 ноя 12, 19:31    [13532159]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше проектировать расчет для биллинговой системы  [new]
Crimean
Member

Откуда:
Сообщений: 13148
вопрос не в этом. вопрос, скорее, в необходимости конкуренции за остаток, раз разговор за биллинг пошел
а дальше "все просто" - пойдете по пути "единичной" обработки транзакции - упретесь в необходимость многопоточной обработки. сделаете массированное изменение остатка - фактически откажетесь от реалтайм остатков
безусловно, существуют и миксы обоих подходов, но тут сильно от задачи будет зависеть
главное в вашей задаче не то, что вы написали. а подход + оценка допустимого времени обработки
ибо параметр (число затраченного времени, ms на 1 транзакцию) вам будут ой как важен. а линейно написанный код (читай "циклы") сиквел сам паралелить не будет
26 ноя 12, 19:49    [13532237]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить