Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
Вот такая у нас ситуация: Каждый раз пользователь открывая документ начинает транзакцию, закрывая его - завершает транзакцию. Поскольку пользователь может держать документ открытым довольно долго, мы прыгаем/выкручиваемся, чтобы он блокировал при работе как можно меньше записей. А говорят - как-то можно открывать транзакцию только в момент сохранения документа. Пока документ просто открыт - никаких транзакций нет. Говорят - это лучше, но как тогда дать другому понять, что документ занят? Мы как раз блокируем его в транзакции. Поделитесь опытом, если не жалко. :) Жизнь коротка - потерпи немного :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2005, 16:26 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
Marat_L пишет: > Каждый раз пользователь открывая документ начинает транзакцию, закрывая > его - завершает транзакцию. Поскольку пользователь может держать > документ открытым довольно долго, Так делать нельзя. > А говорят - как-то можно открывать транзакцию только в момент сохранения > документа. Пока документ просто открыт - никаких транзакций нет. > > Говорят - это лучше, но как тогда дать другому понять, что документ занят? > Мы как раз блокируем его в транзакции. Отдельный механизм блокирования. Например таблица блокировок и процедура типа LockObject(ObjType, ObjId), которая либо заносит блокировку, либо ругается, что такая уже есть. Делается элементарнейше! Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2005, 16:33 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
Вообще говоря, как я понимаю, зависит от базы и от бизнес-правил. Например, если Oracle, который блокирует с точностью до 1 строки и при этом другой пользователь НИ В КОЕМ СЛУЧАЕ не должен в это время менять эту строку - тогда можно блокировать в начале транзакции и не заморачиваться с доп. механизмами. Если база блокирует не 1 строку, а, например, целый блок, или если допустимо изменять этот документ другими пользователями, пока данный user редактирует документ - тогда блокировка непосредственно перед записью или наворачивание доп. механизмов над стандартными механизмами самой базы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2005, 16:58 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
Говорят - это лучше, но как тогда дать другому понять, что документ занят? Занят - для чтения или для записи или для того и для другого? Если последний вариант - то у вас все правильно реализовано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2005, 18:10 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
Александр Гoлдун Отдельный механизм блокирования. Например таблица блокировок и процедура типа LockObject(ObjType, ObjId), которая либо заносит блокировку, либо ругается, что такая уже есть. Делается элементарнейше! Я пожалуй попробую сделать именно так. А что если клиент заблокирует документ и зависнет/отвалится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2005, 08:57 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
Ну войдет клиент заново и снимет блокировку. Надо предусмотреть возможность, чтобы блокировку мог снять либо ее автор, либо администратор системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2005, 09:15 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
Тут ответ на ваш вопрос: ADO & SQL Server , блокировка записей авторА что если клиент заблокирует документ и зависнет/отвалится? И на этот тоже. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2005, 10:39 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
Ну и конечно транзакции нужно делать как можно менее короткими. А лучше их с клиента вообще не открывать по возможности. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2005, 10:41 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
А откуда их открывать, скажите плиз?По поводу коротких - это у Вас в MS SQL.Транзакция должна быть сколь угодно нужной. Надеюсь, мы с Вами не путаем транзакцию в БД и бизнес-транзакцию?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2005, 10:46 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
авторГоворят - это лучше, но как тогда дать другому понять, что документ занят? Мы как раз блокируем его в транзакции. Ужас ! Мазохизм и извращение ! Не знаете как дать понять, что документ занят ? Дык сто раз уже обсосали эту тему ! Ведите отдельную т-цу для списка занятых д-тов. Перед попыткой редактирования д-та запускайте процедуру проверки занятости. Если док. не занят, то пр-ра записывает Вас+№док в список (обязательно с SPID вашего серверного процесса) и возвращает ответ : "Редактируй". Если док. уже редактируется, то пр-ра возвращает "занято таким-то". По выходу из док-та выз. пр-ра для очистки Вас из списка. В этой же пр-ре очищаются все записи у кот. процессы не существуют на данный момент т.е. отвалившиеся пользователи. Всё просто реализуется и всё быстро и надёжно работает. Не мешает просто просматривать редактируемый д-т. Легко переделать под полную монополию на д-т. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2005, 11:20 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
LSV авторГоворят - это лучше, но как тогда дать другому понять, что документ занят? Мы как раз блокируем его в транзакции. Ужас ! Мазохизм и извращение ! Не знаете как дать понять, что документ занят ? Дык сто раз уже обсосали эту тему ! Ведите отдельную т-цу для списка занятых д-тов. Перед попыткой редактирования д-та запускайте процедуру проверки занятости. Если док. не занят, то пр-ра записывает Вас+№док в список (обязательно с SPID вашего серверного процесса) и возвращает ответ : "Редактируй". Если док. уже редактируется, то пр-ра возвращает "занято таким-то". По выходу из док-та выз. пр-ра для очистки Вас из списка. В этой же пр-ре очищаются все записи у кот. процессы не существуют на данный момент т.е. отвалившиеся пользователи. Всё просто реализуется и всё быстро и надёжно работает. Не мешает просто просматривать редактируемый д-т. Легко переделать под полную монополию на д-т. Тяжело приходится людям, у которых нет select for update nowait... Приходится фактически реализовывать PMON ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2005, 11:48 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
LSVУжас ! Мазохизм и извращение ! Не знаете как дать понять, что документ занят ? Дык сто раз уже обсосали эту тему ! Ведите отдельную т-цу для списка занятых д-тов. Перед попыткой редактирования д-та запускайте процедуру проверки занятости. Если док. не занят, то пр-ра записывает Вас+№док в список (обязательно с SPID вашего серверного процесса) и возвращает ответ : "Редактируй". Если док. уже редактируется, то пр-ра возвращает "занято таким-то". По выходу из док-та выз. пр-ра для очистки Вас из списка. В этой же пр-ре очищаются все записи у кот. процессы не существуют на данный момент т.е. отвалившиеся пользователи. Всё просто реализуется и всё быстро и надёжно работает. Не мешает просто просматривать редактируемый д-т. Легко переделать под полную монополию на д-т. Спасибо - это то что мне нужно!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2005, 11:59 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
Vadim_MaximovТяжело приходится людям, у которых нет select for update nowait... Приходится фактически реализовывать PMON Гм, вроде как разговор идет о том, чтобы запретить пользователю открыть для изменения документ, который в это время изменяется другим пользователем. То есть если мы повесим шаред-блокировку, то считать и открыть для изменения его можно будет. Если эклюзивную, то все пользователи, которые бы просто хотели сделать отчет по данным запнуться на этом документе, хотя он вроде бы пока только изменяется на клиенте и в БД изменения не подтверждены. Так что обьясните пожалуйста, чем "select for update nowait" может помочь обойти вышеперечисленные условия и ограничения ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2005, 12:10 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
Да ничего они не загнутся. SELECT нормально отработает.Просто в данной вещи select for update не нужен, как я уже говорил, у нас случай транзакции бизнес-уровня. Документ можно заблокировать дня так на 2 и коннект то для этого не надо держать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2005, 12:25 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
select for update и есть shared-блокировка, тем более в Оракле без желания нет блокировок по чтению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2005, 12:27 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
то все пользователи, которые бы просто хотели сделать отчет по данным запнуться на этом документе Если конкретно по Oracle, то там "писатели" не мешают "читателям". "Читатели" просто видят старую версию из UNDO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2005, 12:28 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
Shtockselect for update и есть shared-блокировка, тем более в Оракле без желания нет блокировок по чтению. Не совсем так. При операциях UPDATE (в том числе и SELECT FOR UPDATE) на строку накладывается эксклюзивная блокировка, а на таблицу - shared. А для бизнес-блокировки на несколько дней можно ведь использовать и поле статуса документа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2005, 12:32 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
ASCRUS Vadim_MaximovТяжело приходится людям, у которых нет select for update nowait... Приходится фактически реализовывать PMON Гм, вроде как разговор идет о том, чтобы запретить пользователю открыть для изменения документ, который в это время изменяется другим пользователем. То есть если мы повесим шаред-блокировку, то считать и открыть для изменения его можно будет. Если эклюзивную, то все пользователи, которые бы просто хотели сделать отчет по данным запнуться на этом документе, хотя он вроде бы пока только изменяется на клиенте и в БД изменения не подтверждены. Так что обьясните пожалуйста, чем "select for update nowait" может помочь обойти вышеперечисленные условия и ограничения ? Поясняю: если при открытии документа блокировать его через select for update nowait , то при при открытии этого же документа следующим пользователем (и соответственно попытке блокирования его), второй пользователь получит отлуп. А приложению останется просто правильно обработать исключение. При этом простые селекты по данному документу спокойно считают старые версии блоков из UNDO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2005, 13:35 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
Marat_L А говорят - как-то можно открывать транзакцию только в момент сохранения документа. Пока документ просто открыт - никаких транзакций нет. Ага, "Мама, а говорят, есть такие червячки, которые в яблоках живут, это правда ?" Marat_L Говорят - это лучше, но как тогда дать другому понять, что документ занят? А никак. Зачем это нужно вообще ? FoxPro с клиппером покоя не дают ? Marat_L Мы как раз блокируем его в транзакции. Не, ну если у вас Interbase или Oracle - пожалуйста, кто ж мешает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 10:02 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
Marat_L LSV Ведите отдельную т-цу для списка занятых д-тов. Перед попыткой редактирования д-та запускайте процедуру проверки занятости. Если док. не занят, то пр-ра записывает Вас+№док в список (обязательно с SPID вашего серверного процесса) и возвращает ответ ... Спасибо - это то что мне нужно!!! Я полагаю, что это - именно то, что тебе ( и большинству других) АБСОЛЮТНО НЕ НУЖНО. Это вообще никому не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 10:11 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
Самое правильно на мой взгляд решение таких проблем сделано в PowerBuilder. Для изменяемых и удаляемых записей там можно поставить генерить UPDATE и DELETE в разделе WHERE не только по ключевому полю, но и по всем (перечисленным) полям. В итоге например, после изменения записи PB генерит примерно такой запрос: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 11:25 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
ASCRUS Это есть optimistic locking. Реализовано почти где угодно и лучше не через все поля, а через одно - timestamp ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 11:29 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
to ASCRUS это решение не совсем той проблемы о которой реч. Поясню примером: Чел открыл счёт чтобы проверить его и принять оплату, открыл и ушёл пить чай. Пока он пил чай ему в счёт ещё с пол сотни позиций добавили. Пришёл он и жмёт оплата принята, а счёт то уже не тот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 11:36 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
Sergey_SKto ASCRUS это решение не совсем той проблемы о которой реч. Поясню примером: Чел открыл счёт чтобы проверить его и принять оплату, открыл и ушёл пить чай. Пока он пил чай ему в счёт ещё с пол сотни позиций добавили. Пришёл он и жмёт оплата принята, а счёт то уже не тот. Кто же мешает в клиент сделать проверку перед принятием оплаты состояния счета между открытыми на клиенте данными и существующими на сервере с выдачей предупреждения об изменениях на сервере и перечитыванием актуальных данных ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 12:56 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
to ASCRUS Я вот тоже так думаю, это будет лучше чем открывать транзакцию при открытии документа и закрывать при его закрытии. Только вот документы могут быть уж очень не простыми и лучше завести таблицу: IDДокумента uniqueidentifier IDСостояния uniqueidentifier Менять IDСостояния при каждом изменениии документа и по этой ментке ориентироваться устарел открытый документ у клиента или нет. MasterZiv Я полагаю, что это - именно то, что тебе ( и большинству других) АБСОЛЮТНО НЕ НУЖНО. Это вообще никому не нужно. to MasterZiv ваши предложения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 13:44 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
ASCRUSВ итоге например, после изменения записи PB генерит примерно такой запрос: У этого подхода также есть недостатки. Наиболее для меня неприятный - он плохо совместим с желанием чего-то нетривиального. Например, UpdateSQL в дельфе мне пришлось специально отучать от проверки на ROWCOUNT - поскольку как только я захотел менять больше чем одну таблицу, проверка стала возвращать "не то". Другой аспект - зависимости и траффик. Если тянуть на клиента все поля таблицы - получаем большой избыточный траффик. Если нужные - "прозеваем" изменение других полей, из-за чего может возникнуть рассогласование. Вариант наличия гигабайтных блобов тоже заслуживает внимания :) В целом - я не вижу, что же именно в этом "правильного". Особенно если вспомнить о классическом недостатке - aka "я сделал кучу работы, а теперь ее потеряю". ASCRUSподход более правильный, чем попытка какой либо блокировки записей при изменении их на клиенте, что изначально противоречит парадигмам разработки клиент-серверных приложений. Можно поподробнее - формулировку парадигмы и место противоречия? P.S. Имхо, клиент-серверная парадигма - частный случай общей ООП-парадигмы. Есть объекты (сервер и клиент), которые решают свои задачи и обмениваются сообщениями. Одно из таких сообщений - "дай для просмотра", другое - "дай для изменения". Никаких коллизий не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 14:25 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
2 softwarer поддерживаю. Вообще очень-очень плохо когда средства разработки влияют навязывают определенный подход к разработке пользовательского интерфейса. В идеале было бы неплохо если б сервер бд поддерживал и грязное чтение, и версионность одновременно. (в разных случаях разные подходы выигрывают) а в случае разработки клиентского приложения... я для себя так например давно определился - нет ничего лучше чем С++/Embedded SQL. Тем кто юзает MSSQL/Sybase этого просто не понять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 14:53 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
gardenman2 softwarer поддерживаю. Вообще очень-очень плохо когда средства разработки влияют навязывают определенный подход к разработке пользовательского интерфейса. В идеале было бы неплохо если б сервер бд поддерживал и грязное чтение, и версионность одновременно. (в разных случаях разные подходы выигрывают) а в случае разработки клиентского приложения... я для себя так например давно определился - нет ничего лучше чем С++/Embedded SQL. Тем кто юзает MSSQL/Sybase этого просто не понять. Нет, после PowerBuilder/DataWindow Expression/Embedded SQL однозначно не понять :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 16:20 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
2 ASCRUS Хорошая тема для флейма: С++ via PowerBuilder via Delphy ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 16:29 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
gardenman2 ASCRUS Хорошая тема для флейма: С++ via PowerBuilder via Delphy PowerBuilder строго заточен только под БД: создание клиентских интерфейсов и 3-х звенок, больше он ничего не умеет. Так что флеймить особо не о чем, тема получится из разряда, что лучше "Все в одном или строго ориентированно". Я например PB использую для создания интерфейсных мордочек, Delphi предпочитаю пользоваться для создания компонент/серверов/движков (вот только что закончил тестирование самописного COM-сервера на базе FastReport с его обвязкой для использования в PowerBuilder и вполне остался доволен связкой PB[ООП] + Delphi[COM]). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 16:36 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
ASCRUS Еще раз напомню что оптимистическую блокировка реализована далеко не только у Power Builder softwarer Чтобы не посылать туда-сюда все поля придуман timestamp ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 16:49 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
2 ASCRUS Жаль что мы в разных городах, а то можно было бы посравнивать реализацию простеньких задач на PB и С++, по производительности и по удобству пользовательского интерфейса... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 17:46 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
gardenman2 ASCRUS Жаль что мы в разных городах, а то можно было бы посравнивать реализацию простеньких задач на PB и С++, по производительности и по удобству пользовательского интерфейса... Ну удобство интерфейса зависит только от DirectHand.sys, а не от того, на чем сделано :) А производительность в мордочках для клиентов для меня вообще не знакомое понятие - чего там производить то ? :) В цикле миллион окошек виндоус открыть что ли ? Ну а если брать производительность работы с данными на 3-ем звене, так DataWindow Engine писался еще в те времена, когда РСУБД умели только хранить данные и вся тяжесть работы по их обработки частенько ложилась именно на PB. Так что здесь у них движок оптимизирован по самое не хочу, хотя я предпочитаю грязную и тяжелую работу отдавать на откуп РСУБД, используя PB только для просмотра и изменения данных. И даже если сравнивать трудозатраты на рисование интерфейса с нуля и с набором своих библиотек/классов/компонент, то окажется, что в последнем случае скорость создания прикладух на тех же Си, Delphi, Java и PowerBuilder фактически одинакова. Все поддерживают ООП, создание визуальных компонент, повторное наследование форм и т.д, простор автоматизации самого себя любимого крайне широк в них. Так что тут опять сравнивать нечего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 18:38 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
авторНу удобство интерфейса зависит только от DirectHand.sys, а не от того, на чем сделано :) А производительность в мордочках для клиентов для меня вообще не знакомое понятие - чего там производить то ? :) В цикле миллион окошек виндоус открыть что ли ? ASCRUS, раз пошла такая пьянка, может вы и мне DirectHand.sys вправите, а то вот ну никак не могу найти машину на которой не тормозит java swing ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 19:32 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
Yo! авторНу удобство интерфейса зависит только от DirectHand.sys, а не от того, на чем сделано :) А производительность в мордочках для клиентов для меня вообще не знакомое понятие - чего там производить то ? :) В цикле миллион окошек виндоус открыть что ли ? ASCRUS, раз пошла такая пьянка, может вы и мне DirectHand.sys вправите, а то вот ну никак не могу найти машину на которой не тормозит java swing ;) Ну Вы же Ораклист, должны знать, что проблемы производительности мощных систем элементарно решаются путем наращивания аппаратных ресурсов ;) Ну а если серьезно, то я считаю что DirectHands.sys нужно править тем, кто пытается на Java GUI рисовать без достаточного на то основания. Например, Sybase ASA начинает крутить небольшие БД уже с 2 метров выделенной памяти. А вот ее универсальная консоль управления с поддержкой плагинов Sybase Central (аналог MMC) красивая и удобная написана на Java и если на машине меньше 128 метров, то можно часто и долго любоваться работой сборщика мусора. Вот такой вот парадокс :) Я конечно понимаю, что кроссплатформенной СУБД нужны кроссплатформенные визуальные утилиты, однако мне почему то кажется, что разрабатывать и админить БД/СУБД народ предпочитает с Windows, вне зависимости от того, на чем сейчас СУБД крутиться. Для таких вещей конечно C++ был бы гораздо предпочительнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 22:56 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
авторНу Вы же Ораклист, должны знать, что проблемы производительности мощных систем элементарно решаются путем наращивания аппаратных ресурсов ;) это не про свинг :) а central который я видел для 12-го ase был на awt, т.е. есть куда рости :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 23:39 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
- доктор, меня все игнорируют - следующий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 10:58 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
funikovyuri softwarer Чтобы не посылать туда-сюда все поля придуман timestamp Я согласен с тем, что это лучше нежели "реализованное в PowerBuilder-е". У timestamp остается неприятная деталь - необходимость всюду совать техническое поле. Более существенно - не представляю, как я объяснял бы пользователю, что произошел конфликт и работу за последние полчаса он должен выкинуть в помойку, поскольку сохранить ее программа не даст. Имхо - этот подход необходимо сочетать с reconsile. Но это уже несколько другой класс решений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 12:05 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
Sergey_SK MasterZiv Я полагаю, что это - именно то, что тебе ( и большинству других) АБСОЛЮТНО НЕ НУЖНО. Это вообще никому не нужно. to MasterZiv ваши предложения? Не быть слишком умным и не придумывать всякую ерунду. В 90% реальных задач блокирование документа на время его "рассмотрения" пользователем не нужно. Некорректность сохранения пользователем документа (строки(-ок) таблиц) поверх ранее произведенного изменения в том виде, в котором он его прочитал и уведел (и, видимо, посчитал правильным) - весьма спорна. Так что не фиг создавать себе кучу проблем на ровном месте. А если это реально нужно - реализация внетранзакционных блокирово уровня приложения достаточно проста и прозрачна, чтобы ее обсуждать. Варианты какжется предлагались, если нет - в сети их описано достаточно много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 13:58 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
MasterZivНекорректность сохранения пользователем документа (строки(-ок) таблиц) поверх ранее произведенного изменения в том виде, в котором он его прочитал и уведел (и, видимо, посчитал правильным) - весьма спорна. Хм. Бухгалтер проставил документу признак "оплачен". В это же время продавец, кладовщик или еще кто-нибудь, пыхтя, заносит в поле "комментарий" жутко полезную информацию, типа "не забыть на завтра выписать пропуск". Клиент, приехавший завтра на грузовике, с интересом узнает, что его счет не оплачен (и отгрузки не будет) из-за спорной некорректности того, что не нужно в 90% случаев. Видимо, он очень рад и проникается ощущением истинной мудрости гуру от программирования. Занавес. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 14:05 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
логическая блокировка и таких проблем не будет. действительно, не нужно делать проблему на пустом месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 14:21 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
Old Nickлогическая блокировка и таких проблем не будет. Если блокировку все равно надо делать - физическая удобнее. Потому как во-первых удобнее использовать, а во-вторых не будет проблем с теми, кто не знает о существовании логической блокировки. Вопрос, конечно, в реализации этой физической блокировки. Как уже сказал Вадим - если реализовано плохо, приходится придумывать собственный PMON. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 14:33 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
интересно, а в какой ситуации кто-то может не знать о логической блокировке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 15:45 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
>Если блокировку все равно надо делать - физическая удобнее. Потому как во-первых удобнее использовать, а во-вторых не будет проблем с теми, кто не знает о существовании логической блокировки. но зато нет проблем с web/wap клиентами у которых на каждый чих новая сесия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 15:48 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
Old Nickинтересно, а в какой ситуации кто-то может не знать о логической блокировке? О логической блокировке знают только те, кому о ней сказали. Соответственно, можно быть 100% уверенным, что о ней кто-то не знает. Соответственно, надежна она только если доступ к данным перекрыт и абстрагирован - например, appserver-ом. В этом случае проблемой остается только ситуация "нашему специалисту надо поправить в вашей базе..." Yo!но зато нет проблем с web/wap клиентами у которых на каждый чих новая сесия Средство героической борьбы с собственноручно созданными трудностями? Безусловно, в таких условиях строчные блокировки неудачны. Правда, лично мне в таких условиях сразу захотелось бы сделать appserver или еще что-нибудь, что позволит избежать такого идиотизма, как ежесекундные реконнекты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 17:14 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
softwarer реконектов не будет - будет возвращение соединения в пул ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 17:23 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
funikovyuriреконектов не будет - будет возвращение соединения в пул Зависит от. Для этого необходим хотя бы минимальный промежуточный слой - возможно, присутствующий по умолчанию, но тем не менее. Но в целом - наличие пула соединений безусловно вынудит придумывать собственные блокировки - пока что, насколько я в курсе, сервера БД не имеют достаточной поддержки для этого режима. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 17:40 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
softwarer в том-то и дело! СУБД имеют только один вариант реализации транзакций - он хорошо развит и применим во многих случаях. НО транзакции - это просто требования к работе. И реализовывать их можно по-разному - к сожалению руками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 17:56 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
funikovyuri softwarer в том-то и дело!..... Я бы сказал несколько иначе. Механизм транзакций - как он реализован - покрывает все мыслимые потребности. По крайней мере, никто пока что не называл мне ситуции, где мне не хватило бы стандартных транзакционных возможностей. Текущий недостаток БД - неумение держать маленький и эффективный контекст транзакции и переключаться между ними внутри сессии; если угодно - реализации пула на уровне сервера БД. Oracle делает такую попытку (MTS), но, насколько я понимаю, это не то чтобы принципиальный прорыв, поскольку сохраняемый контекст оказывается вовсе не "маленьким и эффективным". Поэтому пул - а значит и все задетые им механизмы - и выезжают из сервера туда, где им вряд ли лучшее место. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 18:51 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
softwarer Я согласен! Но, хотя я и не хочу сейчас говорить формально, текущая реализация транзакций в РСУБД оптимизирована для какой-то одной стратегии. Обычно это пессимистическое блокирование всех используемых ресурсов в зависимости от уровня изоляции. Такой сценарий наиболее востребован, хотя и не всегда. Вариант с долгими транзакциями - это один из таких случаев. Второй - это отсоединенная обработка (то для чего вы предлагаете использовать контексты). Можно все это по-разному называть, но, imho, в этой области еще много чего стоит сделать, как с теоретической, так и практической точек зрения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 19:13 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
funikovyuriтекущая реализация транзакций в РСУБД оптимизирована для какой-то одной стратегии. Обычно это пессимистическое блокирование всех используемых ресурсов в зависимости от уровня изоляции. Вот это я не совсем понял. Оптимистическая блокировка в транзакциях реализуется ничуть не хуже пессимистической - разве что нет готовой поддержки. Версионники, конечно, могли бы дать здесь инструмент контроля изменений, более удобный чем ручной timestamp. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 19:33 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
Оптимистическая блокировка в транзакциях реализуется ничуть не хуже пессимистической Самим ядром СУБД она никак не реализуется. Т.е. это вне его компетенции. А timestamp - это уход от философии разделения внутреннего и внешнего представления данных. Т.е. это зависимость от данных! Вот примерно о чем я говорю Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 19:38 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
2 MasterZiv: авторА если это реально нужно - реализация внетранзакционных блокирово уровня приложения достаточно проста и прозрачна, чтобы ее обсуждать. Варианты какжется предлагались, если нет - в сети их описано достаточно много. А можно хотя бы пару ссылок на реализацию "внетранзакционных блокировок уровня" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2005, 06:26 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
funikovyuriОптимистическая блокировка в транзакциях реализуется ничуть не хуже пессимистической Самим ядром СУБД она никак не реализуется. В ней по большому счету нечему реализоваться ядром СУБД. Для этого надо пойти в сторону Access, PowerBuilder или других средств автогенерации SQL-я. Грубо говоря, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Единственное, что могла бы база - заменить последнее на что-нибудь типа Код: plaintext 1. 2. Было бы удобно, не спорю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2005, 12:18 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
PB генерит запрос только на изменившиеся записи/поля, поэтому если я у 2 записей изменил 2 разных поля, то для каждой записи будет соотвествующий UPDATE только на изменившиеся поля, а в WHERE помимо ID будут поставлены на сравнение со старыми значениями эти поля или все, которые я явно указал для DataWindow. Вообще в PB на DataWindow достаточно много настроек модели поведения сохранения информации в БД, вплоть до изменения ключевого поля. Если же ничего из предложенных вариантов не устраивает, PB всегда можно попросить проводить изменения через собственные ХП. По моему тут достаточно простора для потребностей и фантазии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2005, 18:35 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
ASCRUS угу - только в where все равно будут ВСЕ поля... Иначе никакого смысла в этом нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2005, 18:49 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
funikovyuri ASCRUS угу - только в where все равно будут ВСЕ поля... Иначе никакого смысла в этом нет В WHERE будет в зависимости от выбранной опции: Key columns Key and Updateable columns Key and Modified columns Нужные поля можно ручками включить в список "Updateable columns" для соотвествующе выбранного режима. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2005, 18:58 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
ну 1 - это понятно, 2 - о чем я и говорю, 3 - вот его практическое назначение для меня загадка :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2005, 19:06 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
ASCRUSPB генерит запрос только на изменившиеся записи/поля, поэтому если я у 2 записей изменил 2 разных поля, то для каждой записи будет соотвествующий UPDATE только на изменившиеся поля, а в WHERE помимо ID будут поставлены на сравнение со старыми значениями эти поля Это замечательный путь к рассогласованию данных внутри одной записи. ASCRUSили все, которые я явно указал для DataWindow. А к этому относятся те минусы, о которых я говорил. ASCRUSВообще в PB на DataWindow достаточно много настроек модели поведения сохранения информации в БД, вплоть до изменения ключевого поля. Хм. Это по-моему, рядовое требование. ASCRUS Если же ничего из предложенных вариантов не устраивает, PB всегда можно попросить проводить изменения через собственные ХП. По моему тут достаточно простора для потребностей и фантазии. Хм. Речь, кажется, идет не о преимуществах использования PB :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2005, 12:10 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
funikovyuri3 - вот его практическое назначение для меня загадка :) 3 - это путь "минимальной блокировки" в абсолютно нормализованной базе. В этом случае максимальна вероятность итогового успеха, поскольку две сессии могут в параллель редактировать разные поля записи. Цена этого - очень строгие требования к независимости данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2005, 12:15 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
блин....сколько слов вокруг сто раз пережёванной темы ! Притом, что это далеко не первый флейм про блокировку документов. Делайте самодельную блокировку и Вы сможете : * увидеть, кто и когда занял документ; * увидеть с какой машины занят документ; * каким именно действием занят документ; * блокировку на определённые действия и на длительное время; * ещё многое другое, что Вам придёт в голову :) На уровне серверных блокировок всё перечисленное выполнить невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2005, 11:46 |
|
||
|
Долгие транзакции - Короткие транзакции
|
|||
|---|---|---|---|
|
#18+
LSVДелайте самодельную блокировку и Вы сможете : * увидеть, кто и когда занял документ; * увидеть с какой машины занят документ; * каким именно действием занят документ; ... На уровне серверных блокировок всё перечисленное выполнить невозможно. Возможно, возможно. По крайней мере для MSSQL. Хотя и не сказать, чтобы просто. Вообще же, MasterZiv отчасти прав в том, что использование любого механизма блокировок в ИС - хоть самодельных, хоть серверных - надо начинать с тщательной минимизации возможности возникновения таких блокировок. Т.е., часто полностью избежать их нельзя, но значительно уменьшить кол-во можно. Например, в примере предложенном softwarer, для примечания вряд ли обязательно блокировать документ. Nobody faults but mine... (LZ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2005, 13:27 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1545980]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
52ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 266ms |
| total: | 400ms |

| 0 / 0 |
