|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
начало: /topic/603465&pg=1 ln123Алексей МорозовВы не ответили на вопрос. Зачем держать транзакцию открытой, пока редатировается документ? Хотя вопрос и не мне попробую написать свои мысли на этот счет. Довольно часто при работе с версиониками работу с документами организуют с длинных транзакциях т.е. когда нужно открыть документ на редактирование делают select ... from ... for update т.е. блокируют в базе запись представляющую собой документ, а затем по мере редактирования сразу отправляют изменения на сервер, а при нажатии кнопки сохранить посылают commit. У вас насколько я понял используется другой подход т.е. все изменения делаются и хранятся на клиенте (для блокировки записи вы используете некий свой механизм), а затем в короткой транзакции по окончание редактирование отправляются на сервер. У обоих подходов есть свои плюсы и минусы. В случае вашего подхода для сложных объектов ИМХО труднее писать код, если же среда скроет все сложности от разработчика то тогда ваш подход будет явно лучше. Есть такая ВИ: - Главная форма - карточка. На ней кнопка "Редактировать" с гланой табличкой свойств. А также много подсвойств в кнопках - дочках (один - ко многим в БД). - При открытии подкнопок - форм, там присутствуют кнопки "ОК" и "Отмена" - На главной форме "Сохранить" и "Отменить". Для этого нужна длинная транзакция на кнопку "Редактировать", чтобы потом работать с остальными данными в БД не заботясь о чтении сырых данных другими пользователями - коннектами. Понятно изложил? Т.к. ЭТО в той теме OFFTOP ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2008, 16:06 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Petro123 Есть такая ВИ: - Главная форма - карточка. На ней кнопка "Редактировать" с главной табличкой свойств. А также много подсвойств в кнопках - дочках (один - ко многим в БД). - При открытии подкнопок - форм, там присутствуют кнопки "ОК" и "Отмена" - На главной форме "Сохранить" и "Отменить". Для этого нужна длинная транзакция на кнопку "Редактировать", чтобы потом работать с остальными данными в БД не заботясь о чтении сырых данных другими пользователями - коннектами. Понятно изложил? Нет. На форме есть грид содержащий несколько записей из второй таблицы, а пользователь выбрирает какую строку редактировать. Потом нажимает Изменить строку? Надо в свойствах таблицы выбрать "Form". При щелчке по строке грида, данные из строки скопируются в поля формы. При выолнении Apply формы, скопируются обратно. Либо свойство грида/датасета - Grid.ModalForm(Row, Mode) выполнит аналогичное действие. Либо c помощью метода CreateModalForm(Name, CallbackFunctionName) - создать форму, и скопировать нужные данные (NewForm.City = Data[y].City). А в функции указанной в CallbackFunctionName выполнить обратное копирование. Все данные хранятся в одной записи таблицы? В этом случае все данные находятся на клиенте, программисту надо лишь написать CreateCommonModalForm('Form10'). Этот метод скопирует данные из этой формы в создаваемую форму. А при вызове метода Apply новой формы скопирует все обратно. Главная форма будет заблокирована до завершения работы текущей. Либо c помощью метода CreateModalForm(Name, CallbackFunctionName) - создать форму, и скопировать нужные данные (NewForm.City = City). А в функции указанной в CallbackFunctionName выполнить обратное копирование. Либо разместить все даные на вкладках - более стандартный подход ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2008, 16:29 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Давай договоримся. В этой теме желательно сначала по вариантам использования ( ВИ ), потом программирование. Итак: авторНа форме есть грид содержащий несколько записей из второй таблицы, а пользователь выбрирает какую строку редактировать. Потом нажимает Изменить строку? Нет. Главная форма - Карточка клиента и они любят нетабличную форму (одна запись из контролов). А в неё мы входим хоть по поиску, хоть по 2 клику на общем списке. авторВсе данные хранятся в одной записи таблицы? Нет. Все данные по сущности "Клиент" храняться в нормализованном виде в массе таблиц СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2008, 16:59 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
x Давай договоримся. В этой теме желательно сначала по вариантам использования (ВИ), потом программирование. Ок. Только я не понял, как в базе данных хранится информация о клиенте. Все данные по сущности "Клиент" храняться в нормализованном виде в массе таблиц СУБД. Значит существует таблицы Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Так что ли? Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2008, 17:27 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Алексей Морозов, конечно. У меня, например, таких штук 15, включая FK на другие таблицы (код ДачериСына к примеру). Короче делать это всё на клиенте - каменный век. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2008, 17:35 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
не "Номер паспорта", а "код документа удостоверяющего личность" из справочника ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2008, 17:37 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
А чем хуже хранить эти данные вместе? Таблица - Клиенты Код клиента (первичный ключ) ФИО Адрес Дата рождения Код документа удостоверяющего личность (FK на другую таблицу) Номер страховки ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2008, 17:44 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
у одного клиента может быть несколько документов, несколько детей, несколько телефонов, несколько офисов, несколько ... - улавливаете? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2008, 17:48 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Алексей МорозовА чем хуже хранить эти данные вместе? нда... - один ко многим в одной? - даже если .... это тебе не поможет. Длинные транзакции нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2008, 17:49 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Petro123Алексей МорозовА чем хуже хранить эти данные вместе? нда... - один ко многим в одной? - даже если .... это тебе не поможет. Длинные транзакции нужны. нда... Вопрос был задан специально, потому что вы не поняли меня в первый раз. авторавторНа форме есть грид содержащий несколько записей из второй таблицы, а пользователь выбрирает какую строку редактировать. Потом нажимает Изменить строку? Нет. Главная форма - Карточка клиента и они любят нетабличную форму (одна запись из контролов). Но и я вас не понял, я спросил у 25 человек, что значит: "Главная форма - Карточка клиента и они любят нетабличную форму (одна запись из контролов)." никто не понял, ну ладно... Этот грид (о котором я писал), находится на форме вместе с полями - ФИО, ДАТА РОЖДЕНИЯ. И содержит все записи таблицы - "один ко многим" (например - несколько документов, несколько детей, несколько телефонов, несколько офисов, несколько ...) Вы хотите, что бы все эти гриды редактировались не в ячейках (как в 1С)? А с использованием отдельной формы? Что бы на форме присутствовала кнопка ОК и ОТМЕНА. Что бы при нажатии на ОТМЕНА, изменения внесенные на суб-форме были отменены (отчачены) ?? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2008, 18:03 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Алексей Морозов А чем хуже хранить эти данные вместе? Нормализация. Адрес составной компонент, например, индекс, страна, город, улица, дом и т.п. К тому же адресов у клиента масса: юридический, почтовый. Если подумать об удаленных складах и т.п. становится совсем плохо... и т.д. и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2008, 18:09 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Алексей Морозов Но и я вас не понял, я спросил у 25 человек, что значит: "Главная форма - Карточка клиента и они любят нетабличную форму (одна запись из контролов)." никто не понял, ну ладно... Видимо, я не был из числа этих 25 человек. :) Хотя, конечно, можно было бы сформулировать мысль и по точнее. Алексей МорозовЭтот грид (о котором я писал), находится на форме вместе с полями - ФИО, ДАТА РОЖДЕНИЯ.И содержит все записи таблицы - "один ко многим" (например - несколько документов, несколько детей, несколько телефонов, несколько офисов, несколько ...) Это я тоже понял. Алексей МорозовВы хотите, что бы все эти гриды редактировались не в ячейках (как в 1С)? А с использованием отдельной формы? Лично я так и делаю. Редактирование в гриде не всегда удобно для пользователя. Да и в гриде, как правило, отображаю не всю вытаскиваемую информацию, а лишь ее часть. Все остальное - в отдельной форме, которая предназначена для просмотра и/или редактирования данных. P.S. Sorry, конечно, что вмешиваюсь в вашу дуэль. Считайте меня просто секундантом. :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2008, 18:25 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
авторЛично я так и делаю. Редактирование в гриде не всегда удобно для пользователя. Да и в гриде, как правило, отображаю не всю вытаскиваемую информацию, а лишь ее часть. Все остальное - в отдельной форме, которая предназначена для просмотра и/или редактирования данных. Тут именно так и есть. автор P.S. Sorry, конечно, что вмешиваюсь в вашу дуэль. Считайте меня просто секундантом. :)) Да я все хочу точку поставить в этой странной бесседе. Теперь когда все разобрались, как организованы данные, обсудим зачем тут длинные транзакции. (кстати применять длинные транзакции можно и в этой среде, только переносимость пострадает. И кода придется немного руками написать.) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2008, 18:28 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Судя по сообщениям Petro123 дельфист еще тот. Помог бы сделать среду более удобной для дельфистов, а не пытался (часто необоснованно) искать возможность аргументировать своё пренебрежение. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2008, 18:32 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Алексей МорозовТеперь когда все разобрались, как организованы данные, обсудим зачем тут длинные транзакции. Вообще стараюсь избегать длинных транзакций. Хотя и не всегда получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2008, 18:39 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Petro123Довольно часто при работе с версиониками работу с документами организуют с длинных транзакциях т.е. когда нужно открыть документ на редактирование делают select ... from ... for update т.е. блокируют в базе запись представляющую собой документ, а затем по мере редактирования сразу отправляют изменения на сервер, а при нажатии кнопки сохранить посылают commit. Всю жизнь работал с версионниками (Oracle), но ни разу не использовал длинных транзакций в пользовательских приложениях. Вот сейчас приходится самом работать в приложении, которое такие транзакции использует и ничего кроме нецензурных слов по этому поводу найти не могу :) Крайне неудобно работать. Хотя, возможно, что тут не длинные транзакции виноваты, а чьи-то руки... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 10:39 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Bogdanov Andrey, дык, давай обсудим как это сделать. Я друго пути для данного ВИ не нашёл. Если ты сервер, не суетись под клиентом (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 11:17 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Petro123дык, давай обсудим как это сделать. Я друго пути для данного ВИ не нашёл. Ну как всегда, сначала надо с ВИ разобраться - правильно ли он описан. Что мы имеем - нажимая кнопку "Сохранить" пользователь практически не представляет того, что именно он будет "сохранять". Он понаоткрывал десяток экранчиков в каких-то что-то правил, в каких-то нет. А пользователь выполняя необратимое действие (commit таковым как раз и является) должен достаточно внятно представлять, что именно он делает. А здесь, он практически говорит, я - не помню чего делал, но пусть будет так. То есть я, как архитектор системы, предлагаемый ВИ забраковал бы. В качестве альтернативы я бы предложил все изменения, выполняемые в дочерних формах отражать на основной и, соответственно, хранить в данных формы вплоть до момента сохранения в бд. Либо разбивать транзакцию на более мелкие части. Теперь о преблемах, которые с длинными транзакциями возникают. И не технических, а пользовательских. Вот берем описанный ВИ редактирования карточки. Зайдя в десятое подсвойство, пользователь вдруг понял, что для выполнения операции надо немножко какой-нибудь словарь обновить (скажем новый вид деятельности в него добавить). Для меня очевидно, что транзакция по редактированию словаря должна быть отдельной от редактирования карточки. В той системе, с которой мне приходится сейчас работать, в данном случае предлагается еще один экземпляр модуля запустить :) А ваши предложения? Petro123 Если ты сервер, не суетись под клиентом (с) К счастью, я не сервер :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 11:34 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Зачем длинные транзакции? Отвечу так: это такой же бред, как и заставлять натурщицу не покидать свое место до полного завершения картины. Такой же бред, как и запускать в супермеркет по одному человеку. И т.д. и т.п. Обычно "длинными транзакциями" страдают те, кто не понимает разницы между данными сохраненными в БД и информацией. А это две разных сущности. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 11:52 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
> запускать в супермеркет по одному человеку Вы хотите сказать, что в некоторых случаях без длинных транзакций для выполнения работы придется заблокировать всю БД? И лишь один пользователь сможет работать в один момент времени? Либо внутри одного соединения (контекста) можно выполнять одну задачу? Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 12:00 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Алексей МорозовВы хотите сказать, что в некоторых случаях без длинных транзакций для выполнения работы придется заблокировать всю БД?Мне показалось, что iscrafm как раз против длинных транзакций. И своей фразой он хотел сказать, что с длинными транзакциями придется блокировать всю базу :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 12:04 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Алексей Морозов Вы читаете как-то по спирали что-ли или, каким-то непонятным пока мне способом. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 12:11 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Bogdanov AndreyМне показалось, что iscrafm как раз против длинных транзакций. я не отношусь к подвиду людей, которые могут сесть и не отвелакаясь и не выполняя промежуточные сохранения набросать, допустим, большой документ. В процессе работы постоянно жму на кнопку сохранить. До тех пор, пока я не сказал себе или другим (допустим опубликовал) что все готово - это просто данные, черновик. После - информация. Те, кто этого не понимают начинают придумывать и пытаются обосновать необходимость каких-то "длинных транзакций". Транзакция к счастью коротка. В приведенном примере - опубликовать (готово). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 12:21 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
xВы читаете как-то по спирали что-ли или, каким-то непонятным пока мне способом. Просто я нахожу все возможные ответы на вопрос. Ваша фраза: "запускать в супермеркет по одному человеку" значит Значит супермаркер одновременно сможет обслужить только одного клиента. Длинные транзакции позволяют, обслуживать много человек одновременно - у них же разные соединения. А если программа использует многопоточность и много соединений (контекстов) для каждого потока - то проблемы "в супермеркет по одному" вообще нет. Если вы пришли к такому выводу, я могу предположить - что многопоточность для вас новое слово. А длинные транзакции - это не плохо. Просто аналогичного результата можно дыбится сохраняя данные на клиенте. Я стремлюсь выкинуть из своей среды всю избыточность, и сейчас думаю - Какие преимущества у длинные транзакция, перед сохранением на клиенте? Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 12:40 |
|
Новая Среда разработки. Зачем длинные транзакции?
|
|||
---|---|---|---|
#18+
Я привел пример длинных транзакций как один из примеров взаимодействия с базой который мне встречался. Лично мне длинные транзакции не нравятся у них на мой взгляд есть только один плюс это то что хранение изолированного состояния состояния сложного объекта перекладывается на сервер несколько легче писать клиентскую часть (о части вещей можно не думать так как их разрешит сервер). Собственно меня и интересовало насколько среда разработки Алексея позволит изолировать прикладного разработчика от размышлений типа: пользователь при редактирование накладной создал товар, а другой пользователь этот товар удалил что произойдет при сохранение накладной? Есть сложный объект как в нем реализовать отмену сделанных операций или их части? Какую структуру хранения нужно создать для хранения объекта и как реализовать что бы на сервер отсылались только изменения? Я редактируют накладную строки которой созданы на основе счета в это время другой пользователь удаляет из счета строку, что будет с моей накладной? ну и так далее. А так честно говоря среда Алексея напоминает Power Builder + framework. Причем Power Builder в чем-то (по любому в части DataWindow) и по круче будет ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2008, 12:54 |
|
|
start [/forum/topic.php?fid=33&msg=35653638&tid=1548667]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
143ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 292ms |
total: | 536ms |
0 / 0 |