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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> One or Zero to One or Zero 
:(
    Опции темы
Gluttton
Дата 27.9.2010, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

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



Zloxa, ну все-таки хотельсь бы получить решение поднятой в топике проблемы.

Цитата(Zloxa @  27.9.2010,  11:51 Найти цитируемый пост)
Искуственно раскидывать блокировки,избавляясь от конкурентности сериализуя транзакции,  пытаясь избегать дедлоков.

Прочитал пару раз, но знакомых слов так и не нашел smile , изложи пожалуйста мысль более доступно.


--------------------
Слава Україні!
PM MAIL   Вверх
Irdis
Дата 27.9.2010, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я решил проблему для приложения(которое использует БД) с помощь Entity Framework. Сделав в бд отношение 1 ко многим (а_id int NULL в таблице B). А на стороне приложения с помощью Entity Framework'a ограничил многих как 0..1. 
Но понятно, что любое другое приложение может поломать логику работы с БД(да и руками можно за инсертить не валидные данные). И это вообще не решение.

Цитата

ну все-таки хотельсь бы получить решение поднятой в топике проблемы.

+++
PM MAIL   Вверх
Zloxa
Дата 27.9.2010, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(Gluttton @  27.9.2010,  20:15 Найти цитируемый пост)
Zloxa, ну все-таки хотельсь бы получить решение поднятой в топике проблемы.

Я его не знаю. Я очень давно работал с MS SQL и плохо помню его особенности.

Наверно таки придется в триггере проверять наличие повторяющихся значений. Но чего это будет стоить - я пока до конца не обмозговал. Я начал было на работе эксперементировать, но рабочий день внезапно кончился.. Тут не маловажный ньюанс,  что триггер работает в режиме изоляции вызывающей транзакции, а потому надо обмозговать поведение всех вариаций. В режиме рид коммитед поиск повторяющихся значений должен бы встать на блокировке по конкурентой записи. Мне кажется тут могут случаться дедлоки. В режиме грязных чтений, могут случаться фиктивные срабатывания ограничения - две сессии попытаются вставить одинаковые значения, и каждая получит отлуп. 
Обе эти жопы приводят к тому, что пишущие сессии получают не обоснованный отлуп, но нарушающего ограничения говна в базе не остается, что уже не плохо.
Единственно - читающая грязными чтениями сессия может захватить ненароком данные, которые будут откатаны. Но это обычный риск гразных чтений.

Цитата(Gluttton @  27.9.2010,  20:15 Найти цитируемый пост)

Прочитал пару раз, но знакомых слов так и не нашел  , изложи пожалуйста мысль более доступно. 

наверное это имеет смысл делать в отдельной теме, да на конкретном примере.
Потому как то, о чем я говорил характерно таки для версионников.
Версионники не блокируют чтение, потому проверка в триггере на наличие дубликатов, в случае если есть незакомиченные другой транзакцией данные не даст фейла.
например 
Код

1)транзакция 1: insert into table values (1)
2)транзакция 1:-- проверка наличия дубликатов запускается из after statement триггера
  if exists (select 1 from table where val = 1 having count(*)>1) -- вернет фолс потому как в таблице еще нет данных второй транзакции
3)транзакция 2: insert into table values (1)
4)транзакция 2:-- проверка наличия дубликатов запускается из after statement триггера
  if exists (select 1 from table where val = 1 having count(*)>1) -- вернет фолс потому как в таблице еще нет данных первой транзакции
5)транзакция 1: commit
6)транзакция 2: commit

В результате имеем две единицы в табличке, наше ограничение не работает.
Блокировочник, в режиме read commited,  на шаге 4 должен бы встать на блокировке, потому как есть незакоммиченный инсерт этого значения. На версионнике блокировок по чтению не бывает, их придется колдовать. В окакле для этих целей есть select... for update, в FB, тоже должно быть чтото вроде. Начнешь колдовать блокировки - надо будет както разруливать ситуацию последовательного их захвата, чтобы избегать взаимоблокировок процессов(дедлоков). на данном примере сложно показать, так как тут ребуется захват лишь одного ресурса (таблицы) и вообще, для FB, и Oracle эта задача интереса не представляет.. я ж грю это вопрос для отдльной темы.


Это сообщение отредактировал(а) Zloxa - 27.9.2010, 23:33


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Gluttton
Дата 27.9.2010, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

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



Zloxa, 
Цитата(Zloxa @  27.9.2010,  23:24 Найти цитируемый пост)
я ж грю это вопрос для отдльной темы

Буду рад видеть smile .


--------------------
Слава Україні!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

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

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


 




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


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

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