Załóżmy, że mam tabelę bazy danych SQL Server z X rekordami (> 1 000 000), które muszą zostać przetworzone (uzyskać dane, wykonać działanie zewnętrzne, stan aktualizacji w db) jeden po drugim przez niektóre procesy robocze (albo aplikacje konsolowe, usługi Windows, role robotów Azure itp.). Muszę zagwarantować, że każdy wiersz jest przetwarzany tylko raz. Idealnie zagwarantowana byłaby wyłączność, niezależnie od tego, ile maszyn/procesów zostało przetworzonych w celu przetworzenia wiadomości. Martwię się głównie o dwa WYBIERAJĄCE chwytające te same rzędy jednocześnie.Jak zaprojektowałbyś ten system przetwarzania komunikatów w .NET/SQL Server?
Wiem, że istnieją lepsze bazy danych do kolejkowania, ale nie mam tego luksusu dla tego projektu. Mam pomysły na osiągnięcie tego, ale szukam czegoś więcej.
+1 Potrzebne jest pozapasmowe porządki w przypadku, gdy aplikacja konsumencka nie przechodzi poprawnie między "InProcess" i "Gotowe" –
Dowolny powód, dla którego @myMachineID nie może być po prostu @@ SPID, oczywiście przy założeniu, że że oba zapytania są wykonywane w tej samej partii? –
Czy AKTUALIZACJA blokuje wybrane wiersze podczas ich aktualizowania lub czy wiele procesów może jednocześnie odbierać wiersze? –