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

Откуда: Москва
Сообщений: 19
Друзья!
Вот такой вопрос.
Пользователь ищет тур. При этом он указывает куда едет (отель), с какой по какую дату, сколько взрослых, сколько детей, какого они возраста. Этот запрос запоминается в таблице Запросы со своим id. Далее система рассчитывает стоимость проживания на основании введенных данных и записывает результат в другую таблицу. Результаты считаются целиком для 1 отеля и записываются скопом для 1 запроса. Идея: закэшировать готовый расчет с тем, чтобы не считать одно и тоже много раз.
Таблицы
Запросы(id, дата начала, дата окончания, кол-во взрослых, кол-во детей)
РезультатыПоиска (id, id_запроса, id_отеля, id_номера, дата начала, дата окончания, цена)
Некоторые детали опустил, для упрощения вопроса.
Предположим следующее: 2 пользователя одновременно начинают поиск с одними и теми же параметрами.
Вопрос: как исключить запись в таблицу результатов одних и тех же значений?
Про транзакции читал. Но что и как блокировать (таблицу целиком, запись) - не понятно.
Далее. Как лучше это сделать (организовать вставку записей)? Скриптом веб сервера или полностью инкапсулировать логику в одной хранимой процедуре?
Например:
select @id=id from Запросы where .....
if(@id = NULL) insert into (....)
Где начинать транзакцию, где заканчивать?
Как будет вести себя другая транзакция кот. захочет обратиться к таблице?
Может сделать ограничение уникальности на все поля в таблице Запросы?
Тогда любая повторная вставка с одними и теми же параметрами просто выкинет исключение.
Но как быстро это будет работать при миллионе записей, например?
15 апр 13, 17:42    [14183378]     Ответить | Цитировать Сообщить модератору
 Re: 2 одновременных запроса на вставку и транзакции  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
https://www.sql.ru/forum/actualthread.aspx?bid=1&tid=984093&hl= Так и не сдвинулись с места?

wizzard2009
Вопрос: как исключить запись в таблицу результатов одних и тех же значений?
Навесить на таблицу ограничение уникальности, соответствующее вашим критериям "одинаковости"
wizzard2009
Про транзакции читал. Но что и как блокировать (таблицу целиком, запись) - не понятно.
Значит плохо читали или не поняли прочитанное.
wizzard2009
Где начинать транзакцию, где заканчивать?
Определяется требованиями к логической целостности бизнес-сущностей.
wizzard2009
Как будет вести себя другая транзакция кот. захочет обратиться к таблице?
Зависит от уровня изоляции обеих транзакций и типа обращения.
wizzard2009
Может сделать ограничение уникальности на все поля в таблице Запросы?
Вы сторонник "огородного" способ разработки?
15 апр 13, 18:17    [14183583]     Ответить | Цитировать Сообщить модератору
 Re: 2 одновременных запроса на вставку и транзакции  [new]
Glory
Member

Откуда:
Сообщений: 104760
wizzard2009
Предположим следующее: 2 пользователя одновременно начинают поиск с одними и теми же параметрами.
Вопрос: как исключить запись в таблицу результатов одних и тех же значений?

У вас все пользователи пишут результаты в одну таблицу ?
Или результаты поиска каждого из пользователей не должны содержать пересекающиеся данные ?
15 апр 13, 18:22    [14183599]     Ответить | Цитировать Сообщить модератору
 Re: 2 одновременных запроса на вставку и транзакции  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
wizzard2009,

И, кстати, вы оценивали ресурсоемкость расчета? Может гораздо эффективнее будет не городить огород с кешированием?
15 апр 13, 19:07    [14183793]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить