powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Долгие транзакции - Короткие транзакции
62 сообщений из 62, показаны все 3 страниц
Долгие транзакции - Короткие транзакции
    #32953912
Marat_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот такая у нас ситуация:

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

А говорят - как-то можно открывать транзакцию только в момент сохранения документа. Пока документ просто открыт - никаких транзакций нет.

Говорят - это лучше, но как тогда дать другому понять, что документ занят?
Мы как раз блокируем его в транзакции.

Поделитесь опытом, если не жалко.
:)

Жизнь коротка - потерпи немного :)
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32953937
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marat_L пишет:

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

Так делать нельзя.

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

Отдельный механизм блокирования. Например таблица блокировок и процедура
типа LockObject(ObjType, ObjId), которая либо заносит блокировку, либо
ругается, что такая уже есть. Делается элементарнейше!
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32954007
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще говоря, как я понимаю, зависит от базы и от бизнес-правил. Например, если Oracle, который блокирует с точностью до 1 строки и при этом другой пользователь НИ В КОЕМ СЛУЧАЕ не должен в это время менять эту строку - тогда можно блокировать в начале транзакции и не заморачиваться с доп. механизмами. Если база блокирует не 1 строку, а, например, целый блок, или если допустимо изменять этот документ другими пользователями, пока данный user редактирует документ - тогда блокировка непосредственно перед записью или наворачивание доп. механизмов над стандартными механизмами самой базы
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32954213
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Говорят - это лучше, но как тогда дать другому понять, что документ занят?

Занят - для чтения или для записи или для того и для другого?


Если последний вариант - то у вас все правильно реализовано
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32954703
Marat_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр Гoлдун
Отдельный механизм блокирования. Например таблица блокировок и процедура
типа LockObject(ObjType, ObjId), которая либо заносит блокировку, либо
ругается, что такая уже есть. Делается элементарнейше!

Я пожалуй попробую сделать именно так.
А что если клиент заблокирует документ и зависнет/отвалится?
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32954726
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну войдет клиент заново и снимет блокировку. Надо предусмотреть возможность, чтобы блокировку мог снять либо ее автор, либо администратор системы.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32954935
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут ответ на ваш вопрос:
ADO & SQL Server , блокировка записей
авторА что если клиент заблокирует документ и зависнет/отвалится?
И на этот тоже.


-- Tygra's --
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32954941
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и конечно транзакции нужно делать как можно менее короткими. А лучше их с клиента вообще не открывать по возможности.

-- Tygra's --
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32954959
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А откуда их открывать, скажите плиз?По поводу коротких - это у Вас в MS SQL.Транзакция должна быть сколь угодно нужной. Надеюсь, мы с Вами не путаем транзакцию в БД и бизнес-транзакцию?!
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32955075
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторГоворят - это лучше, но как тогда дать другому понять, что документ занят? Мы как раз блокируем его в транзакции.
Ужас ! Мазохизм и извращение !
Не знаете как дать понять, что документ занят ? Дык сто раз уже обсосали эту тему !
Ведите отдельную т-цу для списка занятых д-тов. Перед попыткой редактирования д-та запускайте процедуру проверки занятости. Если док. не занят, то пр-ра записывает Вас+№док в список (обязательно с SPID вашего серверного процесса) и возвращает ответ : "Редактируй".
Если док. уже редактируется, то пр-ра возвращает "занято таким-то". По выходу из док-та выз. пр-ра для очистки Вас из списка. В этой же пр-ре очищаются все записи у кот. процессы не существуют на данный момент т.е. отвалившиеся пользователи. Всё просто реализуется и всё быстро и надёжно работает. Не мешает просто просматривать редактируемый д-т. Легко переделать под полную монополию на д-т.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32955192
Фотография Vadim_Maximov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSV авторГоворят - это лучше, но как тогда дать другому понять, что документ занят? Мы как раз блокируем его в транзакции.
Ужас ! Мазохизм и извращение !
Не знаете как дать понять, что документ занят ? Дык сто раз уже обсосали эту тему !
Ведите отдельную т-цу для списка занятых д-тов. Перед попыткой редактирования д-та запускайте процедуру проверки занятости. Если док. не занят, то пр-ра записывает Вас+№док в список (обязательно с SPID вашего серверного процесса) и возвращает ответ : "Редактируй".
Если док. уже редактируется, то пр-ра возвращает "занято таким-то". По выходу из док-та выз. пр-ра для очистки Вас из списка. В этой же пр-ре очищаются все записи у кот. процессы не существуют на данный момент т.е. отвалившиеся пользователи. Всё просто реализуется и всё быстро и надёжно работает. Не мешает просто просматривать редактируемый д-т. Легко переделать под полную монополию на д-т.
Тяжело приходится людям, у которых нет select for update nowait...
Приходится фактически реализовывать PMON
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32955237
Marat_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LSVУжас ! Мазохизм и извращение !
Не знаете как дать понять, что документ занят ? Дык сто раз уже обсосали эту тему !
Ведите отдельную т-цу для списка занятых д-тов. Перед попыткой редактирования д-та запускайте процедуру проверки занятости. Если док. не занят, то пр-ра записывает Вас+№док в список (обязательно с SPID вашего серверного процесса) и возвращает ответ : "Редактируй".
Если док. уже редактируется, то пр-ра возвращает "занято таким-то". По выходу из док-та выз. пр-ра для очистки Вас из списка. В этой же пр-ре очищаются все записи у кот. процессы не существуют на данный момент т.е. отвалившиеся пользователи. Всё просто реализуется и всё быстро и надёжно работает. Не мешает просто просматривать редактируемый д-т. Легко переделать под полную монополию на д-т.

