powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Диалог с пользователем в транзакции
25 сообщений из 65, страница 1 из 3
Диалог с пользователем в транзакции
    #39899063
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь нажимает кнопку "Провести документ", стартует транзакция, и в базе происходит много чего, и в конце в этой же транзакции большой процедурой пересчитываются сводные показатели-агрегаты.

По сравнению этих показателей становится понятно, что все не слишком хорошо, и по условию задачи пользователя об этом нужно переспросить, действительно ли он согласен на превышение таких-то показателей над такими-то на столько-то, или же он хочет откатить проведение.

Показывать диалог и останавливаться прямо в транзакции, как известно, нехорошо, поскольку пользователь может уйти обедать, а транзакция большая и кое чего блокирует.

Как тогда быть? Откатить транзакцию, выдать диалог, и в случае согласия опять ее запускать с флагом "Теперь не спрашивать", означающим согласие при проблемах?

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

Получается, при переспросе надо запоминать все проблемные показатели, вызвавшие переспрос, и получив согласие пользователя, в повторной транзакции проверять, соответствуют ли текущие проблемные показатели тем, на что было получено согласие, и если да - продолжать, а нет - снова откатывать и снова переспрашивать?

Неужели все так и делают? Как-то сложно получается, чувствую, переработался.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899083
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherПоказывать диалог и останавливаться прямо в транзакции, как известно, нехорошо, поскольку
пользователь может уйти обедать, а транзакция большая и кое чего блокирует.

Тем, кто продвинут чуть более, известно, что диалог можно показывать с тикающим тайм-аутом
и он не относится к дизайну БД.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899091
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisher,

Перевести документ в статус требует подтверждения и сделать доступным пользователю опцию провести документ в в любом случае, когда пользователь будет повторно проводить документ и будет ли устанавливать эту опцию зависит только от пользователя.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899292
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisher
Неужели все так и делают? Как-то сложно получается, чувствую, переработался.

Вообще говоря, это вопрос не проектирования, а бизнес-процесса. Но я бы ответил - стоит проще: закоммитить транзакцию с признаком "превышение не подтверждено", а в интерфейсе дать пользователю список неподтверждённых превышений и кнопку "сторнировать".
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899298
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisher,

Винда перед копированием проверяет наличие необходимого свободного места на диске и выдаст ошибку если его не достаточно. Это не значит, что оно перещитывает все файлы каждый раз. Необходимый агрегат уже хранится в системе.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899300
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunter
Винда перед копированием проверяет наличие необходимого свободного места на диске и выдаст ошибку если его не достаточно. Это не значит, что оно перещитывает все файлы кажный раз. Необходий агрегат уже хранится в системе.

Пример, имхо, неудачный. Не знаю, как делает винда, а по-хорошему, нужно резервировать место на диске и лишь при успехе этой операции - выдавать добро на, собственно, копирование. Впрочем, и это верно только если диск не упаковываемый на лету.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899305
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У некоторых наших клиентов документы снабжаются признаком "Утвержден". По тем, что не "Утвержден" - считаются предварительные итоги, а по тем, где "Утвержден" установлен - окончательные.
Документ из одного состояния в другое не переводится, а создается клон, связанный с исходным (неутвержденным) вариантом. Ну там чуть посложнее процесс, но база такая.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899306
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic HunterВинда перед копированием проверяет наличие необходимого свободного места на диске

Давно она начала так делать? Сколько помню, она всегда писала, писала, а ошибку выдавала
только когда уже не могла записать очередной блок.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899313
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Relic HunterВинда перед копированием проверяет наличие необходимого свободного места на диске

Давно она начала так делать? Сколько помню, она всегда писала, писала, а ошибку выдавала
только когда уже не могла записать очередной блок.
Дисятка так делает, по-крайней мере. Постоянно на это нарываюсь. Смешно когда пытаешься восстановить проводником папку из бекапа (места на диске не осталось или очень мало), т.е. сделать skip иле overwrite пишет, что мало места и обламывается. Из командной строки копирование проходит )))
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899314
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
по-хорошему, нужно резервировать место на диске и лишь при успехе этой операции - выдавать добро на, собственно, копирование.
Спасибо, конечно, но

YouTube Video
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899362
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас что-то там в целом не так, если процесс на полдня требует заключать его в транзакцию БД.

авторТем, кто продвинут чуть более, известно, что диалог можно показывать с тикающим тайм-аутом
Диалог с должником, который не может долг вернуть?
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899498
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это прэлестно, просто прелестно.
Т.е. имеется незакрытая транзакция и
в базе происходит много чего, и в конце в этой же транзакции большой процедурой пересчитываются сводные показатели-агрегаты
Т.к. транзакция не закрыта, в этом момент все остальные пользователи как бы на паузе танцуют индийские танцы, никуда не спешат и песней с танцем подбадривают юзера.

