Biorąc pod uwagę tabelę działającą jak kolejka, jak najlepiej skonfigurować tabelę/zapytania tak, aby wielu klientów mogło jednocześnie przetwarzać kolejki?Używanie programu SQL Server jako kolejki DB z wieloma klientami
Na przykład poniższa tabela zawiera polecenie, które pracownik musi przetworzyć. Po zakończeniu procesu roboczego ustawiana jest wartość true.
| ID | COMMAND | PROCESSED |
| 1 | ... | true |
| 2 | ... | false |
| 3 | ... | false |
Klienci mogą otrzymać jedną komendę do pracy w taki sposób:
select top 1 COMMAND
from EXAMPLE_TABLE
with (UPDLOCK, ROWLOCK)
where PROCESSED=false;
Jednakże, jeśli istnieje wiele pracowników, każdy próbuje dostać wiersz z ID = 2. Tylko ten pierwszy dostanie pesymistyczny zamek, reszta będzie czekać. Wtedy jeden z nich otrzyma wiersz 3 itd.
Jakie zapytanie/konfiguracja pozwoliłoby każdemu klientowi pracowniczemu uzyskać inny wiersz i jednocześnie pracować nad nimi?
EDIT:
Kilka odpowiedzi sugerują, wariacje na temat korzystania z samej tabeli, aby nagrać państwowych w procesie. Sądziłem, że nie będzie to możliwe w ramach jednej transakcji. (Czyli o co chodzi z aktualizacją stanu jeśli żaden inny pracownik będzie go zobaczyć aż txn stawia?) Być może propozycja to:
# start transaction
update to 'processing'
# end transaction
# start transaction
process the command
update to 'processed'
# end transaction
Czy w ten sposób ludzie zwykle podejść do tego problemu? Wydaje mi się, że w miarę możliwości problem byłby lepiej rozwiązywany przez DB.
duplikat ... –
proszę wskazać mi oryginał, ponieważ SO nie polecił dupe. – Synesso
Po co mieć kłopot z odtworzeniem całej tej funkcjonalności, gdy jest już dostępna dla dowolnego serwera Windows w postaci Microsoft Message Queuing (MSMQ)? Wykorzystaj to, co jest dostępne - nie twórz ciągle nowego koła! –