Спасибо - это то что мне нужно!!!
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32955277
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim_MaximovТяжело приходится людям, у которых нет select for update nowait...
Приходится фактически реализовывать PMON
Гм, вроде как разговор идет о том, чтобы запретить пользователю открыть для изменения документ, который в это время изменяется другим пользователем. То есть если мы повесим шаред-блокировку, то считать и открыть для изменения его можно будет. Если эклюзивную, то все пользователи, которые бы просто хотели сделать отчет по данным запнуться на этом документе, хотя он вроде бы пока только изменяется на клиенте и в БД изменения не подтверждены. Так что обьясните пожалуйста, чем "select for update nowait" может помочь обойти вышеперечисленные условия и ограничения ?
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32955343
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ничего они не загнутся. SELECT нормально отработает.Просто в данной вещи select for update не нужен, как я уже говорил, у нас случай транзакции бизнес-уровня. Документ можно заблокировать дня так на 2 и коннект то для этого не надо держать.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32955350
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select for update и есть shared-блокировка, тем более в Оракле без желания нет блокировок по чтению.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32955360
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то все пользователи, которые бы просто хотели сделать отчет по данным запнуться на этом документе

Если конкретно по Oracle, то там "писатели" не мешают "читателям". "Читатели" просто видят старую версию из UNDO
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32955376
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shtockselect for update и есть shared-блокировка, тем более в Оракле без желания нет блокировок по чтению.

Не совсем так. При операциях UPDATE (в том числе и SELECT FOR UPDATE) на строку накладывается эксклюзивная блокировка, а на таблицу - shared. А для бизнес-блокировки на несколько дней можно ведь использовать и поле статуса документа
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32955586
Фотография Vadim_Maximov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS Vadim_MaximovТяжело приходится людям, у которых нет select for update nowait...
Приходится фактически реализовывать PMON
Гм, вроде как разговор идет о том, чтобы запретить пользователю открыть для изменения документ, который в это время изменяется другим пользователем. То есть если мы повесим шаред-блокировку, то считать и открыть для изменения его можно будет. Если эклюзивную, то все пользователи, которые бы просто хотели сделать отчет по данным запнуться на этом документе, хотя он вроде бы пока только изменяется на клиенте и в БД изменения не подтверждены. Так что обьясните пожалуйста, чем "select for update nowait" может помочь обойти вышеперечисленные условия и ограничения ?
Поясняю: если при открытии документа блокировать его через select for update nowait , то при при открытии этого же документа следующим пользователем (и соответственно попытке блокирования его), второй пользователь получит отлуп. А приложению останется просто правильно обработать исключение.
При этом простые селекты по данному документу спокойно считают старые версии блоков из UNDO.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32962356
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marat_L
А говорят - как-то можно открывать транзакцию только в момент сохранения документа. Пока документ просто открыт - никаких транзакций нет.


Ага, "Мама, а говорят, есть такие червячки, которые в яблоках живут, это правда ?"

Marat_L
Говорят - это лучше, но как тогда дать другому понять, что документ занят?


А никак. Зачем это нужно вообще ? FoxPro с клиппером покоя не дают ?