Я думал, такие кейсы в докладах только в шутку приводят.
Хотя, наверное самое то для цифровизации гос систем.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899500
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trogloditтранзакция не закрыта, в этом момент все остальные пользователи как бы на паузе танцуют
индийские танцы

Я был уверен, что блокировочники уже умерли естественной смертью. На какой свалке истории
Вы такое поведение откопали?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899511
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Я был уверен, что блокировочники уже умерли естественной смертью. На какой свалке истории
Вы такое поведение откопали?

А при чем тут блокировочник/неблокировочник? Типа, если у тебя версионник, то писать двухнедельные транзакции сразу становится нормой? Тут выше правильно писали, что в приведенном случае проблема вообще не техническая, а в самом БП.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899532
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Я был уверен, что блокировочники уже умерли естественной смертью. На какой свалке истории
Вы такое поведение откопали?

А как по вашему будет поведение
в базе происходит много чего, и в конце в этой же транзакции большой процедурой пересчитываются сводные показатели-агрегаты
Очевидно по первому сообщению, что остальные пользователи не только читают, но и пишут в БД в одной транзакции, т.е. совершают похожие или такие же действия, рассчитывая те самые агрегаты, т.е. большое кол-во записей. Поэтому блокировки будут, как я и писал выше или в ваши версионники гадальные шары завезли?
Про побочное ущерб в виде увеличения необходимого дискового пространства, падение производительности по io я уже и не говорю.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899554
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrogloditПоэтому блокировки будут, как я и писал выше или в ваши версионники гадальные шары завезли?

В наши версионники завезли рецепт агрегатов без блокировок. Но он, конечно, не всеми может
быть осилен, да.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899571
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
В наши версионники завезли рецепт агрегатов без блокировок. Но он, конечно, не всеми может
быть осилен, да.

Что ты имеешь ввиду под агрегатами без блокировок?
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899573
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDevЧто ты имеешь ввиду под агрегатами без блокировок?

Хранимые агрегаты, поддержание которых в многопользовательской среде не приводит к
блокировкам и конфликтам обновлений.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899574
Gerros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisher
Пользователь нажимает кнопку "Провести документ", стартует транзакция, и в базе происходит много чего, и в конце в этой же транзакции большой процедурой пересчитываются сводные показатели-агрегаты.

По сравнению этих показателей становится понятно, что все не слишком хорошо, и по условию задачи пользователя об этом нужно переспросить, действительно ли он согласен на превышение таких-то показателей над такими-то на столько-то, или же он хочет откатить проведение.
Как-то неправильно у вас в системе трактуется проведение документа. Есть документ, подтверждающий хозяйственную операцию. Например, кто-то купил у вас тонну яблок. При проведении создаются соответствующие проводки, отражающие финансовый результат УЖЕ ЗАВЕРШЁННОЙ ХОЗЯЙСТВЕННОЙ ОПЕРАЦИИ.
Какая разница бухгалтеру, какие там получаются "превышения", если яблоки уже проданы и на расходной накладной есть подпись\печать покупателя?
Cane Cat Fisher
Но пока мы ждали, ситуация в БД могла сильно поменяться, и новое превышение может оказаться другим - скажем, гораздо больше, и если мы молча проведем документ, пользователь позже законно возмутится, что он именно на такое крупное безобразие согласия не давал.
Что это у вас за бизнес такой, что финансовый результат операции зависит от момента проведения документа?
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899575
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisher
Но пока мы ждали, ситуация в БД могла сильно поменяться, и новое превышение может оказаться другим - скажем, гораздо больше, и если мы молча проведем документ, пользователь позже законно возмутится, что он именно на такое крупное безобразие согласия не давал.

На момент когда вы проводите документ, другие транзакции изменяющие показатели могли быть незафиксированы, при расчете все показатели в норме, документ провели, транзакцию зафиксировали, после этого другие пользователи подтвердили свои изменения, в результате при повторном просчете по документу, окажется что проводить его было нельзя, вы такую ситуацию рассматривали?
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899576
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Хранимые агрегаты, поддержание которых в многопользовательской среде не приводит к
блокировкам и конфликтам обновлений.

Первый раз слышу о таких агрегатах, пример пожалуйста приведите агрегата который будет удовлетворять read commited без блокировок и сериализации.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899577
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gerros
Как-то неправильно у вас в системе трактуется проведение документа. Есть документ, подтверждающий хозяйственную операцию.

Вы слишком узко понимаете "документ". Представьте себе, например, что документ - это коммерческое предложение или вообще договор-оферта.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899578
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899580
Gerros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Вы слишком узко понимаете "документ". Представьте себе, например, что документ - это коммерческое предложение или вообще договор-оферта.
А какие проводки должны формироваться для коммерческого предложения?
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899584
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Эти агрегаты невозможны в read committed

Т.е. неконсистентный агрегат и что в итоге вы хотели сказать?
...
Рейтинг: 0 / 0
25 сообщений из 65, страница 1 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Диалог с пользователем в транзакции
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]