|
![]() |
#1 |
Участник
|
Не согласен с критикой нового механизма. По-моему в MS в новой версии все прекрасно сделали.
Как я понял идея такая. Во время разноски операции ГК в таблицы LedgerBalance(Dim)Trans идет только вставка (притом очень быстрая) данных заранее уже подготовленных в LedgerBalancesTransDelta. Никаких update и подобных блокировок, плюс ускоряется разноска ваучера. Действительно на один день может получиться очень много записей в LedgerBalance(Dim)Trans (сопоставимо по кол-ву с legderTrans, даже если аналитики вообще не используются). Но, раз в день, неделю, месяц можно запускать переодический пересчет балансов, который "просуммирует" все данные в LedgerBalance(Dim)Trans на одну запись в день. В итоге получаем: - таблицу сальдо LedgerBalance(Dim)Trans с одной записей на один день (как в версии 2.5 до появления поля Variant) - при разноске журналов никаких блокировок и лишних Update-ов, только Insert Т.е. разработчики совместили в одно механизме скорость при создании записей в таблице сальдо и минимальный объем таблицы для последующего использования для отчетов. |
|
|
За это сообщение автора поблагодарили: glibs (3), Vadik (1), Ivanhoe (3). |
![]() |
#2 |
Участник
|
блин, ребяты, да вы что!!!?
Цитата:
там не только вставка. Цитата:
Весь цимус как раз в том, что промежуточные итоги актуальны в любой момент. (ну, только если программист не вызвал где-нибудь хакерские doUpdate, doInsert, doDelete вместо нормальных Update, Insert, Delete ) |
|
![]() |
#3 |
Участник
|
Цитата:
Цитата:
Не... Ни в коем случае.
Весь цимус как раз в том, что промежуточные итоги актуальны в любой момент. (ну, только если программист не вызвал где-нибудь хакерские doUpdate, doInsert, doDelete вместо нормальных Update, Insert, Delete ) P.S. я имею в виду опрацию из ГК-переодические операции-пересчет промежуточных сальдо (или как там она по-русски называется) |
|
![]() |
#4 |
Moderator
|
Цитата:
У меня попытка удалить из индекса recId с сохранением уникальности - жостко обломалась... Последний раз редактировалось fed; 28.09.2010 в 12:08. |
|
![]() |
#5 |
Участник
|
Последний раз редактировалось S.Kuskov; 28.09.2010 в 13:10. |
|
![]() |
#6 |
Moderator
|
Бесполезно цитировать мне самого себя.
![]() |
|
|
За это сообщение автора поблагодарили: Ivanhoe (2). |
![]() |
#7 |
Moderator
|
Я кстати сначала (когда разбирался) решил что они сделают группировку не по ваучерам, а по транзакциям. Типа записали все обновления в ходе транзации в ledgerBalanceTransDelta, а потом в конце вызвали обработчик и все в одну запись в балансах столкнули. Но они почему-то решили делать per-voucher. Вероятно, mifi прав, и в буржуинских условиях один журнал в 90% случаев содержит один ваучер, и экономия бы слишком мелкая получилась бы.
|
|
![]() |
#8 |
Участник
|
Цитата:
при помощи этого поля попытались уменьшить вероятность блокировок. раньше, чтобы найти промежуточную сумму, нужно было сделать find. теперь - нужно сделать sum() с разными Variant. Но фундаментальный механизм работы с промежуточными финансовыми итогами не изменился. 1. программист говорит - вставь запись (ключевые-поля, изменения-сумм) 2. поскольку у сумм установлено свойство relative 2.1. система ищет существующую запись с этими ключевыми полями 2.2. если находит, то выполняет update полей со свойством relative (со всеми полагающимися блокировками) 2.3. если не находит, то выполняет insert разница между старыми и новыми версиями только в случайном параметре Variant. Этот параметр уменьшает вероятность попадания на шаг 2.2. Но ни в коем случае не исключает этот шаг. Цитата:
Но эта операция - очень тяжелая. Она блокирует все и надолго. Она скорее призвана исправить ситуации, нежели является регламентной. Промежуточные итоги могут содержать неактуальные значения в двух случаях: 1. программист использовал doUpdate, doInsert, doDelete вместо нормальных Update, Insert, Delete на таблице LedgerTrans 2. программист изменял записи в LedgerTrans прямыми запросами в SQL. Если выполняется нормальная и штатная работа с LedgerTrans, то система всегда держит промежуточные итоги актуальными. Цитата:
![]() write - это тоже наследие конкорда. ты попробуй ![]() Цитата:
попробуй. создай свою табличку и изнасилуй ее ![]() Цитата:
при таком подходе получается, что у системы никогда балансы неактуальны. не думаю, что на такое пошли бы. не знаю. |
|
![]() |
#9 |
Участник
|
Цитата:
В таком случае и получиться ситуация которую бы хотел Glibs, на один день и комбинацию аналитик будет одна запись в ledgerBalances(Dim)Trans. В принципе меня именно его пост и подтолкнул присоединиться с этому обсуждению. P.S. Кстати разработчики много чего оптимизировали в пятерке, может быть эта операция теперь и не такая тяжелая Последний раз редактировалось petr; 28.09.2010 в 13:16. Причина: Добавление |
|
![]() |
#10 |
Участник
|
Цитата:
Сообщение от mazzy
![]() ...
Да. Я понял что имеется в виду. Но эта операция - очень тяжелая. Она блокирует все и надолго. Она скорее призвана исправить ситуации, нежели является регламентной. Промежуточные итоги могут содержать неактуальные значения в двух случаях: 1. программист использовал doUpdate, doInsert, doDelete вместо нормальных Update, Insert, Delete на таблице LedgerTrans 2. программист изменял записи в LedgerTrans прямыми запросами в SQL. Если выполняется нормальная и штатная работа с LedgerTrans, то система всегда держит промежуточные итоги актуальными. И, насколько я понял предположение petr, регламентный запуск процедуры нужен не для исправления ошибок, а для группировки записей. Собственно, проверено экспериментально: если было несколько записей на одну дату / счет в LedgerBalancesTrans, то после выполнения пересчета периода остается одна строка.
__________________
Ivanhoe as is.. Последний раз редактировалось Ivanhoe; 28.09.2010 в 13:31. Причина: в Проверке целостности эта процедура есть |
|
![]() |
#11 |
Member
|
Цитата:
Сообщение от petr
...
Но, раз в день, неделю, месяц можно запускать переодический пересчет балансов, который "просуммирует" все данные в LedgerBalance(Dim)Trans на одну запись в день. ...
__________________
С уважением, glibs® |
|
Теги |
ledgerbalance, ledgerbalancesdimtrans, ledgerbalancestrans, главная книга, итоги, сальдо, crm2011 |
|
|