Marat_L
Мы как раз блокируем его в транзакции.


Не, ну если у вас Interbase или Oracle - пожалуйста, кто ж мешает.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32962382
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marat_L LSV
Ведите отдельную т-цу для списка занятых д-тов. Перед попыткой редактирования д-та запускайте процедуру проверки занятости. Если док. не занят, то пр-ра записывает Вас+№док в список (обязательно с SPID вашего серверного процесса) и возвращает ответ
...

Спасибо - это то что мне нужно!!!


Я полагаю, что это - именно то, что тебе ( и большинству других) АБСОЛЮТНО НЕ НУЖНО. Это вообще никому не нужно.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32962674
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое правильно на мой взгляд решение таких проблем сделано в PowerBuilder. Для изменяемых и удаляемых записей там можно поставить генерить UPDATE и DELETE в разделе WHERE не только по ключевому полю, но и по всем (перечисленным) полям. В итоге например, после изменения записи PB генерит примерно такой запрос:
Код: plaintext
1.
2.
UPDATE Table
SET Field = :New_FieldValue
WHERE ID = :Original_ID AND Field = :Old_FieldValue
а далее проверяет @@ROWCOUNT и если она не равна единице, генерирует ошибку о том, что сохраняемая запись не соответствует записи в базе данных, т.е. возможно была изменена или удалена другим пользователем. IMHO такой подход более правильный, чем попытка какой либо блокировки записей при изменении их на клиенте, что изначально противоречит парадигмам разработки клиент-серверных приложений.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32962689
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS

Это есть optimistic locking. Реализовано почти где угодно и лучше не через все поля, а через одно - timestamp
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32962719
Sergey_SK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to ASCRUS
это решение не совсем той проблемы о которой реч.
Поясню примером:
Чел открыл счёт чтобы проверить его и принять оплату, открыл и ушёл пить чай. Пока он пил чай ему в счёт ещё с пол сотни позиций добавили.
Пришёл он и жмёт оплата принята, а счёт то уже не тот.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32963098
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_SKto ASCRUS
это решение не совсем той проблемы о которой реч.
Поясню примером:
Чел открыл счёт чтобы проверить его и принять оплату, открыл и ушёл пить чай. Пока он пил чай ему в счёт ещё с пол сотни позиций добавили.
Пришёл он и жмёт оплата принята, а счёт то уже не тот.
Кто же мешает в клиент сделать проверку перед принятием оплаты состояния счета между открытыми на клиенте данными и существующими на сервере с выдачей предупреждения об изменениях на сервере и перечитыванием актуальных данных ?
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32963303
Sergey_SK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to ASCRUS
Я вот тоже так думаю, это будет лучше чем открывать транзакцию при открытии документа и закрывать при его закрытии.
Только вот документы могут быть уж очень не простыми и лучше
завести таблицу:
IDДокумента uniqueidentifier
IDСостояния uniqueidentifier
Менять IDСостояния при каждом изменениии документа и по этой ментке ориентироваться устарел открытый документ у клиента или нет.

MasterZiv
Я полагаю, что это - именно то, что тебе ( и большинству других) АБСОЛЮТНО НЕ НУЖНО. Это вообще никому не нужно.

to MasterZiv
ваши предложения?
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32963470
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSВ итоге например, после изменения записи PB генерит примерно такой запрос:
У этого подхода также есть недостатки. Наиболее для меня неприятный - он плохо совместим с желанием чего-то нетривиального. Например, UpdateSQL в дельфе мне пришлось специально отучать от проверки на ROWCOUNT - поскольку как только я захотел менять больше чем одну таблицу, проверка стала возвращать "не то". Другой аспект - зависимости и траффик. Если тянуть на клиента все поля таблицы - получаем большой избыточный траффик. Если нужные - "прозеваем" изменение других полей, из-за чего может возникнуть рассогласование. Вариант наличия гигабайтных блобов тоже заслуживает внимания :)

В целом - я не вижу, что же именно в этом "правильного". Особенно если вспомнить о классическом недостатке - aka "я сделал кучу работы, а теперь ее потеряю".

ASCRUSподход более правильный, чем попытка какой либо блокировки записей при изменении их на клиенте, что изначально противоречит парадигмам разработки клиент-серверных приложений.
Можно поподробнее - формулировку парадигмы и место противоречия?

