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

Откуда:
Сообщений: 2314
есть вебсервис, на который приходят http запросы
если строка принята в обработку одним запросом, то другой запрос ее не должен читать

просто лочить не желательно, иначе другие будут ждать

как правильно сделать?
22 апр 19, 15:30    [21868946]     Ответить | Цитировать Сообщить модератору
 Re: Пропустить уже считанную строку  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36905
И при чем тут MSSQL?
22 апр 19, 15:33    [21868957]     Ответить | Цитировать Сообщить модератору
 Re: Пропустить уже считанную строку  [new]
listtoview
Member

Откуда:
Сообщений: 2314
Гавриленко Сергей Алексеевич
И при чем тут MSSQL?

средствами СУБД хотелось бы сделать
22 апр 19, 15:39    [21868961]     Ответить | Цитировать Сообщить модератору
 Re: Пропустить уже считанную строку  [new]
Посетитель
Member

Откуда:
Сообщений: 1209
listtoview
Гавриленко Сергей Алексеевич
И при чем тут MSSQL?

средствами СУБД хотелось бы сделать


и как связана СУБД с приходящими http-запросами?
22 апр 19, 15:45    [21868969]     Ответить | Цитировать Сообщить модератору
 Re: Пропустить уже считанную строку  [new]
Rankatan
Member

Откуда:
Сообщений: 250
с помощью READPAST это делается
22 апр 19, 15:48    [21868975]     Ответить | Цитировать Сообщить модератору
 Re: Пропустить уже считанную строку  [new]
listtoview
Member

Откуда:
Сообщений: 2314
Посетитель
listtoview
пропущено...

средствами СУБД хотелось бы сделать


и как связана СУБД с приходящими http-запросами?

попытался описать задачу
а то потом бы все равно спросили, "а зачем вам это?"
22 апр 19, 15:51    [21868982]     Ответить | Цитировать Сообщить модератору
 Re: Пропустить уже считанную строку  [new]
listtoview
Member

Откуда:
Сообщений: 2314
Rankatan
с помощью READPAST это делается

спасибо читаю
22 апр 19, 15:53    [21868983]     Ответить | Цитировать Сообщить модератору
 Re: Пропустить уже считанную строку  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7663
listtoview,

можно так:
1. Открыть транзакцию клиентом.
2. Обновить в таблице блокировок поле-флаг в нужной строке =1.
3. Обработать данные.
4. Сбросить флаг =0.
5. Зафиксировать транзакцию клиентом.

Другим процессом читать таблицу блокировок с READPAST, он обновленную строку не увидит и чтение не остановится.
22 апр 19, 18:41    [21869189]     Ответить | Цитировать Сообщить модератору
 Re: Пропустить уже считанную строку  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1351
Владислав Колосов
listtoview,

можно так:
1. Открыть транзакцию клиентом.
2. Обновить в таблице блокировок поле-флаг в нужной строке =1.
3. Обработать данные.
4. Сбросить флаг =0.
5. Зафиксировать транзакцию клиентом.

Другим процессом читать таблицу блокировок с READPAST, он обновленную строку не увидит и чтение не остановится.


единственно только надо уточнить что c READPAST подсказкой надо правильно проектировать читающий запрос что бы попадал на блокированные ресурсы, а то может получиться что читать будет строки которые по факту не должен.
22 апр 19, 20:23    [21869258]     Ответить | Цитировать Сообщить модератору
 Re: Пропустить уже считанную строку  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54120
listtoview
есть вебсервис, на который приходят http запросы
если строка принята в обработку одним запросом, то другой запрос ее не должен читать

просто лочить не желательно, иначе другие будут ждать

как правильно сделать?
а эти два запроса приходят одновременно?
23 апр 19, 07:20    [21869398]     Ответить | Цитировать Сообщить модератору
 Re: Пропустить уже считанную строку  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54120
А что должен делать второй запрос? Ждать то не должен. Вываливаться? Ошибку генерить?
23 апр 19, 07:22    [21869399]     Ответить | Цитировать Сообщить модератору
 Re: Пропустить уже считанную строку  [new]
listtoview
Member

Откуда:
Сообщений: 2314
andreymx
А что должен делать второй запрос? Ждать то не должен. Вываливаться? Ошибку генерить?

второй запрос должен читать еще не обработанную никем строку
желательно не ждать, и, желательно, не отваливаться с ошибкой
23 апр 19, 10:03    [21869524]     Ответить | Цитировать Сообщить модератору
 Re: Пропустить уже считанную строку  [new]
listtoview
Member

Откуда:
Сообщений: 2314
andreymx
listtoview
есть вебсервис, на который приходят http запросы
если строка принята в обработку одним запросом, то другой запрос ее не должен читать

просто лочить не желательно, иначе другие будут ждать

как правильно сделать?
а эти два запроса приходят одновременно?

да, это вебсервис по REST
они могут одновременно и в большом кол-ве приходить
23 апр 19, 10:04    [21869525]     Ответить | Цитировать Сообщить модератору
 Re: Пропустить уже считанную строку  [new]
listtoview
Member

Откуда:
Сообщений: 2314
andreymx,

есть идея добавить таблицу с PK
и инсертить туда Id обрабатываемой записи
кому повезет, тот и будет обрабатывать
тот кто упал с ошибкой, повторит попытку
ну и добавить поле InProcessing

ДедаЪ осоветовал)

конечно не идеальный вариант из-за эксепшена
но ИМХО рабочий
23 апр 19, 10:10    [21869530]     Ответить | Цитировать Сообщить модератору
 Re: Пропустить уже считанную строку  [new]
listtoview
Member

Откуда:
Сообщений: 2314
получается
нужно что бы читатель блокировал и читателей и писателей
и другие читатели и писатели его не ждали
23 апр 19, 10:14    [21869534]     Ответить | Цитировать Сообщить модератору
 Re: Пропустить уже считанную строку  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
если упростить
listtoview
получается
нужно что бы читатель блокировал читателей
и другие читатели его не ждали

о как...


READPAST уже сказали, что не подходит
23 апр 19, 10:27    [21869546]     Ответить | Цитировать Сообщить модератору
 Re: Пропустить уже считанную строку  [new]
invm
Member

Откуда: Москва
Сообщений: 9279
listtoview
получается
нужно что бы читатель блокировал и читателей и писателей
и другие читатели и писатели его не ждали
select ... from MyTable with (updlock, readpast)
23 апр 19, 10:27    [21869548]     Ответить | Цитировать Сообщить модератору
 Re: Пропустить уже считанную строку  [new]
listtoview
Member

Откуда:
Сообщений: 2314
invm
listtoview
получается
нужно что бы читатель блокировал и читателей и писателей
и другие читатели и писатели его не ждали
select ... from MyTable with (updlock, readpast)

и update в этом же запросе нужно
что бы повторные запросы не пытались его снова прочитать
23 апр 19, 10:36    [21869558]     Ответить | Цитировать Сообщить модератору
 Re: Пропустить уже считанную строку  [new]
listtoview
Member

Откуда:
Сообщений: 2314
т.е. пометимть строку что она уже обработана и больше никогда к ней не возвращаться
23 апр 19, 10:37    [21869561]     Ответить | Цитировать Сообщить модератору
 Re: Пропустить уже считанную строку  [new]
invm
Member

Откуда: Москва
Сообщений: 9279
listtoview
и update в этом же запросе нужно
что бы повторные запросы не пытались его снова прочитать
update MyTable with (readpast) set ... output ...
23 апр 19, 10:42    [21869564]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить