Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
https://www.sql.ru/forum/actualthread.aspx?bid=1&tid=984093&hl= Так и не сдвинулись с места?
|
||||||||||
15 апр 13, 18:17 [14183583] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
У вас все пользователи пишут результаты в одну таблицу ? Или результаты поиска каждого из пользователей не должны содержать пересекающиеся данные ? |
||
15 апр 13, 18:22 [14183599] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
wizzard2009, И, кстати, вы оценивали ресурсоемкость расчета? Может гораздо эффективнее будет не городить огород с кешированием? |
15 апр 13, 19:07 [14183793] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |