EF 핵심 동시성할 때 사용하는 여러 인스턴스

0

질문

나는 이와 유사한 코드:

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

이 코드에서 실행하는 여러 인스턴스의 microsevice,할 수 있는 동시에 문제가 일어납니까? (I.e. 두 개의 서비스는 동일한 세트의 레코드). 그리고 만약에 그렇습니다-할 수 없도록 하려면 어떻게 하나요?

나는 원하지 못하는 서비스에서 얻어 같은 기록에서 DB 를 호출하는 경우 이 메소드가 동시에.

2

최고의 응답

1

을 검색할 수 있는 행 저장 프로시저에서 실행 가능 트랜잭션이 있습니다. 습할 수 있습니다 다른 속성 테이블에서 같은 것 AssignedTo 기록하는 서비스에 할당된 줄이고,또 다른 특성을 나타내는 처리가 완료되었습니다. 그렇지 않은 경우,서비스를 검색합니다 일부 행을 하지만 실패를 완료하기 전에 모든 처리,사람들 행 남아 처리되지 않습니다. 서비스 행을 검색하고,그것을 사용할 수 있는 조건은 다음과 같 AssignedTo=self 또는 AssignedTo 은 Null 입니다. 아마도 있다 또한 타임스탬프거나 다른 방법으로 우선순위를 선택한 행이 있습니다.

2021-11-23 23:26:52
1

네,그것은,그것도 그렇게 쉽지 않을 방지합니다.

상상해 이러한 서비스는 임무가 주어를 업데이트를 계정 계정에 액세스 할 수 있습니다. 그들은 읽기와 균형,추가 입금액에 그것:

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.

당신이해야를 소개하는 트랜잭션의 범위를 관리 할 수 있 redis 아마, 그래서 그 각각의 인스턴스는 시점의 진실을 확인하는 경우에 확인하고 업데이트의 범위가 있습니다. 는"IsProcessing? 또 SetIsProcessing"네트워크를 통해하는 경우 당신은 것입니다.

2021-11-23 21:26:46

다른 언어로

이 페이지는 다른 언어로되어 있습니다

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