EF ลึ concurrency เมื่อใช้ประมวลผลได้หลายตัว

0

คำถาม

ฉันมีรหัสที่คล้ายกันนี้:

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

ถ้ามันวิ่งรหัสอยู่หลายโหงของ microsevice สามารถเป็น concurrency ปัญหาเกิดขึ้นหรอ? (มือนกัน e. สองคนบริการจะเดียวกันตั้งค่าของบันทึก). และถ้าใช่-ได้ยังไงฉันป้องกันไม่ให้มัน?

ฉันต้องการเพื่อป้องกันการความช่วยเหลือจากการเดียวกับบันทึกจาก DB ถ้าพวกเขาเรียกกันว่าวิธีการพร้อมกันได้

2

คำตอบที่ดีที่สุด

1

คุณจะดึงข้อมูงแถวกับที่จัดเก็บขั้นตอนวิ่งอยู่ใน serializable การต่อรองได้ คุณอาจต้องการอีกคุณลักษณะอยู่ในโต๊ะบางอย่างเหมือน AssignedTo ซึ่งบันทึกของบริการรับมอบหมายให้ออกว่าแถวและอีกแสดงแอททริบิวต์ที่กำลังประมวลผลได้ถูกเสร็จสมบูรณ์@info:status ไม่เช่นนั้นถ้าการบริการ retrieves บางแถวแต่ล้มเหลวมาก่อนเรียนจบทุกการประมวลผลพวกนั้นอยู่แถว unprocessed. เมื่อบริการ retrieves แถวมันสามารถใช้เป็นเงื่อนเหมือน AssignedTo=ตัวเองหรือ AssignedTo คือโพรโทคอล aimcomment. สันนิษฐานได้เลยว่าเค้ามีเป็นยังเป็นวันที่และเวลาหรือมีวิธีอื่นที่จะจัดลำดับแถวที่เลือกไว้.

2021-11-23 23:26:52
1

ใช่และมันอาจจะไม่ง่ายที่จะหยุดยั้งมันได้

นึกภาพพวกนี้บริการได้ค้นคว้าเพื่อปรับปรุงบัญชีผู้ใช้ balances. พวกเขาอ่านความสมดุลและเพิ่มรโอนเงินจำนวนมากมัน:

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ý
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่