Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
listtoview Member Откуда: Сообщений: 2653 |
есть вебсервис, на который приходят http запросы если строка принята в обработку одним запросом, то другой запрос ее не должен читать просто лочить не желательно, иначе другие будут ждать как правильно сделать? |
22 апр 19, 15:30 [21868946] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37199 |
И при чем тут MSSQL? |
22 апр 19, 15:33 [21868957] Ответить | Цитировать Сообщить модератору |
listtoview Member Откуда: Сообщений: 2653 |
средствами СУБД хотелось бы сделать |
||
22 апр 19, 15:39 [21868961] Ответить | Цитировать Сообщить модератору |
Посетитель Member Откуда: Сообщений: 1210 |
и как связана СУБД с приходящими http-запросами? |
||||
22 апр 19, 15:45 [21868969] Ответить | Цитировать Сообщить модератору |
Rankatan Member Откуда: Сообщений: 250 |
с помощью READPAST это делается |
22 апр 19, 15:48 [21868975] Ответить | Цитировать Сообщить модератору |
listtoview Member Откуда: Сообщений: 2653 |
попытался описать задачу а то потом бы все равно спросили, "а зачем вам это?" |
||||
22 апр 19, 15:51 [21868982] Ответить | Цитировать Сообщить модератору |
listtoview Member Откуда: Сообщений: 2653 |
спасибо читаю |
||
22 апр 19, 15:53 [21868983] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8485 |
listtoview, можно так: 1. Открыть транзакцию клиентом. 2. Обновить в таблице блокировок поле-флаг в нужной строке =1. 3. Обработать данные. 4. Сбросить флаг =0. 5. Зафиксировать транзакцию клиентом. Другим процессом читать таблицу блокировок с READPAST, он обновленную строку не увидит и чтение не остановится. |
22 апр 19, 18:41 [21869189] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1714 |
единственно только надо уточнить что c READPAST подсказкой надо правильно проектировать читающий запрос что бы попадал на блокированные ресурсы, а то может получиться что читать будет строки которые по факту не должен. |
||
22 апр 19, 20:23 [21869258] Ответить | Цитировать Сообщить модератору |
andreymx Member Откуда: Запорожье Сообщений: 55365 |
|
||
23 апр 19, 07:20 [21869398] Ответить | Цитировать Сообщить модератору |
andreymx Member Откуда: Запорожье Сообщений: 55365 |
А что должен делать второй запрос? Ждать то не должен. Вываливаться? Ошибку генерить? |
23 апр 19, 07:22 [21869399] Ответить | Цитировать Сообщить модератору |
listtoview Member Откуда: Сообщений: 2653 |
второй запрос должен читать еще не обработанную никем строку желательно не ждать, и, желательно, не отваливаться с ошибкой |
||
23 апр 19, 10:03 [21869524] Ответить | Цитировать Сообщить модератору |
listtoview Member Откуда: Сообщений: 2653 |
да, это вебсервис по REST они могут одновременно и в большом кол-ве приходить |
||||
23 апр 19, 10:04 [21869525] Ответить | Цитировать Сообщить модератору |
listtoview Member Откуда: Сообщений: 2653 |
andreymx, есть идея добавить таблицу с PK и инсертить туда Id обрабатываемой записи кому повезет, тот и будет обрабатывать тот кто упал с ошибкой, повторит попытку ну и добавить поле InProcessing ДедаЪ осоветовал) конечно не идеальный вариант из-за эксепшена но ИМХО рабочий |
23 апр 19, 10:10 [21869530] Ответить | Цитировать Сообщить модератору |
listtoview Member Откуда: Сообщений: 2653 |
получается нужно что бы читатель блокировал и читателей и писателей и другие читатели и писатели его не ждали |
23 апр 19, 10:14 [21869534] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
если упростить
о как... READPAST уже сказали, что не подходит |
||
23 апр 19, 10:27 [21869546] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9685 |
select ... from MyTable with (updlock, readpast) |
||
23 апр 19, 10:27 [21869548] Ответить | Цитировать Сообщить модератору |
listtoview Member Откуда: Сообщений: 2653 |
и update в этом же запросе нужно что бы повторные запросы не пытались его снова прочитать |
||||
23 апр 19, 10:36 [21869558] Ответить | Цитировать Сообщить модератору |
listtoview Member Откуда: Сообщений: 2653 |
т.е. пометимть строку что она уже обработана и больше никогда к ней не возвращаться |
23 апр 19, 10:37 [21869561] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9685 |
update MyTable with (readpast) set ... output ... |
||
23 апр 19, 10:42 [21869564] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |