|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Алексей Морозов написано много, но ничего не понял к сожалению. Способ чтения становится для меня все более непонятным. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 13:13 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Что именно вы не поняли? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 13:16 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Для использования длинных транзакция у вас в системе должен быть предусмотрен механизм сессий, таблицы блокировки (или если бы была 3-х звенка объект на сервере) и система для lock/unlock объектов. Так же в каждом sql выражении должна быть возможность учёта/не учёта этих заблокированных объектов. Под объектами я понимаю именно логические сущности, т.е. открытие на рекдактирование к примеру карточки А, должна приводить к блоку всех её составляющих. Но повторюсь этот механиз не имеет никакого отношения к транзакциям самой СУБД. Автору системы советую почитать М.Фаулер, "Архитектура корпоративных программных приложений". ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 13:20 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Моё мнение - вы не правы. Использование длинных транзакций, не ограничивает работу операторов программы (позволяет изменять многие документы отдельно), если производить редактирование каждого документа в отдельном соединении (контексте). Использование соединений (контекстов) для каждого документа - необходимо для многопоточности. Существуют долгие запросы (несколько минут), оператор в это время может выполнять другую работу. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 13:22 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
о чем здесь вообще. О многопоточности или так называемой "длинной транзакции". Билеты на тот же самолет что-ли не покупали. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 13:30 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
> пользователь при редактирование накладной создал товар, а другой > пользователь этот товар удалил что произойдет при сохранение накладной? Перефразирую вопрос: Пользователь добавил в накладную строку, в которой ссылка на товар? И до сохранения документа его удалили? Пользователь выбрал в документе клиента? И до сохранения документа его удалили? 1. По умолчанию - только при сохранении документа, пользователь получит сообщение, что товар удален. (самый быстрый режим) 2. Если сохранение документа происходит при каждом изменении - товар удалить будет невозможно (используется при списании товаров множеством операторов. Недоступен откат средствами среды, медленно, надежно) 3. Если пользователь использует флаги (именованные мьютексы на уровне БД - CreateLock/CheckLock), то товар средствами программы будет удалить невозможно. (быстрее, контроль на плечах программиста) > Есть сложный объект как в нем реализовать отмену сделанных операций или их > части? Созданием отдельной формы. Без программирования, среда сама обеспечивает копирование данных между формами (формой-гридом), откат, блокировку основной формы. > Какую структуру хранения нужно создать для хранения объекта и как > реализовать > что бы на сервер отсылались только изменения? Для формы необходимо указать Таблицу БД. Среда сама создаст объекты соответствующие полям БД, и при запуске формы загрузит в них данные. Так-же можно выбрать несколько таблиц со связями "один ко многим", они будут загружены в виде массивов. Если на форме будут присутствовать поля ввода и гриды с идентичными полями, но один будут заполнены загруженными данными. > Я редактируют накладную строки которой созданы на основе счета в это > время другой пользователь удаляет из счета строку, что будет с моей > накладной? Среда не автоматизирует это. 1. Если программист изменяет данные созданием объектов (как в 1С), то во время создания объекта счета он получит сообщение - "Невозможно открыть счет для редактирования, так как он редактирвоается xxx" 2. Если программист изменит данные SQL-запросами, то в открытом документе данные изменены не будут. Проверить открыты ли документы, и заблокировать из запуск может с помощью флагов (CreateLock) > А так честно говоря среда Алексея напоминает Power Builder + framework. > Причем Power Builder в чем-то (по любому в части DataWindow) и по круче > будет Хорошо, напишем сравнение ПУ и PowerBuilder. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 13:43 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
xо чем здесь вообще. О многопоточности или так называемой "длинной транзакции". Билеты на тот же самолет что ли не покупали. Я о длинной транзакции. Вы не увеете думать на 2 хода вперед. Вы утверждаете, что то о супермаркете и самолете. Я же утвержаю, что длинная транзакция не ограничивает возможности многопользовательской работы и одновременного редактирования документов в одной программе. *** Но для программ использующих одно соединение это не верно (хотя бы письмо 613985). Поэтому я оговорился что - "при использовании нескольких соединений" . И добавил, что "несколько соединений" - это не абсурдная идея, а необходимость в современном мире (при использовании многопоточных приложений ). Где тут не прав? Или что вы не поняли? Я думал о деле говорить, а получается какая юмористическая передача. Вы постоянно уходите от темы обсуждения. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 13:56 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Еще я напишу NTTP Server для SQL.RU ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 13:57 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Bogdanov Andrey нажимая кнопку "Сохранить" пользователь практически не представляет того, что именно он будет "сохранять". ====== неправда. Standart Windows. У него перед глазами "Карточка Иванова" или "Договор 123" В качестве альтернативы я бы предложил все изменения, выполняемые в дочерних формах отражать на основной ====== пробовали? Наверно нет. и, соответственно, хранить в данных формы вплоть до момента сохранения в бд ====== пробовали? Наверно нет. . Либо разбивать транзакцию на более мелкие части. ===== транзакция - атомарный неделимый объект Теперь о преблемах, которые с длинными транзакциями возникают. И не технических, а пользовательских. Вот берем описанный ВИ редактирования карточки. Зайдя в десятое подсвойство, пользователь вдруг понял, что для выполнения операции надо немножко какой-нибудь словарь обновить ====== там редактируется только одна СУЩНОСТЬ а не словари ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 14:15 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Bogdanov AndreyАлексей МорозовВы хотите сказать, что в некоторых случаях без длинных транзакций для выполнения работы придется заблокировать всю БД?Мне показалось, что iscrafm как раз против длинных транзакций. И своей фразой он хотел сказать, что с длинными транзакциями придется блокировать всю базу :) способа реализации ВИ никто не предложил. И БД не блокируется. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 14:17 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
iscrafmЗачем длинные транзакции? Отвечу так: это такой же бред, как и заставлять натурщицу не покидать свое место до полного завершения картины. Такой же бред, как и запускать в супермеркет по одному человеку. И т.д. и т.п. Обычно "длинными транзакциями" страдают те, кто не понимает разницы между данными сохраненными в БД и информацией. А это две разных сущности. С другой стороны, позволить сохранить пачку транзакций только в том случае если они балансируются – это уже не бред. Поэтому как интерфейсное решение – карточка мастер с деталями, в которой по кнопке ok все сохраняется, или нет, имеет право на жизнь. Но конечно, реализовывать такое средствами базы данных НЕЛЬЗЯ, это прописная истина уже минимум 10 лет. И я в шоке что такая реализация является темой дискуссии. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 14:19 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Тут уже было сказано, что "сложный объект" программист на клиенте не должен контроллировать. Это обязанность СУБД. Если мне версионник Оракл позволяет без блокировок ставить метку на объект "Начали редактировать" и через некоторое время либо её снять либо сохранить изменения, то я только рад этому. Все рассуждения на тему что это плохо и т.д. 1) требуют технических обоснований (на форумах СУБД их по 20 страниц постоянно) 2) нельзя путать старт транзакции и блокировки от неё и её ТИПА. Это разные вещи. и их можно избежать. 3) мне важна "подноготня" работы СУБД только в том случае, если она не справляется по каким либо причинам (например блокировочник MS SQL Server). 4) Во всех остальных случаях "длинная транзакция" логично вытекает из ВИ. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 14:27 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
действительно, можно сказать прописная истина уже много лет, если речь идет о редактировании сложных объектов. ChekIn-CheckOut образно. Реализаций CheckIn может быть множество. Я предпочитаю "изъятие" документа из хранилища (короткая транзакция), редактирование и повторное размещение (короткая транзакция). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 14:36 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Petro123Bogdanov Andrey нажимая кнопку "Сохранить" пользователь практически не представляет того, что именно он будет "сохранять". ====== неправда. Standart Windows. У него перед глазами "Карточка Иванова" или "Договор 123" А что именно в этом догворе он изменил - он сказать не может. Он видит только заголовок сохраняемой информации, и плохо представляет о том, что именно он представляет. Petro123 В качестве альтернативы я бы предложил все изменения, выполняемые в дочерних формах отражать на основной ====== пробовали? Наверно нет. и, соответственно, хранить в данных формы вплоть до момента сохранения в бд ====== пробовали? Наверно нет. Пробовал многократно. И успешно. Еще раз повторю, если вы сами не читаете - "Ни в одной из разработанных мною систем я не использовал длинных транзакций." Petro123 . Либо разбивать транзакцию на более мелкие части. ===== транзакция - атомарный неделимый объект Так я и говорю, что нужно вносить изменения в ваш ВИ. И немножко задуматься о том, какие именно объекты там "неделимы". Если есть обоснованное требование неделимости всех этих изменений (во что я не очень верю), то надо задуматься о реализации такого требования и одним из способов может быть хранение данных в форме. Petro123 Теперь о преблемах, которые с длинными транзакциями возникают. И не технических, а пользовательских. Вот берем описанный ВИ редактирования карточки. Зайдя в десятое подсвойство, пользователь вдруг понял, что для выполнения операции надо немножко какой-нибудь словарь обновить ====== там редактируется только одна СУЩНОСТЬ а не словари То есть мы обсуждаем сферического коня в вакууме, а не работу реального пользователя? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 14:38 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Petro123Тут уже было сказано, что "сложный объект" программист на клиенте не должен контроллировать. Это обязанность СУБД. Если объект "сложный" для клиентского приложения, то, наверное, он будет "сложный" и для пользователя ;-). Разбейте его на части и сохраняйте по частям, с соответствующим интерфейсом. Тогда и пользователю будет легче и базе данных, разве что программист не сможет похвастаться супер бупер сложным объектом :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 14:43 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
x4) Во всех остальных случаях "длинная транзакция" логично вытекает из ВИ. Я не услышал ни одного преимущества. Лишь фразы типа "Всем хорошо известно, ..." Просто рассмотрим выполняемые команды при редактирования документа. Длинные транзакции, для товарной накладной: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Другой способ для товарной накладной: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Значительно меньше обращений к серверу. В чем преимущества то? Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 14:49 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Алексей Морозов, просьба модератору убрать отсюда код, т.к. ВИ обсуждаем. Алексей! Я ж просил. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 14:51 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Bogdanov Andrey"Ни в одной из разработанных мною систем я не использовал длинных транзакций." - Изменить ВИ и воткнуть ВСЮ инфу на одну форму ИМХО очень спорно. - Хранить все формы дочки (не уничтожая до уничтожения главной формы?) Ну тут от ЯП зависит. Если Си и Java то это одно. В Delphi такие варианты: - использовать готовые библиотеки (ClientDataSet). Т.к. остальные могут сбросить данные в БД ещё на смене строки в Талице-Форме (Post) - да вроде и всё. Минусы : - многократно увеличивается код, т.к. нельзя сбросить изменения в БД и уничтожить формы-дочки - нельзя применять проверку правильности ввода данных в БД (т.к. триггеры не работают) - необходимо помнить очерёдность изменения в дочках-формах, т.к. это иногда важно при сбросе в БД - следовательно на клиенте мы пишем всё больше и больше логики. Плюсы : - сервер не суетится под клиентом т.к. ОН сервер. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 15:08 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
кстати, основной аргумент в форумах СУБД - нельзя делать блокировок и блокирующих транзакций, а не длинных... Чтобы не было случаев: Мария Ивановна "взяла" на редактирование документ (заблокировала) и ушла пить чай. Сабж не про этот случай. А про многообразие транзакций на каждой взятой СУБД и длинную транзакцию с точки зрения времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 15:12 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Petro123- многократно увеличивается код, т.к. нельзя сбросить изменения в БД и уничтожить формы-дочки. необходимо помнить очерёдность изменения в дочках-формах, т.к. это иногда важно при сбросе в БД следовательно на клиенте мы пишем всё больше и больше логики. Код не увеличивается, среда (почти) все выполняет прозрачно. Petro123 нельзя применять проверку правильности ввода данных в БД (т.к. триггеры не работают) В критических случаях я проверяю данные два раза. 1) При редактировании на клиенте. Например добавлении товаров в накладную, среда не даст добавить несуществующих товаров. Этот код не гарантирует отсутствие ошибок, он позволяет предупредить пользователя заранее. 2) При сохранении в БД. Триггер/хранимка проверит еще раз наличие товаров. При этом, этот код будет меньше в 10 раз. Так как все консультации пользователя выполнил пункт 1 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 15:23 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
А что случится при разрыве соединения с длинной транзакцией? У меня соединеине умышленно рвется через 10 минут простоя, и незаметно для пользоваля открывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 15:29 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Алексей МорозовА что случится при разрыве соединения с длинной транзакцией? У меня соединеине умышленно рвется через 10 минут простоя, и незаметно для пользоваля открывается. опять что то новенькое :) Простоя чего? Мы что? В стойлах? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 15:45 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Алексей Морозов, еще одно подтверждение твоей полной некомпетентности. Если уровень изоляции READ COMMITED, то блокировки держатся только на время выполнения запроса, таким образом, все читают и перезаписывают одно и тоже. Если выше, то один работает, а остальные отдыхают. Это тебе пытались объяснить целый месяц,но безрезультатно. 2 ляп. Если наложена блокировка, то она действует для всех соединений. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 15:48 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Petro123 Минусы : - многократно увеличивается код, т.к. нельзя сбросить изменения в БД и уничтожить формы-дочки - нельзя применять проверку правильности ввода данных в БД (т.к. триггеры не работают) - необходимо помнить очерёдность изменения в дочках-формах, т.к. это иногда важно при сбросе в БД - следовательно на клиенте мы пишем всё больше и больше логики. Мы об удобстве программиста или пользователя говорим? Вы предлагаете выбрать подход с длинными транзакциями потому-что это удобнее программисту (все ваши минусы относятся исключительно к этому). Я же говорю о том, что описываемы ВИ крайне неудобен для пользователя. Один из минусов (невозможность открыть какую-то другую форму приложения и поработать там, а потом вернуться к незаконченной работе) я уже упоминал. Вы решили это проигнорировать. Ну и основной минус - необходимость в уме отслеживать ве выполняемые действия. Вот зашел я в карточку - одно окошко открыл, другое, третье, потом чайку пошел выпить, вернулся, еще что-то посмотрел. Теперь пытаюсь формочку закрыть - а мне тут "вы хотите сохранить сделанные изменения?". Вот ведь блин - а что я менял-то. Вдруг я что-то важное поменял, да сохранить забыл. Или это просто я случайно мышкой по комбо-боксику щелкнул... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 15:55 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
SeVa Алексей Морозов, еще одно подтверждение твоей полной некомпетентности. Если уровень изоляции READ COMMITED, то блокировки держатся только на время выполнения запроса, таким образом, все читают и перезаписывают одно и тоже. Если выше, то один работает, а остальные отдыхают. Что за бред. При REPEATABLE READ все дружно работают и не видят изменений друг друга до COMMIT. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 16:00 |
|
|
start [/forum/topic.php?fid=33&msg=35654708&tid=1548667]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
161ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 266ms |
0 / 0 |