terminal
Poyga sinovi: atomar yozuv 40 parallel ishchida
Easybolt+20 XPflagRequired
Bazani yoqish: baza-start (har lab boshida server o'chiq bo'ladi). psql'ga kirish: hn (bu psql -h /tmp -U postgres -d hn uchun qisqartma; fayl bajarish: hn -f fayl.sql, bitta so'rov: hn -c "..."). Bazada: ombor(mahsulot, qoldiq) — disk mahsulotidan 30 dona (check (qoldiq = 0) bilan); tolov(kalit unique, summa); hisob(id, balans) — 1-hisobda 1000, 2-hisobda 0; navbat(id, holat) — 5 ta 'yangi' vazifa. Darsdagi bosh fikr: poyga xatosi XATO BERMAYDI — invariantni buzadi. Checker sizning yechimingizni 40 marta PARALLEL ishga tushiradi. Vazifa (/root/db/ ichida) sotib.sh — bitta xarid skripti: disk qoldig'ini ATOMAR ifoda bilan 1 ga kamaytiring, faqat qoldiq bo'lsa: hn -c "update ombor set qoldiq = qoldiq - 1 where mahsulot = 'disk' and qoldiq 0". Hech qanday "avval select, keyin update" YO'Q! tolov.sql — idempotent yozish: insert into tolov(kalit, summa) values ('CHRG-77', 500) on conflict (kalit) do nothing; otkazma.sql — BITTA tranzaksiyada 1-hisobdan 2-hisobga 300 o'tkazing (begin; ... commit;). navbat.sql — ishchi vazifa oladi: holat = 'yangi' dan BITTASINI for update skip locked limit 1 bilan tanlang (order by id). Muvaffaqiyat mezoni Checker qoldiqni 30 ga tiklab sotib.shni 40× parallel ishga tushiradi: yakunda qoldiq AYNAN 0 (manfiy emas, ortiqcha ham emas). tolov.sql IKKI marta bajarilganda ham bitta yozuv. otkazma.sqldan keyin: 700 / 300, jami o'zgarmagan.