|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Пользователь нажимает кнопку "Провести документ", стартует транзакция, и в базе происходит много чего, и в конце в этой же транзакции большой процедурой пересчитываются сводные показатели-агрегаты. По сравнению этих показателей становится понятно, что все не слишком хорошо, и по условию задачи пользователя об этом нужно переспросить, действительно ли он согласен на превышение таких-то показателей над такими-то на столько-то, или же он хочет откатить проведение. Показывать диалог и останавливаться прямо в транзакции, как известно, нехорошо, поскольку пользователь может уйти обедать, а транзакция большая и кое чего блокирует. Как тогда быть? Откатить транзакцию, выдать диалог, и в случае согласия опять ее запускать с флагом "Теперь не спрашивать", означающим согласие при проблемах? Но пока мы ждали, ситуация в БД могла сильно поменяться, и новое превышение может оказаться другим - скажем, гораздо больше, и если мы молча проведем документ, пользователь позже законно возмутится, что он именно на такое крупное безобразие согласия не давал. Получается, при переспросе надо запоминать все проблемные показатели, вызвавшие переспрос, и получив согласие пользователя, в повторной транзакции проверять, соответствуют ли текущие проблемные показатели тем, на что было получено согласие, и если да - продолжать, а нет - снова откатывать и снова переспрашивать? Неужели все так и делают? Как-то сложно получается, чувствую, переработался. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2019, 13:27 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Cane Cat FisherПоказывать диалог и останавливаться прямо в транзакции, как известно, нехорошо, поскольку пользователь может уйти обедать, а транзакция большая и кое чего блокирует. Тем, кто продвинут чуть более, известно, что диалог можно показывать с тикающим тайм-аутом и он не относится к дизайну БД. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2019, 14:04 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Cane Cat Fisher, Перевести документ в статус требует подтверждения и сделать доступным пользователю опцию провести документ в в любом случае, когда пользователь будет повторно проводить документ и будет ли устанавливать эту опцию зависит только от пользователя. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2019, 14:13 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Cane Cat Fisher Неужели все так и делают? Как-то сложно получается, чувствую, переработался. Вообще говоря, это вопрос не проектирования, а бизнес-процесса. Но я бы ответил - стоит проще: закоммитить транзакцию с признаком "превышение не подтверждено", а в интерфейсе дать пользователю список неподтверждённых превышений и кнопку "сторнировать". ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2019, 20:54 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Cane Cat Fisher, Винда перед копированием проверяет наличие необходимого свободного места на диске и выдаст ошибку если его не достаточно. Это не значит, что оно перещитывает все файлы каждый раз. Необходимый агрегат уже хранится в системе. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2019, 21:30 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Relic Hunter Винда перед копированием проверяет наличие необходимого свободного места на диске и выдаст ошибку если его не достаточно. Это не значит, что оно перещитывает все файлы кажный раз. Необходий агрегат уже хранится в системе. Пример, имхо, неудачный. Не знаю, как делает винда, а по-хорошему, нужно резервировать место на диске и лишь при успехе этой операции - выдавать добро на, собственно, копирование. Впрочем, и это верно только если диск не упаковываемый на лету. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2019, 21:34 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
У некоторых наших клиентов документы снабжаются признаком "Утвержден". По тем, что не "Утвержден" - считаются предварительные итоги, а по тем, где "Утвержден" установлен - окончательные. Документ из одного состояния в другое не переводится, а создается клон, связанный с исходным (неутвержденным) вариантом. Ну там чуть посложнее процесс, но база такая. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2019, 22:13 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Relic HunterВинда перед копированием проверяет наличие необходимого свободного места на диске Давно она начала так делать? Сколько помню, она всегда писала, писала, а ошибку выдавала только когда уже не могла записать очередной блок. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2019, 22:13 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Relic HunterВинда перед копированием проверяет наличие необходимого свободного места на диске Давно она начала так делать? Сколько помню, она всегда писала, писала, а ошибку выдавала только когда уже не могла записать очередной блок. Дисятка так делает, по-крайней мере. Постоянно на это нарываюсь. Смешно когда пытаешься восстановить проводником папку из бекапа (места на диске не осталось или очень мало), т.е. сделать skip иле overwrite пишет, что мало места и обламывается. Из командной строки копирование проходит ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2019, 23:25 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
softwarer по-хорошему, нужно резервировать место на диске и лишь при успехе этой операции - выдавать добро на, собственно, копирование. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2019, 23:29 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
У вас что-то там в целом не так, если процесс на полдня требует заключать его в транзакцию БД. авторТем, кто продвинут чуть более, известно, что диалог можно показывать с тикающим тайм-аутом Диалог с должником, который не может долг вернуть? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2019, 10:44 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Это прэлестно, просто прелестно. Т.е. имеется незакрытая транзакция и в базе происходит много чего, и в конце в этой же транзакции большой процедурой пересчитываются сводные показатели-агрегаты Т.к. транзакция не закрыта, в этом момент все остальные пользователи как бы на паузе танцуют индийские танцы, никуда не спешат и песней с танцем подбадривают юзера. Я думал, такие кейсы в докладах только в шутку приводят. Хотя, наверное самое то для цифровизации гос систем. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 02:19 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Trogloditтранзакция не закрыта, в этом момент все остальные пользователи как бы на паузе танцуют индийские танцы Я был уверен, что блокировочники уже умерли естественной смертью. На какой свалке истории Вы такое поведение откопали? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 02:26 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Я был уверен, что блокировочники уже умерли естественной смертью. На какой свалке истории Вы такое поведение откопали? А при чем тут блокировочник/неблокировочник? Типа, если у тебя версионник, то писать двухнедельные транзакции сразу становится нормой? Тут выше правильно писали, что в приведенном случае проблема вообще не техническая, а в самом БП. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 05:27 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Я был уверен, что блокировочники уже умерли естественной смертью. На какой свалке истории Вы такое поведение откопали? А как по вашему будет поведение в базе происходит много чего, и в конце в этой же транзакции большой процедурой пересчитываются сводные показатели-агрегаты Очевидно по первому сообщению, что остальные пользователи не только читают, но и пишут в БД в одной транзакции, т.е. совершают похожие или такие же действия, рассчитывая те самые агрегаты, т.е. большое кол-во записей. Поэтому блокировки будут, как я и писал выше или в ваши версионники гадальные шары завезли? Про побочное ущерб в виде увеличения необходимого дискового пространства, падение производительности по io я уже и не говорю. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 11:33 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
TrogloditПоэтому блокировки будут, как я и писал выше или в ваши версионники гадальные шары завезли? В наши версионники завезли рецепт агрегатов без блокировок. Но он, конечно, не всеми может быть осилен, да. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 13:34 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov В наши версионники завезли рецепт агрегатов без блокировок. Но он, конечно, не всеми может быть осилен, да. Что ты имеешь ввиду под агрегатами без блокировок? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 14:39 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
iOracleDevЧто ты имеешь ввиду под агрегатами без блокировок? Хранимые агрегаты, поддержание которых в многопользовательской среде не приводит к блокировкам и конфликтам обновлений. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 14:41 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Cane Cat Fisher Пользователь нажимает кнопку "Провести документ", стартует транзакция, и в базе происходит много чего, и в конце в этой же транзакции большой процедурой пересчитываются сводные показатели-агрегаты. По сравнению этих показателей становится понятно, что все не слишком хорошо, и по условию задачи пользователя об этом нужно переспросить, действительно ли он согласен на превышение таких-то показателей над такими-то на столько-то, или же он хочет откатить проведение. Какая разница бухгалтеру, какие там получаются "превышения", если яблоки уже проданы и на расходной накладной есть подпись\печать покупателя? Cane Cat Fisher Но пока мы ждали, ситуация в БД могла сильно поменяться, и новое превышение может оказаться другим - скажем, гораздо больше, и если мы молча проведем документ, пользователь позже законно возмутится, что он именно на такое крупное безобразие согласия не давал. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 14:48 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Cane Cat Fisher Но пока мы ждали, ситуация в БД могла сильно поменяться, и новое превышение может оказаться другим - скажем, гораздо больше, и если мы молча проведем документ, пользователь позже законно возмутится, что он именно на такое крупное безобразие согласия не давал. На момент когда вы проводите документ, другие транзакции изменяющие показатели могли быть незафиксированы, при расчете все показатели в норме, документ провели, транзакцию зафиксировали, после этого другие пользователи подтвердили свои изменения, в результате при повторном просчете по документу, окажется что проводить его было нельзя, вы такую ситуацию рассматривали? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 14:48 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Хранимые агрегаты, поддержание которых в многопользовательской среде не приводит к блокировкам и конфликтам обновлений. Первый раз слышу о таких агрегатах, пример пожалуйста приведите агрегата который будет удовлетворять read commited без блокировок и сериализации. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 14:51 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Gerros Как-то неправильно у вас в системе трактуется проведение документа. Есть документ, подтверждающий хозяйственную операцию. Вы слишком узко понимаете "документ". Представьте себе, например, что документ - это коммерческое предложение или вообще договор-оферта. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 14:55 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
iOracleDevПервый раз слышу о таких агрегатах, пример пожалуйста приведите агрегата который будет удовлетворять read commited без блокировок и сериализации. Эти агрегаты невозможны в read committed, они работают только в snapshot. https://www.sql.ru/forum/964534/hranimye-agregaty-bez-konfliktov-i-blokirovok-recept Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 15:08 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
softwarer Вы слишком узко понимаете "документ". Представьте себе, например, что документ - это коммерческое предложение или вообще договор-оферта. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 15:11 |
|
|
start [/forum/topic.php?fid=32&fpage=4&tid=1539889]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 151ms |
0 / 0 |