Middle
რა არის ბლოკირებები მონაცემთა ბაზებთან მუშაობის კონტექსტში და რატომ არის ეს აუცილებელი?
sobes.tech AI
პასუხი AI-სგან
ဒေတာဘေ့စတွင်အတားအဆီးများသည်အသုံးပြုသူများသို့မဟုတ်လုပ်ငန်းစဉ်များအနေဖြင့်အချိန်တစ်ခါတည်းတူညီသောဒေတာများကိုစီမံခန့်ခွဲရန်အသုံးပြုသောစနစ်များဖြစ်သည်။ ၎င်းတို့သည်အကြံပေးမှုများကိုကာကွယ်ပြီးဒေတာတစ်စိတ်တစ်ပိုင်းအတွင်းအကြံပေးမှုများကိုထိန်းသိမ်းသည်။
အောက်ပါပြဿနာများကိုဖြေရှင်းရန်လိုအပ်သည်:
- Race Conditions: လုပ်ဆောင်မှုများ၏အစီအစဉ်သည်နောက်ဆုံးရလဒ်ကိုသက်ရောက်စေသည်။ အတားအဆီးများသည်လုပ်ဆောင်မှုများကိုအဆက်မပြတ်သို့မဟုတ်လုံခြုံသောအဆက်အပြားအဖြစ်အကောင်အထည်ဖော်ရန်အာမခံသည်။
- Несогласованное чтение (Inconsistent Reads): တစ်လုပ်ငန်းစဉ်သည်ဒေတာများကိုဖတ်နေစဉ်အခြားလုပ်ငန်းစဉ်သည်၎င်းတို့ကိုပြောင်းလဲနေသည်၊ ၎င်းသည်အလယ်အလတ်အခြေအနေများသို့မဟုတ်မပြီးစီးသောဒေတာများကိုရရှိနိုင်သည်။ အတားအဆီးများသည်ဤအရာကိုကာကွယ်နိုင်သည်။
- Lost Updates: နှစ်လုပ်ငန်းစဉ်သည်တူညီသောဒေတာများကိုဖတ်ပြီး၊ တစ်ဦးသည်၎င်းတို့ကိုပြောင်းလဲပြီးနောက်ထပ်သိမ်းဆည်းသည်။ နောက်ဆုံးသိမ်းဆည်းမှုသည်ပထမဦးစွာပြောင်းလဲထားသောအရာများကိုပြန်လည်ရေးသားပေးသည်၊ ၎င်းတို့ကိုဆုံးရှုံးစေသည်။ အတားအဆီးများသည်ပြောင်းလဲမှုများကိုဆုံးရှုံးမှုမှကာကွယ်နိုင်သည်။
- Phantom Reads: တစ်ခုတည်းသောလွှာအတွင်း၊ ထပ်မံမေးခွန်းတစ်ခုသည်အခြားအကြောင်းအရာများကိုပြန်လည်ပေးသည်၊ ၎င်းသည်အခြားလုပ်ငန်းစဉ်သည်လိုအပ်သောအကြောင်းအရာများကိုထည့်သွင်းသို့မဟုတ်ဖယ်ရှားထားသည်။
အဓိကအမျိုးအစားများ:
- Shared (Read Lock): များစွာသောလုပ်ငန်းစဉ်များသည်တူညီသောဒေတာများကိုအချိန်တစ်ခါတည်းဖတ်နိုင်သည်။ ရေးသားမှုအတားအဆီးများကိုမပေးပါ။
- Exclusive (Write Lock): ဒေတာများအပေါ်မုန်းမောခွင့်ပေးသည်။ တစ်လုပ်ငန်းစဉ်သာအဲဒီအချက်အလက်များအပေါ်အထူးအာဏာရှိနိုင်သည်။
အဆင့်အတန်းများ:
- Database Level: ဒေတာဘေ့စကိုလုံးလုံးပိတ်သည်။ များစွာအသုံးမပြုပါ။
- Table Level: တစ်လုံးလုံးကိုပိတ်သည်။ ပိုမိုအသေးစိတ်မဟုတ်ပါ၊ ယှဉ်ပြိုင်မှုကိုလျော့နည်းစေသည်။
- Row Level: တစ်ကြောင်းချင်းစီကိုပိတ်သည်။ ပိုမိုအသေးစိတ်ဖြစ်ပြီး၊ ယှဉ်ပြိုင်မှုမြင့်မားစေသည်။
- Page Level: ဒေတာစာမျက်နှာကိုပိတ်သည်။ တစ်ခုတည်းသောစာမျက်နှာကိုပိတ်သည်။
အတားအဆီးများကိုအကောင်အထည်ဖော်ခြင်းသည်အတိအကျDBMSပေါ်မူတည်သည် (ဥပမာ၊ InnoDB နှင့် MyISAM များသည်အတားအဆီးမူဝါဒများမတူပါ၊ PostgreSQL စသည်)။ PHP တွင်အများအားဖြင့်လွှာများကိုစီမံခန့်ခွဲရန်အသုံးပြုသည်။
-- SQL တွင်လွှာများနှင့်အတားအဆီးများကိုအသုံးပြုခြင်းဥပမာ
START TRANSACTION;
SELECT balance FROM accounts WHERE account_id = 123 FOR UPDATE;
-- FOR UPDATE သည်ရွေးချယ်ထားသောလိုင်းအပေါ်အထူးအာဏာပေးသည်
UPDATE accounts SET balance = balance - 100 WHERE account_id = 123;
COMMIT;
-- သို့မဟုတ် အမှားဖြစ်ပါက ROLLBACK