Мне нужна таблица базы данных MsSql и еще 8 (идентичных) процессов, которые параллельно обращаются к одной и той же таблице - выбирают top n, обрабатывают эти n строк и обновляют столбец этих строк. Проблема в том, что мне нужно выбрать и обработать каждую строку только один раз. Это означает, что если один процесс попал в базу данных и выбрал верхние n строк, то при появлении второго процесса он должен найти эти строки заблокированными и выбрать строки от n до 2 * n строк и т. Д.
Можно ли установить блокировку на некоторые строки, когда вы выбираете их и когда кто-то запрашивает верхние n строк, которые заблокированы, чтобы вернуть следующие строки, а не ждать заблокированных? Похоже на длинный выстрел, но ...
Еще одна вещь, о которой я подумал - может быть, не такая элегантная, но звучит просто и безопасно, - это иметь в базе данных счетчик экземпляров, которые делали выборки в этой таблице. Первый поступающий экземпляр увеличивает счетчик и выбирает top n, следующий - увеличивает счетчик и выбирает строки от n * (i-1) до n * i и т. Д. ...
Звучит ли это как хорошая идея? У вас есть предложения получше? Любая мысль высоко ценится!
Спасибо за ваше время.