Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Процедура вставки в системе с высокой степенью параллелизма  [new]
Darkness1282
Member

Откуда:
Сообщений: 5
Проходил собеседование недавно и там был такой вопрос:

In a highly concurrent system, why is it so hard to write a fool proof procedure that inserts a row into a table that wouldn’t violate any unique constraints?

Я если честно не нашёлся что ответить. Может у кого есть идеи?
1 май 19, 00:31    [21876056]     Ответить | Цитировать Сообщить модератору
 Re: Процедура вставки в системе с высокой степенью параллелизма  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
Начните с гугл-транслейта, если не смогли перевести.
1 май 19, 00:33    [21876058]     Ответить | Цитировать Сообщить модератору
 Re: Процедура вставки в системе с высокой степенью параллелизма  [new]
Darkness1282
Member

Откуда:
Сообщений: 5
Я понял вопрос. Но не знаю ответа. Потому и спрашиваю.
1 май 19, 00:46    [21876069]     Ответить | Цитировать Сообщить модератору
 Re: Процедура вставки в системе с высокой степенью параллелизма  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
Судя по названию темы -- нет, не поняли.
1 май 19, 01:06    [21876077]     Ответить | Цитировать Сообщить модератору
 Re: Процедура вставки в системе с высокой степенью параллелизма  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7210
Darkness1282
Проходил собеседование недавно и там был такой вопрос:

In a highly concurrent system, why is it so hard to write a fool proof procedure that inserts a row into a table that wouldn’t violate any unique constraints?

Я если честно не нашёлся что ответить. Может у кого есть идеи?
А какие тут идеи? Наверное на уровни изоляций намекали. Пока не закомитишь, то и не прочитаешь.
1 май 19, 01:31    [21876084]     Ответить | Цитировать Сообщить модератору
 Re: Процедура вставки в системе с высокой степенью параллелизма  [new]
Darkness1282
Member

Откуда:
Сообщений: 5
Хм. Получается, что надо использовать Serializable или UPDLOCK?

Но мне кажется всё равно невозможно полностью избавиться от взаимоблокировок. Я вижу только один способ. Это изменять всегда изменять объекты в одном и том же порядке. Что нереально.
1 май 19, 01:40    [21876085]     Ответить | Цитировать Сообщить модератору
 Re: Процедура вставки в системе с высокой степенью параллелизма  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
Darkness1282
Хм. Получается, что надо использовать Serializable или UPDLOCK?

Но мне кажется всё равно невозможно полностью избавиться от взаимоблокировок.
Каша в голове у вас. Взаимоблокировки -- это побочный эффект обеспечения конкурентного доступа к данным через блокировочный механизм. А вас не про побочные эффекты спрашивают, а про основной механизм, так сказать.

Darkness1282
Я вижу только один способ. Это изменять всегда изменять объекты в одном и том же порядке. Что нереально.
Почти любой порядок доступа к данным легко обсепечивается через очереди в любой их реализации. Но отклик будет страдать, да.
1 май 19, 01:53    [21876088]     Ответить | Цитировать Сообщить модератору
 Re: Процедура вставки в системе с высокой степенью параллелизма  [new]
Darkness1282
Member

Откуда:
Сообщений: 5
Что то я совсем запутался...Как звучал бы правильный ответ?
1 май 19, 02:06    [21876091]     Ответить | Цитировать Сообщить модератору
 Re: Процедура вставки в системе с высокой степенью параллелизма  [new]
Darkness1282
Member

Откуда:
Сообщений: 5
Перед чтением или изменением объект блокируется. То есть другим транзакциям запрещается изменять или даже читать этот объект до тех пор, пока первая транзакция не закончит с ним работать. Нужно было просто рассказать про уровни изоляции?
1 май 19, 02:08    [21876092]     Ответить | Цитировать Сообщить модератору
 Re: Процедура вставки в системе с высокой степенью параллелизма  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7210
Darkness1282
Что то я совсем запутался...Как звучал бы правильный ответ?


Ну, блин, я помню такой вопрос из практики. Констрейны-то не транзакционно проверяются сервером. У вас такого уровня доступа, чтобы програмно проверить их, как у сервера - нет.
1 май 19, 02:10    [21876093]     Ответить | Цитировать Сообщить модератору
 Re: Процедура вставки в системе с высокой степенью параллелизма  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
Darkness1282
Перед чтением или изменением объект блокируется. То есть другим транзакциям запрещается изменять или даже читать этот объект до тех пор, пока первая транзакция не закончит с ним работать. Нужно было просто рассказать про уровни изоляции?
У вас вопрос про "procedure that inserts a row", т.е. никакого объекта перед вставкой еще нет.
1 май 19, 02:42    [21876099]     Ответить | Цитировать Сообщить модератору
 Re: Процедура вставки в системе с высокой степенью параллелизма  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
Darkness1282
Что то я совсем запутался...Как звучал бы правильный ответ?
На это вопрос правильным ответом была бы демонстрация вашего опыта или хотя бы теоретических знаний в вопросах обеспечения конкурентного доступа к данным. Критерии уж уточняйте у того, кто его вам задал.

Сообщение было отредактировано: 1 май 19, 02:46
1 май 19, 02:44    [21876100]     Ответить | Цитировать Сообщить модератору
 Re: Процедура вставки в системе с высокой степенью параллелизма  [new]
Glebanski
Member

Откуда: Msk ->NL
Сообщений: 306
Darkness1282,

[q]hard to write a fool proof procedure that inserts a row into a table that wouldn’t violate any unique constraints?[/q]

Наверно потому, что никто не проверяет наличие (идентичной) записи перед вставкой, а ловят это дело постфактум - через исключение?
Автор вопроса предполагал, что в не "highly concurrent system" кто-то проверяет заранее вставляемую запись на неуникальность? Типа, в НЕнагруженной системе мы проверяем, а в нагруженной - времени нет. Странный паттерн.
1 май 19, 14:52    [21876354]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить