Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пессимистичный параллелизм. Ожидание 
:(
    Опции темы
Darkmaster
Дата 2.6.2009, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Делаю для себя небольшой учебный пример работы с пессимистичным параллелизмом. Возникло несколько вопросов. В моей программе я блокирую конкретную строку при помощи примерно такого кода:

Код

Select * From JobTable With (HOLDLOCK) where JobId = 2


Делается это для того, чтобы в тех ситуациях, когда один пользователь открыл окно для введения данных обновляемой строки, другой пользователь не мог ее обновить. До тех пор, пока первый пользователь не сохранит свою запись. В ходе этой работы у меня возникло несколько вопросов, ответы на которые в сети не удалось найти. Буду благодарен, если поможете. Итак, вопросы:

1) В моей ситуации, когда 1-пользователь редактирует статью с JobId 2, а второй пользователь уже нажимает на кнопку "Сохранить", отредактировав статью с JobId 2 программа немного подвисает. Запись, конечно, не обновляется. В Exception выдается информация о том, что время ожидания прошло. Такой вопрос: стоит ли так поступать или есть какая-то возможность сделать так, чтобы программа сразу же понимала, что такая-то строка заблокирована и ее уже не обновить?

2) Мне кажется, что было бы лучше если в программе была возможность сделать так, чтобы в случае Holdlock строки он не мог даже открыть окно редактирования. Т.е. чтобы каким то-то образом при запросе Select или перед ним строка проверялась на доступность. Возможно ли такое?

--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
jonie
Дата 2.6.2009, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 8
Всего: 118



на мой взгляд в .net так не принято. принято данные кешировать на клиенте и уже потом в базу пихать. Есть даже ADO.NET Sync Framework....

Цитата
 Такой вопрос: стоит ли так поступать или есть какая-то возможность сделать так, чтобы программа сразу же понимала, что такая-то строка заблокирована и ее уже не обновить?

наверно перед редактированием вставлять datetime начала редактирования, а при сохранении клиентом1 считывать её и сравнивать с той, что была на момент чтения (в то время второй клиент прочтет дату, сравнит её с getdate()+timeout и если она еще не вышла за таймаут скажет "запись редактируется", иначе перезапишет данные) ...
---
у нас в системе было вообще хитро сделано: обновление шло через процедуру, и sql сервер внутри этой процедуры оповещал клиентов  по TCP (свой протокол был) об изменениях... ужасно геморойно.




--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
SLeN
Дата 2.6.2009, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 8.12.2006
Где: SPB

Репутация: 1
Всего: 4



ИМХО:

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

=>

1. увеличить время ожидания до рационального
2. в этом поможет уровень изоляции транзакции мсдн линк

P.S:
Никогда не использовал Pessimistic Concurrency так что реального опыта не имею
--------------------
Православные не проходите мимо! Люди нуждаются в вас
PM MAIL   Вверх
Darkmaster
Дата 3.6.2009, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Спасибо за ответы.

Пошел читать инфу по Sync Framework
--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0426 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.