Hej.
Jest sobie baza danych, w niej tabela z wieloma rekordami. Każdy z tych rekordów musi być przetworzony przez logikę biznesową (coś w rodzaju tasku do wykonania). Każdy wiersz ma status boolean o nazwie loaded, informujący czy został on już przetworzony (w postępujących iteracjach pobieramy w chunkach tylko te wiersze które mają status false).
Aby było szybciej, serwis przetwarzający dane odpalony jest w kilku instancjach. Czyli mamy kilka procesów pracujących na tej samej bazie danych.
Oczywisty jest fakt, że nie chce by te same wiersze były przetwarzane jednocześnie przez kilka instancji. No więc stawiam transakcje, domyślna (REPEATABLE READ) wydaje się być ok.
Z tym, że sam odczyt wierszy nie sprawia, że są "dirty", i za nim po poprawnym wykonaniu logiki, status loaded zmienimy na true, to już inne instancje pobiorą te same wiersze... trzeba więc coś pozmieniać w pobranych danych na samym początku, myślę np. o dodaniu enuma o trzech wartościach (unloaded, pending, loaded). Wtedy w pętli będą pobierane tylko wiersze które nie zostały jeszcze przetworzone ani nie są w tej chwili przetwarzane.
Co sądzicie o tym? A może są jakieś jeszcze lepsze sposoby/wzorce na to? Używam jc. MySQL.
Dzięki i pozdrawiam