P.S. Имхо, клиент-серверная парадигма - частный случай общей ООП-парадигмы. Есть объекты (сервер и клиент), которые решают свои задачи и обмениваются сообщениями. Одно из таких сообщений - "дай для просмотра", другое - "дай для изменения". Никаких коллизий не вижу.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32963565
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 softwarer
поддерживаю.

Вообще очень-очень плохо когда средства разработки влияют навязывают определенный подход к разработке пользовательского интерфейса. В идеале было бы неплохо если б сервер бд поддерживал и грязное чтение, и версионность одновременно. (в разных случаях разные подходы выигрывают)
а в случае разработки клиентского приложения... я для себя так например давно определился - нет ничего лучше чем С++/Embedded SQL. Тем кто юзает MSSQL/Sybase этого просто не понять.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32963929
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenman2 softwarer
поддерживаю.

Вообще очень-очень плохо когда средства разработки влияют навязывают определенный подход к разработке пользовательского интерфейса. В идеале было бы неплохо если б сервер бд поддерживал и грязное чтение, и версионность одновременно. (в разных случаях разные подходы выигрывают)
а в случае разработки клиентского приложения... я для себя так например давно определился - нет ничего лучше чем С++/Embedded SQL. Тем кто юзает MSSQL/Sybase этого просто не понять.
Нет, после PowerBuilder/DataWindow Expression/Embedded SQL однозначно не понять :)
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32963952
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ASCRUS
Хорошая тема для флейма: С++ via PowerBuilder via Delphy
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32963979
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenman2 ASCRUS
Хорошая тема для флейма: С++ via PowerBuilder via Delphy
PowerBuilder строго заточен только под БД: создание клиентских интерфейсов и 3-х звенок, больше он ничего не умеет. Так что флеймить особо не о чем, тема получится из разряда, что лучше "Все в одном или строго ориентированно". Я например PB использую для создания интерфейсных мордочек, Delphi предпочитаю пользоваться для создания компонент/серверов/движков (вот только что закончил тестирование самописного COM-сервера на базе FastReport с его обвязкой для использования в PowerBuilder и вполне остался доволен связкой PB[ООП] + Delphi[COM]).
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32964028
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS

Еще раз напомню что оптимистическую блокировка реализована далеко не только у Power Builder

softwarer

Чтобы не посылать туда-сюда все поля придуман timestamp
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32964243
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ASCRUS
Жаль что мы в разных городах, а то можно было бы посравнивать реализацию простеньких задач на PB и С++, по производительности и по удобству пользовательского интерфейса...
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32964393
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenman2 ASCRUS
Жаль что мы в разных городах, а то можно было бы посравнивать реализацию простеньких задач на PB и С++, по производительности и по удобству пользовательского интерфейса...
Ну удобство интерфейса зависит только от DirectHand.sys, а не от того, на чем сделано :) А производительность в мордочках для клиентов для меня вообще не знакомое понятие - чего там производить то ? :) В цикле миллион окошек виндоус открыть что ли ? Ну а если брать производительность работы с данными на 3-ем звене, так DataWindow Engine писался еще в те времена, когда РСУБД умели только хранить данные и вся тяжесть работы по их обработки частенько ложилась именно на PB. Так что здесь у них движок оптимизирован по самое не хочу, хотя я предпочитаю грязную и тяжелую работу отдавать на откуп РСУБД, используя PB только для просмотра и изменения данных.

И даже если сравнивать трудозатраты на рисование интерфейса с нуля и с набором своих библиотек/классов/компонент, то окажется, что в последнем случае скорость создания прикладух на тех же Си, Delphi, Java и PowerBuilder фактически одинакова. Все поддерживают ООП, создание визуальных компонент, повторное наследование форм и т.д, простор автоматизации самого себя любимого крайне широк в них. Так что тут опять сравнивать нечего.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32964488
Yo!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yo!
Гость
авторНу удобство интерфейса зависит только от DirectHand.sys, а не от того, на чем сделано :) А производительность в мордочках для клиентов для меня вообще не знакомое понятие - чего там производить то ? :) В цикле миллион окошек виндоус открыть что ли ?

ASCRUS, раз пошла такая пьянка, может вы и мне DirectHand.sys вправите, а то вот ну никак не могу найти машину на которой не тормозит java swing ;)
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32964640
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo! авторНу удобство интерфейса зависит только от DirectHand.sys, а не от того, на чем сделано :) А производительность в мордочках для клиентов для меня вообще не знакомое понятие - чего там производить то ? :) В цикле миллион окошек виндоус открыть что ли ?

