Woh dushman jisse hum defend kar rahe hain: lost updates, dirty reads, write skew — yeh woh anomalies hain jo tab appear hoti hain jab concurrent transactions interleave karte hain. Note karo yeh shape mein differ karte hain: lost update tab hota hai jab do transactions ek same row ko read-modify-write karte hain; write skew thoda subtle hai — do transactions ==overlapping data read karte hain aur phir alag-alag rows mein write karte hain==, har ek akele valid hota hai lekin milke ek invariant violate karte hain (jaise dono doctors "2 on-call" read karte hain aur har ek shift se baahar chala jaata hai, zero bachta hai). Toh haari defense sirf single-row contention se zyada cover karni chahiye.
-- readSELECT balance, version FROM accounts WHERE id = 1; -- balance=100, version=7-- ... naya balance compute karo = 100 - 30 = 70 ...-- WHERE mein validation bake karke write karo:UPDATE accounts SET balance = 70, version = 8WHERE id = 1 AND version = 7; -- 0 rows affect hote hain agar kisi ne version bump kiya → retry!
Socho ek library ki kitaab jise har koi chahta hai.
Pessimistic tarika: jo pehle le jaata hai woh use ek box mein lock kar deta hai — baaki sab line mein wait karte hain.
Koi kabhi fight nahi karta, lekin line slow ho sakti hai, aur do careful log
ek doosre ke boxes par hamesha ke liye wait kar sakte hain (woh deadlock hai).
Optimistic tarika: hum kitaab ki photocopy karte hain taaki sab ek saath padh sakein. Jab aap apni
edited copy waapis dena chahte ho, librarian check karta hai: "kya kisi ne yeh page badla jab aapke paas tha?" Agar
haan, sorry — apni edits naye page par dobara karo. Bahut accha jab log rarely same page edit karte hain,
bura jab sab page 1 par likhte hain.
Pessimistic concurrency control ki core assumption kya hai?
Ki conflicts likely hain, isliye woh unhe rokne ke liye data ko access karne se pehle lock karta hai.
Optimistic concurrency control ki core assumption kya hai?
Ki conflicts rare hain, isliye transactions freely chalte hain aur conflicts sirf commit time par check kiye jaate hain.
OCC ke teen phases kya hain?
Read (private copy par kaam karo + versions record karo), Validate (check karo ki kuch jo padha tha woh badla toh nahi), Write (commit karo ya abort+retry).
OCC mein validation usually SQL mein kaise implement hoti hai?
Ek conditional UPDATE ... WHERE version = <old>; agar woh 0 rows affect kare, toh conflict hua aur aap retry karte ho.
Kaun sa scheme deadlock kar sakta hai, aur kaun sa abort karta hai?
Pessimistic 2PL deadlock kar sakta hai (detection/timeout chahiye); OCC kabhi deadlock nahi karta — woh abort aur retry karta hai.
Kya MVCC aur optimistic concurrency control same hain?
Nahi. MVCC ek storage technique hai (snapshot reads ke liye multiple versions) jo optimistic ya pessimistic dono control ko underpin kar sakti hai.
Flash-sale hot row ke liye jisme p→1 ho, kaun sa control appropriate hai aur kyun?
Pessimistic (ya queue/atomic), kyunki OCC ka 1−pp retry cost retry storms/livelock mein explode ho jaata hai.
Write skew ek lost update se kaise differ karta hai?
Lost update do read-modify-writes same row par hain; write skew mein do transactions overlapping data read karte hain aur phir alag-alag rows mein write karte hain, jointly ek invariant break karte hain.
Write skew rokne ke liye kya chahiye?
Predicate/range locking ya serializable isolation — plain row locks aur single-row version checks isse nahi pakad paate kyunki writes alag rows ko hit karti hain.