|
|
|
Хранение проводок, остаток на счету нужен на текущий момент
|
|||
|---|---|---|---|
|
#18+
Всем доброго времени суток. Ситуация напоминает лицевой счет клиента в сотовой компании: платеж, потом поэтапное списание со счета за услуги. Но чаще платеж будет равен поступлению: т.е. клиент пополнил счет, тут же оплатит услугу. Нельзя уходить в минус, поэтому остаток на счете клиента необходимо получать в момент попытки платежа. Ежедневных транзакций будет максимум 3000-5000. СУБД - MSDE. Задним числом платежи и списания проводиться не будут, скорость получения остатков на дату - не критична. Критична скорость получения остатка на текущий момент, т.к. если денег на счету не хватает - списание со счета не производится. Есть смысл при таких условиях разности по таблицам оборотку и остатки? За период вполне подойдет месяц. Заранее большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2007, 15:26 |
|
||
|
Хранение проводок, остаток на счету нужен на текущий момент
|
|||
|---|---|---|---|
|
#18+
1. Можно обновлять запись-баланс в рамках каждой транзакции по лицевому счёту, но это может привести к высокой конкуренци за доступ к этой записи, но в тоже время сериализует доступ. 2. Можно вычислять баланс агрегируя отдельные записи начисления и оплаты, но это со временем может привести к заедлению расчёта баланса, когда данных накопиться очень много. 3. Промежуточный вариант - периодически свёртывать записи детализации, баланс получать как сумму текущей свёртки и записей детализации, которые были созданы после свёртки, точнее не были свёрнуты на момент расчёта остатка. Последний вариант расчёта остатка включает в себя 1 и 2, отличается техническая реализация расчёта сёртки. В 1 случае её нужно включить в метод транзакции, в 3 это отдельный метод, выполняющийся в отдельном процессе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2007, 02:55 |
|
||
|
Хранение проводок, остаток на счету нужен на текущий момент
|
|||
|---|---|---|---|
|
#18+
mcureenab1. Можно обновлять запись-баланс в рамках каждой транзакции по лицевому счёту, но это может привести к высокой конкуренци за доступ к этой записи, но в тоже время сериализует доступ. Дабы гарантировать неуход в минус потребукется защиттиться от одновременного проведения двух операций, то есть без блокировки не обойтись. В таком разе имеет смысл хранить текущие остатки по счетам - их обновлять легко и блокировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2007, 09:51 |
|
||
|
Хранение проводок, остаток на счету нужен на текущий момент
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyДабы гарантировать неуход в минус потребукется защиттиться от одновременного проведения двух операций, то есть без блокировки не обойтись. В таком разе имеет смысл хранить текущие остатки по счетам - их обновлять легко и блокировать. Для неухода в минус нужно защититься от одновременного проведения двух и более расходных операций. Приходные операции могут проводиться одновременно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2007, 14:21 |
|
||
|
Хранение проводок, остаток на счету нужен на текущий момент
|
|||
|---|---|---|---|
|
#18+
Большое спасибо за советы! Остановлюсь на 3-м варианте: ежемесячно буду делать свертку, а оперативные остатки получать как свертку + изменения на текущую дату из оборотов. Есть вопрос по созданию сальдо: надо заблокировать операции списания, но если и приход и расход будут находиться в одной таблице, то есть вариант только блокировать на уровне выполнения ХП (приход и расход поместить в разные ХП). Т.е. чтобы в любой момент времени могла выполняться не более одной копии процедуры списания денег со счета клиента. Ну и проверять еще не придумал как на таймаут выполнения процедуры. А есть еще какие-нибудь более удобные варианты? Еще раз спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2007, 18:36 |
|
||
|
Хранение проводок, остаток на счету нужен на текущий момент
|
|||
|---|---|---|---|
|
#18+
Новичок_яЕсть вопрос по созданию сальдо: надо заблокировать операции списания, но если и приход и расход будут находиться в одной таблице, то есть вариант только блокировать на уровне выполнения ХП (приход и расход поместить в разные ХП). Т.е. чтобы в любой момент времени могла выполняться не более одной копии процедуры списания денег со счета клиента. Т.е. Вы хотите взять работу сервера на себя? :) Вернее, повторить тот механизм, что ребята из MS с таким старанием отлаживали долгие годы? :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2007, 09:06 |
|
||
|
|

start [/forum/topic.php?fid=32&tid=1544414]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
164ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
38ms |
get tp. blocked users: |
2ms |
| others: | 238ms |
| total: | 474ms |

| 0 / 0 |