ASCRUS, раз пошла такая пьянка, может вы и мне DirectHand.sys вправите, а то вот ну никак не могу найти машину на которой не тормозит java swing ;)
Ну Вы же Ораклист, должны знать, что проблемы производительности мощных систем элементарно решаются путем наращивания аппаратных ресурсов ;)

Ну а если серьезно, то я считаю что DirectHands.sys нужно править тем, кто пытается на Java GUI рисовать без достаточного на то основания. Например, Sybase ASA начинает крутить небольшие БД уже с 2 метров выделенной памяти. А вот ее универсальная консоль управления с поддержкой плагинов Sybase Central (аналог MMC) красивая и удобная написана на Java и если на машине меньше 128 метров, то можно часто и долго любоваться работой сборщика мусора. Вот такой вот парадокс :) Я конечно понимаю, что кроссплатформенной СУБД нужны кроссплатформенные визуальные утилиты, однако мне почему то кажется, что разрабатывать и админить БД/СУБД народ предпочитает с Windows, вне зависимости от того, на чем сейчас СУБД крутиться. Для таких вещей конечно C++ был бы гораздо предпочительнее.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32964668
Yo!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yo!
Гость
авторНу Вы же Ораклист, должны знать, что проблемы производительности мощных систем элементарно решаются путем наращивания аппаратных ресурсов ;)

это не про свинг :)
а central который я видел для 12-го ase был на awt, т.е. есть куда рости :)
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32965220
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- доктор, меня все игнорируют
- следующий
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32965481
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri softwarer

Чтобы не посылать туда-сюда все поля придуман timestamp
Я согласен с тем, что это лучше нежели "реализованное в PowerBuilder-е".

У timestamp остается неприятная деталь - необходимость всюду совать техническое поле. Более существенно - не представляю, как я объяснял бы пользователю, что произошел конфликт и работу за последние полчаса он должен выкинуть в помойку, поскольку сохранить ее программа не даст.

Имхо - этот подход необходимо сочетать с reconsile. Но это уже несколько другой класс решений.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32965892
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_SK

MasterZiv
Я полагаю, что это - именно то, что тебе ( и большинству других) АБСОЛЮТНО НЕ НУЖНО. Это вообще никому не нужно.

to MasterZiv
ваши предложения?

Не быть слишком умным и не придумывать всякую ерунду. В 90% реальных задач блокирование документа на время его "рассмотрения" пользователем не нужно. Некорректность сохранения пользователем документа (строки(-ок) таблиц) поверх ранее произведенного изменения в том виде, в котором он его прочитал и уведел (и, видимо, посчитал правильным) - весьма спорна.
Так что не фиг создавать себе кучу проблем на ровном месте.
А если это реально нужно - реализация внетранзакционных блокирово уровня приложения достаточно проста и прозрачна, чтобы ее обсуждать. Варианты какжется предлагались, если нет - в сети их описано достаточно много.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32965908
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНекорректность сохранения пользователем документа (строки(-ок) таблиц) поверх ранее произведенного изменения в том виде, в котором он его прочитал и уведел (и, видимо, посчитал правильным) - весьма спорна.
Хм. Бухгалтер проставил документу признак "оплачен". В это же время продавец, кладовщик или еще кто-нибудь, пыхтя, заносит в поле "комментарий" жутко полезную информацию, типа "не забыть на завтра выписать пропуск".

Клиент, приехавший завтра на грузовике, с интересом узнает, что его счет не оплачен (и отгрузки не будет) из-за спорной некорректности того, что не нужно в 90% случаев. Видимо, он очень рад и проникается ощущением истинной мудрости гуру от программирования.

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

Вопрос, конечно, в реализации этой физической блокировки. Как уже сказал Вадим - если реализовано плохо, приходится придумывать собственный PMON.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32966218
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интересно, а в какой ситуации кто-то может не знать о логической блокировке?
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32966229
Yo!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yo!
Гость
>Если блокировку все равно надо делать - физическая удобнее. Потому как во-первых удобнее использовать, а во-вторых не будет проблем с теми, кто не знает о существовании логической блокировки.

но зато нет проблем с web/wap клиентами у которых на каждый чих новая сесия
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32966514
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Old Nickинтересно, а в какой ситуации кто-то может не знать о логической блокировке?
О логической блокировке знают только те, кому о ней сказали. Соответственно, можно быть 100% уверенным, что о ней кто-то не знает. Соответственно, надежна она только если доступ к данным перекрыт и абстрагирован - например, appserver-ом. В этом случае проблемой остается только ситуация "нашему специалисту надо поправить в вашей базе..."

