Paralelizm jądra EF w przypadku korzystania z kilku egzemplarzy

0

Pytanie

Mam kod, podobny do tego:

var records = db.Records.Where(r => r.IsProcessing == false).Take(100).ToList();
records.IsProcessing = true;
await db.SaveChangesAsync()
...further work with recods

Jeśli ten kod jest wykonywany na wielu egzemplarzach микросервиса, czy może wystąpić problem równoległości? (Tj. dwie usługi otrzymają ten sam zestaw rekordów). A jeśli tak, to jak temu zapobiec?

Chcę, aby moje usługi nie otrzymywali te same rekordy z BAZY danych, jeśli są one jednocześnie powodują ta metoda.

2

Najlepsza odpowiedź

1

Można uzyskać polecenia z pomocą procedury przechowywanej, wykonywanej w сериализуемой transakcji. Możliwe, potrzebne są inne atrybuty w tabeli, coś jak Assigned, w którym zapisywany jest usługa przypisana do tego wiersza, i inny atrybut wskazujący, że obróbka jest zakończona. W przeciwnym razie, jeśli usługa pobiera niektóre wiersze, ale kończy działanie z błędem, aż do zakończenia całej obsługi, linie te pozostają nie przygotowanych. Gdy usługa pobiera wiersze, ona może używać taki warunek, jak AssignedTo = self Lub AssignedTo Null. Prawdopodobnie istnieje również tymczasowy lub jakiś inny sposób na priorytetowe traktowanie wybranych wierszy.

2021-11-23 23:26:52
1

Tak, to się stanie, i, być może, będzie nie tak łatwo temu zapobiec.

Wyobraź sobie, że te usługi za zadanie aktualizować salda. Oni odczytują równowagę i dodać do niego kwotę wpłaty:

service 1: on a busy machine (slow)
service 2: on a not so busy machine (fast)
"john" has £100 on his account
service 1: read
service 2: read
service 1: balance = balance + 100;
service 2: balance = balance + 100;
service 2: set processing = true
service 2: set processing = true
service 2: update record
service 1: update record.
john ends up with £200 instead of £300.

Trzeba będzie wprowadzić obszar transakcji, być może, zarządzać nimi za pomocą redis , aby u każdego egzemplarza została punkt prawdy, aby sprawdzić, czy można wchodzić i wychodzić z zakresu aktualizacji. A czy Jest traktowanie? lub ustaw" Przetwarzanie " w sieci, jeśli chcesz.

2021-11-23 21:26:46

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................