Yo!но зато нет проблем с web/wap клиентами у которых на каждый чих новая сесия
Средство героической борьбы с собственноручно созданными трудностями?

Безусловно, в таких условиях строчные блокировки неудачны. Правда, лично мне в таких условиях сразу захотелось бы сделать appserver или еще что-нибудь, что позволит избежать такого идиотизма, как ежесекундные реконнекты.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32966534
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer

реконектов не будет - будет возвращение соединения в пул
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32966591
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuriреконектов не будет - будет возвращение соединения в пул
Зависит от. Для этого необходим хотя бы минимальный промежуточный слой - возможно, присутствующий по умолчанию, но тем не менее. Но в целом - наличие пула соединений безусловно вынудит придумывать собственные блокировки - пока что, насколько я в курсе, сервера БД не имеют достаточной поддержки для этого режима.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32966653
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
в том-то и дело! СУБД имеют только один вариант реализации транзакций - он хорошо развит и применим во многих случаях.

НО транзакции - это просто требования к работе. И реализовывать их можно по-разному - к сожалению руками.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32966817
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri softwarer
в том-то и дело!.....
Я бы сказал несколько иначе. Механизм транзакций - как он реализован - покрывает все мыслимые потребности. По крайней мере, никто пока что не называл мне ситуции, где мне не хватило бы стандартных транзакционных возможностей.

Текущий недостаток БД - неумение держать маленький и эффективный контекст транзакции и переключаться между ними внутри сессии; если угодно - реализации пула на уровне сервера БД. Oracle делает такую попытку (MTS), но, насколько я понимаю, это не то чтобы принципиальный прорыв, поскольку сохраняемый контекст оказывается вовсе не "маленьким и эффективным". Поэтому пул - а значит и все задетые им механизмы - и выезжают из сервера туда, где им вряд ли лучшее место.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32966858
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer

Я согласен! Но, хотя я и не хочу сейчас говорить формально, текущая реализация транзакций в РСУБД оптимизирована для какой-то одной стратегии. Обычно это пессимистическое блокирование всех используемых ресурсов в зависимости от уровня изоляции. Такой сценарий наиболее востребован, хотя и не всегда. Вариант с долгими транзакциями - это один из таких случаев.
Второй - это отсоединенная обработка (то для чего вы предлагаете использовать контексты).

Можно все это по-разному называть, но, imho, в этой области еще много чего стоит сделать, как с теоретической, так и практической точек зрения.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32966900
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuriтекущая реализация транзакций в РСУБД оптимизирована для какой-то одной стратегии. Обычно это пессимистическое блокирование всех используемых ресурсов в зависимости от уровня изоляции.
Вот это я не совсем понял. Оптимистическая блокировка в транзакциях реализуется ничуть не хуже пессимистической - разве что нет готовой поддержки. Версионники, конечно, могли бы дать здесь инструмент контроля изменений, более удобный чем ручной timestamp.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32966914
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оптимистическая блокировка в транзакциях реализуется ничуть не хуже пессимистической

Самим ядром СУБД она никак не реализуется. Т.е. это вне его компетенции. А timestamp - это уход от философии разделения внутреннего и внешнего представления данных. Т.е. это зависимость от данных! Вот примерно о чем я говорю
Код: plaintext
1.
2.
3.
4.
begin tran (optimistic, read commited)
...

commit tran
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32967210
beginner123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 MasterZiv:
авторА если это реально нужно - реализация внетранзакционных блокирово уровня приложения достаточно проста и прозрачна, чтобы ее обсуждать. Варианты какжется предлагались, если нет - в сети их описано достаточно много.

А можно хотя бы пару ссылок на реализацию "внетранзакционных блокировок уровня" ?
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32967858
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuriОптимистическая блокировка в транзакциях реализуется ничуть не хуже пессимистической
Самим ядром СУБД она никак не реализуется.
В ней по большому счету нечему реализоваться ядром СУБД. Для этого надо пойти в сторону Access, PowerBuilder или других средств автогенерации SQL-я.

Грубо говоря,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
-- пессимистическая блокировка
select * from mytab where id = :id for update wait  5  ;
....
update mytab set value = :newvalue where id = :id ;
commit ;

-- оптимистическая блокировка
select * from mytab where id = :id
....
update mytab set value = :newvalue where id = :id and value = :oldvalue ;
if sql%notfound 
  then raise_application_error ( - 20100 , 'Облом' ) ; 
  else commit ;
end if ;

Единственное, что могла бы база - заменить последнее на что-нибудь типа

Код: plaintext
1.
2.
update /*+ IF_NOT_CHANGED */ mytab set value = :newvalue where id = :id ;
commit ;

Было бы удобно, не спорю.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32969094
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PB генерит запрос только на изменившиеся записи/поля, поэтому если я у 2 записей изменил 2 разных поля, то для каждой записи будет соотвествующий UPDATE только на изменившиеся поля, а в WHERE помимо ID будут поставлены на сравнение со старыми значениями эти поля или все, которые я явно указал для DataWindow. Вообще в PB на DataWindow достаточно много настроек модели поведения сохранения информации в БД, вплоть до изменения ключевого поля. Если же ничего из предложенных вариантов не устраивает, PB всегда можно попросить проводить изменения через собственные ХП. По моему тут достаточно простора для потребностей и фантазии.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32969122
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS

угу - только в where все равно будут ВСЕ поля... Иначе никакого смысла в этом нет
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32969139
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri ASCRUS

угу - только в where все равно будут ВСЕ поля... Иначе никакого смысла в этом нет
В WHERE будет в зависимости от выбранной опции:
Key columns

Key and Updateable columns

Key and Modified columns
Нужные поля можно ручками включить в список "Updateable columns" для соотвествующе выбранного режима.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32969148
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну 1 - это понятно, 2 - о чем я и говорю, 3 - вот его практическое назначение для меня загадка :)
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32970950
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSPB генерит запрос только на изменившиеся записи/поля, поэтому если я у 2 записей изменил 2 разных поля, то для каждой записи будет соотвествующий UPDATE только на изменившиеся поля, а в WHERE помимо ID будут поставлены на сравнение со старыми значениями эти поля
Это замечательный путь к рассогласованию данных внутри одной записи.

ASCRUSили все, которые я явно указал для DataWindow.
А к этому относятся те минусы, о которых я говорил.

ASCRUSВообще в PB на DataWindow достаточно много настроек модели поведения сохранения информации в БД, вплоть до изменения ключевого поля.
Хм. Это по-моему, рядовое требование.

ASCRUS Если же ничего из предложенных вариантов не устраивает, PB всегда можно попросить проводить изменения через собственные ХП. По моему тут достаточно простора для потребностей и фантазии.
Хм. Речь, кажется, идет не о преимуществах использования PB :)
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32970963
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri3 - вот его практическое назначение для меня загадка :)
3 - это путь "минимальной блокировки" в абсолютно нормализованной базе. В этом случае максимальна вероятность итогового успеха, поскольку две сессии могут в параллель редактировать разные поля записи. Цена этого - очень строгие требования к независимости данных.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32973177
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин....сколько слов вокруг сто раз пережёванной темы !
Притом, что это далеко не первый флейм про блокировку документов.
Делайте самодельную блокировку и Вы сможете :
* увидеть, кто и когда занял документ;
* увидеть с какой машины занят документ;
* каким именно действием занят документ;
* блокировку на определённые действия и на длительное время;
* ещё многое другое, что Вам придёт в голову :)

На уровне серверных блокировок всё перечисленное выполнить невозможно.
...
Рейтинг: 0 / 0
Долгие транзакции - Короткие транзакции
    #32973539
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVДелайте самодельную блокировку и Вы сможете :
* увидеть, кто и когда занял документ;
* увидеть с какой машины занят документ;
* каким именно действием занят документ;
...
На уровне серверных блокировок всё перечисленное выполнить невозможно.

Возможно, возможно. По крайней мере для MSSQL. Хотя и не сказать, чтобы просто.

Вообще же, MasterZiv отчасти прав в том, что использование любого механизма блокировок в ИС - хоть самодельных, хоть серверных - надо начинать с тщательной минимизации возможности возникновения таких блокировок. Т.е., часто полностью избежать их нельзя, но значительно уменьшить кол-во можно. Например, в примере предложенном softwarer, для примечания вряд ли обязательно блокировать документ.


Nobody faults but mine... (LZ)
...
Рейтинг: 0 / 0
62 сообщений из 62, показаны все 3 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Долгие транзакции - Короткие транзакции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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