ငွေပေးငွေယူများနှင့် ၎င်းတို့၏ ထိန်းချုပ်မှု ယန္တရားများ

အရောင်းအဝယ်

ငွေပေးငွေယူဆိုသည်မှာ အစနှင့်အဆုံးရှိသည့် ဒေတာဆိုင်ရာ လုပ်ဆောင်ချက်များ၏ အစုအဝေးတစ်ခုဖြစ်သည်။

ငွေပေးငွေယူဆိုသည်မှာ စာဖတ်ခြင်းနှင့်ရေးခြင်းဆိုင်ရာ လုပ်ငန်းစဉ်များကို ဆက်တိုက်လုပ်ဆောင်ခြင်း ဖြစ်သည်။ ငွေပေးငွေယူတစ်ခု၏ အဆုံးသည် အပြောင်းအလဲများကို သိမ်းဆည်းခြင်း (commit) သို့မဟုတ် အပြောင်းအလဲများကို ပယ်ဖျက်ခြင်း (ပြန်သိမ်းခြင်း) ဖြစ်နိုင်သည်။ ဒေတာဘေ့စ်တစ်ခုနှင့် စပ်လျဉ်း၍ ငွေပေးငွေယူတစ်ခုတွင် တောင်းဆိုချက်တစ်ခုတည်းအဖြစ် သဘောထားထားသော တောင်းဆိုချက်များစွာ ပါဝင်ပါသည်။

အရောင်းအ၀ယ်များသည် ACID ဂုဏ်သတ္တိများကို ကျေနပ်စေရမည်။

ပြည်တော်သာ။ ငွေပေးငွေယူ ပြီးမြောက်သည်ဖြစ်စေ လုံးဝမပြီးစီးပါ။

ရှေ့နောက်ညီညွတ်မှု။ ငွေပေးငွေယူတစ်ခု ပြီးမြောက်သောအခါ၊ ဒေတာအပေါ် ချမှတ်ထားသော ကန့်သတ်ချက်များ (ဥပမာ၊ ဒေတာဘေ့စ်ရှိ ကန့်သတ်ချက်များ) ကို ချိုးဖောက်ခြင်း မပြုရပါ။ ညီညွတ်မှုဆိုသည်မှာ စနစ်အား မှန်ကန်သောပြည်နယ်တစ်ခုမှ အခြားမှန်ကန်သောပြည်နယ်တစ်ခုသို့ လွှဲပြောင်းပေးမည်ဖြစ်ကြောင်း ဆိုလိုသည်။

သီးသန့်ထားခြင်း၊ ခွဲထားခြင်း။ အပြိုင်လုပ်ဆောင်နေသည့် ငွေပေးငွေယူများသည် တစ်ခုနှင့်တစ်ခုအပေါ် လွှမ်းမိုးမှုမရှိစေရ၊ ဥပမာ၊ အခြားငွေပေးငွေယူတစ်ခုမှ အသုံးပြုသည့်ဒေတာကို ပြောင်းလဲပါ။ ပြိုင်တူ ငွေပေးငွေယူများ လုပ်ဆောင်ခြင်း၏ ရလဒ်သည် အရောင်းအဝယ်များကို ဆက်တိုက်လုပ်ဆောင်ခြင်းကဲ့သို့ ဖြစ်သင့်သည်။

ညီလေး။ ကတိကဝတ်ပြုပြီးသည်နှင့် အပြောင်းအလဲများ မဆုံးရှုံးသင့်ပါ။

ငွေသွင်းငွေထုတ်မှတ်တမ်း

မှတ်တမ်းသည် အရောင်းအ၀ယ်ပြုလုပ်သော အပြောင်းအလဲများကို သိမ်းဆည်းထားပြီး စနစ်ပျက်ကွက်မှုတစ်ခုတွင် ဒေတာ၏ အနုမြူနှင့် တည်ငြိမ်မှုကို သေချာစေသည်။

မှတ်တမ်းတွင် ငွေပေးငွေယူဖြင့် ပြောင်းလဲခြင်းမပြုမီနှင့် ၎င်းကို ပြောင်းလဲပြီးနောက် ဒေတာများပါရှိသည်။ Write-ahead log strategy သည် မစတင်မီတွင် ယခင်တန်ဖိုးများအကြောင်း မှတ်တမ်းတစ်ခုထည့်သွင်းရန်လိုအပ်ပြီး ငွေပေးငွေယူပြီးသည့်နောက် နောက်ဆုံးတန်ဖိုးများအကြောင်း၊ စနစ်ရုတ်တရက်ရပ်တန့်သွားသည့်အခါ၊ ဒေတာဘေ့စ်သည် လော့ဂ်အင်ပြောင်းပြန်အစီအစဥ်ကို ဖတ်ပြပြီး အရောင်းအ၀ယ်ပြုလုပ်သော အပြောင်းအလဲများကို ပယ်ဖျက်သည်။ အနှောက်အယှက်ဖြစ်စေသော ငွေပေးငွေယူတစ်ခုကို ကြုံတွေ့ရပြီး၊ ဒေတာဘေ့စ်သည် ၎င်းကို လုပ်ဆောင်ပြီး မှတ်တမ်းသို့ ပြောင်းလဲမှုများ ပြုလုပ်သည်။ ပျက်ကွက်ချိန်တွင် ဒေတာဘေ့စ်သည် ရှေ့သို့ လော့ဂ်အင်ကို ဖတ်ပြီး အရောင်းအ၀ယ်ပြုလုပ်သော အပြောင်းအလဲများကို ပြန်ပေးသည်။ ဤနည်းအားဖြင့် ကတိကဝတ်ပြုထားပြီးဖြစ်သော ငွေပေးငွေယူများ၏ တည်ငြိမ်မှုနှင့် အနှောက်အယှက်ဖြစ်စေသော အရောင်းအ၀ယ်များ၏ အနုမြူကို ထိန်းသိမ်းထားသည်။

မအောင်မြင်သော ငွေလွှဲမှုများကို ပြန်လည်လုပ်ဆောင်ခြင်းသည် ပြန်လည်ရယူရန်အတွက် မလုံလောက်ပါ။

ဥပမာ။ အသုံးပြုသူသည် ၎င်း၏အကောင့်တွင် $500 ရှိပြီး အသုံးပြုသူက ၎င်းကို ATM စက်မှ ထုတ်ယူရန် ဆုံးဖြတ်သည်။ ငွေပေးငွေယူ နှစ်ခု လုပ်ဆောင်နေပါသည်။ ပထမတစ်ခုက လက်ကျန်တန်ဖိုးကိုဖတ်ပြီး လက်ကျန်ငွေအလုံအလောက်ရှိလျှင် အသုံးပြုသူကို ငွေထုတ်ပေးသည်။ ဒုတိယက လိုအပ်သောပမာဏကို လက်ကျန်ထဲမှ နုတ်သည်။ စနစ်ပျက်သွားပြီး ပထမလုပ်ဆောင်မှု မအောင်မြင်သော်လည်း ဒုတိယနည်းဟုဆိုကြပါစို့။ ဤကိစ္စတွင်၊ ကျွန်ုပ်တို့သည် အပြုသဘောဆောင်သော လက်ကျန်ငွေဖြင့် စနစ်အား ၎င်း၏မူလအခြေအနေသို့ ပြန်မပေးဘဲ သုံးစွဲသူထံသို့ ငွေပြန်ထုတ်ပေး၍ မရပါ။

လျှပ်ကာဖြစ်တတ်ပါတယ်။

ကတိသစ္စာကိုဖတ်ပါ။

Dirty Read ပြဿနာမှာ ငွေပေးငွေယူတစ်ခုသည် အခြားငွေပေးငွေယူ၏ အလယ်အလတ်ရလဒ်ကို ဖတ်နိုင်ခြင်းဖြစ်သည်။

ဥပမာ။ ကနဦးလက်ကျန်တန်ဖိုးမှာ $0 ဖြစ်သည်။ T1 သည် သင့်လက်ကျန်ထဲသို့ $50 ထည့်သည်။ T2 သည် လက်ကျန်တန်ဖိုး ($50) ကို ဖတ်သည်။ T1 သည် ပြောင်းလဲမှုများကို ဖယ်ရှားပြီး ထွက်ပေါက်များကို ဖယ်ရှားသည်။ T2 သည် မမှန်ကန်သော လက်ကျန်ဒေတာဖြင့် ဆက်လက်လုပ်ဆောင်သည်။

ဖြေရှင်းချက်မှာ အရောင်းအ၀ယ်ပြုလုပ်ခြင်းဖြင့် ပြောင်းလဲထားသော ဒေတာဖတ်ရှုခြင်းကို တားမြစ်ထားသည့် ပုံသေဒေတာကိုဖတ်ရန် (Read Committed) ဖြစ်သည်။ ငွေပေးငွေယူ A သည် သတ်မှတ်ထားသော ဒေတာအစုအဝေးကို ပြောင်းလဲပါက၊ အရောင်းအဝယ် B၊ ဤဒေတာကို ဝင်ရောက်သည့်အခါ၊ ငွေပေးငွေယူ A ပြီးမြောက်ရန် စောင့်ရတော့မည်ဖြစ်သည်။

ထပ်တလဲလဲဖတ်ပါ။

အပ်ဒိတ်များ ပျောက်ဆုံးသွားသော ပြဿနာ။ T1 သည် T2 ၏ပြောင်းလဲမှုများ၏ထိပ်တွင်ပြောင်းလဲမှုများကိုသိမ်းဆည်းသည်။

ဥပမာ။ ကနဦးလက်ကျန်တန်ဖိုးမှာ $0 ဖြစ်ပြီး ငွေပေးငွေယူ နှစ်ခုကို တစ်ပြိုင်နက် လက်ကျန်ငွေကို ဖြည့်ပေးသည်။ T1 နှင့် T2 သည် $0 ၏ လက်ကျန်ငွေကို ဖတ်သည်။ T2 သည် $200 သို့ $0 ပေါင်းထည့်ကာ ရလဒ်ကို သိမ်းသည်။ T1 သည် $100 သို့ $0 ပေါင်းပြီး ရလဒ်ကို သိမ်းဆည်းသည်။ နောက်ဆုံးရလဒ်မှာ $100 အစား $300 ဖြစ်သည်။

ထပ်တလဲလဲ မဖတ်နိုင်သော ပြဿနာ။ တူညီသောဒေတာကို ထပ်ခါတလဲလဲဖတ်ရှုခြင်းသည် မတူညီသောတန်ဖိုးများကို ပြန်ပေးသည်။

ဥပမာ။ T1 သည် လက်ကျန်တန်ဖိုး $0 ကိုဖတ်သည်။ ထို့နောက် T2 သည် လက်ကျန်ငွေထဲသို့ $50 ပေါင်းထည့်ကာ အဆုံးသတ်သည်။ T1 သည် ဒေတာကို ထပ်မံဖတ်ရှုပြီး ယခင်ရလဒ်နှင့် ကွဲလွဲမှုကို တွေ့ရှိသည်။

ထပ်တလဲလဲဖတ်ခြင်းသည် တစ်စက္ကန့်စာဖတ်ခြင်းသည် တူညီသောရလဒ်ကိုရရှိကြောင်းသေချာစေသည်။ ငွေပေးငွေယူတစ်ခုမှဖတ်သောဒေတာကို အရောင်းအဝယ်မပြီးမချင်း အခြားသူများတွင် ပြောင်းလဲ၍မရပါ။ ငွေပေးငွေယူ A သည် သတ်မှတ်ထားသော ဒေတာအစုအဝေးကို ဖတ်ပြီးပါက၊ ငွေလွှဲခ B သည် ဤဒေတာကို ဝင်ရောက်သည့်အခါ၊ ငွေပေးငွေယူ A ပြီးမြောက်ရန် စောင့်ခိုင်းရသည်။

အမိန့်စာဖတ်ခြင်း (Serializable)

Phantom Reads ပြဿနာ။ အချို့သောအခြေအနေတစ်ခုအပေါ်အခြေခံ၍ ဒေတာကိုရွေးချယ်သည့်မေးခွန်းနှစ်ခုသည် မတူညီသောတန်ဖိုးများကို ပြန်ပေးသည်။

ဥပမာ။ T1 သည် လက်ကျန်ငွေ $0 ထက်များသော်လည်း $100 အောက်ရှိသော အသုံးပြုသူအားလုံးကို တောင်းဆိုပါသည်။ T2 သည် $1 လက်ကျန်ငွေဖြင့် အသုံးပြုသူတစ်ဦးထံမှ $101 ကို နုတ်ယူပါသည်။ T1 သည် တောင်းဆိုချက်ကို ပြန်လည်ထုတ်ပေးသည်။

အမိန့်စာဖတ်ခြင်း (Serializable)။ ငွေပေးငွေယူများကို လုံးဝ ဆက်တိုက်အဖြစ် လုပ်ဆောင်ပါသည်။ တောင်းဆိုချက်၏ သတ်မှတ်ချက်များအတွင်း အကျုံးဝင်သော မှတ်တမ်းများကို အပ်ဒိတ် သို့မဟုတ် ထည့်ရန် တားမြစ်ထားသည်။ ငွေပေးငွေယူ A သည် ဇယားတစ်ခုလုံးမှ ဒေတာကို တောင်းဆိုပါက၊ အရောင်းအဝယ် A ပြီးသည်အထိ ဇယားတစ်ခုလုံးကို အခြားငွေပေးငွေယူများအတွက် အေးခဲသွားမည်ဖြစ်သည်။

စီစဉ်ပေးသူ

ပြိုင်တူ ငွေပေးငွေယူများအတွင်း လုပ်ဆောင်ချက်များကို လုပ်ဆောင်သင့်သည့် အစီအစဉ်ကို သတ်မှတ်သည်။

သတ်မှတ်ထားသော အထီးကျန်အဆင့်ကို ပေးသည်။ လုပ်ဆောင်ချက်များ၏ ရလဒ်သည် ၎င်းတို့၏ မှာယူမှုအပေါ် မမူတည်ပါက၊ ထိုသို့သော လည်ပတ်မှုများသည် အပြောင်းအရွှေ့ ( Permutable ) ဖြစ်သည်။ မတူညီသောဒေတာများပေါ်တွင်ဖတ်ရှုခြင်းလုပ်ဆောင်မှုများနှင့်လုပ်ဆောင်မှုများသည် အပြောင်းအရွှေ့ဖြစ်သည်။ Read-write နှင့် write-write လုပ်ဆောင်ချက်များသည် ဖလှယ်ခြင်းမဟုတ်ပါ။ အစီအစဉ်ဆွဲသူ၏တာဝန်မှာ အပြိုင်ငွေပေးငွေယူများဖြင့်လုပ်ဆောင်သော လုပ်ဆောင်ချက်များကို ကြားဖြတ်လုပ်ဆောင်ခြင်းရလဒ်သည် ဆက်တိုက်ငွေပေးငွေယူလုပ်ဆောင်ခြင်းနှင့် ညီမျှစေရန်ဖြစ်သည်။

ပြိုင်တူအလုပ်များကို ထိန်းချုပ်ရန် ယန္တရားများ (Concurrency Control)

အကောင်းမြင်ဝါဒသည် ပဋိပက္ခများကို ရှာဖွေဖော်ထုတ်ဖြေရှင်းခြင်းအပေါ် အခြေခံပြီး၊ အဆိုးမြင်မှုသည် ပဋိပက္ခများမဖြစ်ပွားစေရန် တားဆီးခြင်းအပေါ် အခြေခံသည်။

အကောင်းမြင်သောချဉ်းကပ်မှုတွင်၊ အသုံးပြုသူအများအပြားသည် ၎င်းတို့၏ ကိုင်တွယ်ရာတွင် ဒေတာမိတ္တူများရှိသည်။ တည်းဖြတ်ခြင်းကို ပြီးမြောက်အောင် ပထမဆုံးပြုလုပ်သူသည် အပြောင်းအလဲများကို သိမ်းဆည်းမည်ဖြစ်ပြီး အခြားသူများသည် အပြောင်းအလဲများကို ပေါင်းစည်းရမည်ဖြစ်သည်။ အကောင်းမြင်သော အယ်လဂိုရီသမ်တစ်ခုသည် ပဋိပက္ခကို ဖြစ်ပေါ်စေနိုင်သော်လည်း စနစ်သည် ပဋိပက္ခမှ ပြန်လည်ရယူရမည်ဖြစ်သည်။

အဆိုးမြင်သော ချဉ်းကပ်မှုဖြင့် ဒေတာကို ဖမ်းယူသည့် ပထမဆုံးအသုံးပြုသူသည် အခြားသူများကို ဒေတာလက်ခံခြင်းမှ တားဆီးသည်။ ပဋိပက္ခများ ရှားပါးပါက၊ ၎င်းသည် တူညီသောအဆင့်ကို ပံ့ပိုးပေးသောကြောင့် အကောင်းမြင်နည်းဗျူဟာကို ရွေးချယ်ခြင်းသည် ပညာရှိရာရောက်ပါသည်။

သော့ခတ်ခြင်း။

ငွေပေးငွေယူတစ်ခုတွင် ဒေတာလော့ခ်ချထားပါက၊ ဒေတာကိုဝင်ရောက်သည့်အခါ လော့ခ်မဖွင့်မချင်း အခြားငွေပေးငွေယူများက စောင့်ရပါမည်။

ဘလော့တစ်ခုအား ဒေတာဘေ့စ်၊ ဇယား၊ အတန်း သို့မဟုတ် ရည်ညွှန်းချက်ပေါ်တွင် ထပ်တင်နိုင်သည်။ Shared Lock သည် ငွေပေးငွေယူများစွာဖြင့် တူညီသောဒေတာကို ချမှတ်နိုင်ပြီး၊ ငွေပေးငွေယူအားလုံးကို (ထိုအရာအပါအဝင်) ဖတ်ရှုရန်၊ ပြုပြင်မွမ်းမံခြင်းနှင့် သီးသန့်ရိုက်ကူးခြင်းကို တားမြစ်နိုင်သည်။ သီးသန့်သော့ခတ်ခြင်းကို တစ်ခုတည်းသော ငွေပေးငွေယူဖြင့် ချမှတ်နိုင်သည်၊ အကျုံးဝင်သော အရောင်းအဝယ်၏ မည်သည့်လုပ်ဆောင်ချက်ကိုမဆို ခွင့်ပြုသည်၊ အခြားလုပ်ဆောင်ချက်များကို တားမြစ်သည်။

Deadlock သည် အကန့်အသတ်မရှိ ဆိုင်းငံ့ထားသည့် အခြေအနေတွင် အရောင်းအ၀ယ်များ ပြီးဆုံးသည့် အခြေအနေတစ်ခုဖြစ်သည်။

ဥပမာ။ ပထမ ငွေပေးငွေယူသည် ဒုတိယမှဖမ်းယူထားသော ဒေတာကို ထုတ်လွှတ်ရန် စောင့်ဆိုင်းနေချိန်တွင် ဒုတိယတစ်ခုသည် ပထမမှဖမ်းယူထားသော ဒေတာကို ထုတ်လွှတ်ရန် စောင့်ဆိုင်းနေပါသည်။

deadlock ပြဿနာအတွက် အကောင်းမြင်သောအဖြေတစ်ခုက deadlock ကိုဖြစ်ပေါ်စေသည်၊ သို့သော် deadlock တွင်ပါ ၀ င်သည့်ငွေပေးငွေယူများထဲမှတစ်ခုကိုပြန်လှည့်ခြင်းဖြင့်စနစ်အားပြန်လည်ကောင်းမွန်စေသည်။

Deadlocks များကို အချို့သောကာလများတွင် ရှာဖွေသည်။ ထောက်လှမ်းခြင်းနည်းလမ်းများထဲမှ တစ်ခုသည် အချိန်အားဖြင့်ဖြစ်သည်၊ ဆိုလိုသည်မှာ၊ ငွေပေးငွေယူ ပြီးမြောက်ရန် အလွန်ကြာပါက မသေမချာဖြစ်သွားသည်ဟု ယူဆပါသည်။ Deadlock တစ်ခုကို တွေ့ရှိသောအခါ၊ အရောင်းအ၀ယ်များထဲမှ တစ်ခုကို ပြန်လှည့်ပြီး deadlock တွင် ပါ၀င်သော အခြားငွေပေးငွေယူများကို အပြီးသတ်နိုင်စေပါသည်။ သားကောင်ရွေးချယ်မှုသည် ငွေပေးငွေယူတန်ဖိုး သို့မဟုတ် ၎င်းတို့၏ လုပ်သက် (Wait-Die and Wound-wait schemes) ပေါ်တွင် အခြေခံနိုင်သည်။

အရောင်းအဝယ်တိုင်း T အချိန်တံဆိပ်တစ်ခု သတ်မှတ်ပေးထားသည်။ TS အရောင်းအ ၀ ယ်၏စတင်ချိန်ပါ ၀ င်သည်။

စောင့်-သေ။

လျှင် TS(Ti) < TS(Tj)ထိုအခါ Ti မဟုတ်ရင် စောင့်တယ်။ Ti ပြန်လှည့်ပြီး တူညီသော အချိန်တံဆိပ်တုံးဖြင့် ပြန်လည်စတင်သည်။

ငယ်ရွယ်သော ငွေပေးငွေယူတစ်ခုသည် အရင်းအမြစ်တစ်ခုကို ရယူထားပြီး အဟောင်းအရောင်းအ၀ယ်တစ်ခုမှ တူညီသောအရင်းအမြစ်ကို တောင်းဆိုပါက၊ အဟောင်းအရောင်းအ၀ယ်ကို စောင့်ဆိုင်းရန် ခွင့်ပြုသည်။ အသက်ကြီးသော ငွေပေးငွေယူတစ်ခုသည် အရင်းအမြစ်တစ်ခုရရှိပါက၊ ထိုအရင်းအမြစ်ကို တောင်းဆိုသော သေးငယ်သော ငွေပေးငွေယူသည် ပြန်လှည့်သွားမည်ဖြစ်သည်။

အနာ-ချောင်းမြောင်း။

လျှင် TS(Ti) < TS(Tj)ထိုအခါ Tj ပြန်လှည့်ပြီး တူညီသောအချိန်တံဆိပ်တုံးဖြင့် ပြန်စတင်သည် Ti စောင့်နေသည်။

ငယ်ရွယ်သော ငွေပေးငွေယူတစ်ခုသည် အရင်းအမြစ်တစ်ခုကို ရယူထားပြီး အဟောင်းအရောင်းအ၀ယ်တစ်ခုမှ တူညီသောအရင်းအမြစ်ကို တောင်းဆိုပါက၊ ငယ်သောငွေပေးငွေယူကို ပြန်လှည့်ပါမည်။ အသက်ကြီးသော ငွေပေးငွေယူတစ်ခုသည် အရင်းအမြစ်တစ်ခုရရှိပါက၊ ရင်းမြစ်တောင်းဆိုသည့် ငယ်ရွယ်သောငွေပေးငွေယူသည် စောင့်ဆိုင်းရန်ခွင့်ပြုထားသည်။ ရှေ့တန်းကျသော သားကောင်ရွေးချယ်မှုသည် သော့ပိတ်မှုများကို ဟန့်တားပေးသည်၊ သို့သော် မသေမချာဖြစ်နေသော ငွေပေးငွေယူများကို ပြန်လည်လုပ်ဆောင်သည်။ ပြဿနာက အရောင်းအဝယ်တွေ အကြိမ်ပေါင်းများစွာ ပြန်လှည့်နိုင်တာကြောင့်... အရောင်းအ၀ယ်အဟောင်းတစ်ခုသည် အရင်းအမြစ်ကို အချိန်အကြာကြီး ထိန်းထားနိုင်သည်။

Deadlock ပြဿနာအတွက် အဆိုးမြင်သောဖြေရှင်းချက်သည် မသေမချာဖြစ်နိုင်သည့်အန္တရာယ်ရှိလျှင် ငွေပေးငွေယူတစ်ခု စတင်လုပ်ဆောင်ရန် ခွင့်မပြုပါ။

မသေမချာဖြစ်နေခြင်းကို ထောက်လှမ်းရန်၊ ဂရပ်တစ်ခု (စောင့်ဆိုင်းဂရပ်၊ စောင့်ဆိုင်းရန်-ဂရပ်ဖစ်) ကို တည်ဆောက်ထားပြီး အရောင်းအ၀ယ်များဖြစ်သည့် ဒေါင်လိုက်များနှင့် အစွန်းများကို ဒေတာထုတ်လွှတ်ခြင်းအတွက် စောင့်ဆိုင်းနေသည့် ငွေပေးငွေယူများမှ ဤဒေတာကို ဖမ်းယူထားသော ငွေပေးငွေယူဆီသို့ ညွှန်ပြပါသည်။ ဂရပ်တွင် loop တစ်ခုရှိလျှင် deadlock ဖြစ်ပေါ်လာသည်ဟု ယူဆပါသည်။ အထူးသဖြင့်ဖြန့်ဝေထားသောဒေတာဘေ့စ်များတွင်စောင့်ဆိုင်းဂရပ်ဖစ်တည်ဆောက်ခြင်းသည်စျေးကြီးသောလုပ်ငန်းစဉ်တစ်ခုဖြစ်သည်။

နှစ်ဆင့်သော့ခတ်ခြင်း - ငွေပေးငွေယူ၏အစတွင် အသုံးပြုသည့် အရင်းအမြစ်အားလုံးကို သိမ်းယူပြီး အဆုံးတွင် ၎င်းတို့အား ထုတ်လွှတ်ပေးခြင်းဖြင့် သော့ခတ်မှုများကို တားဆီးပေးသည်

ပိတ်ဆို့ခြင်းလုပ်ငန်းအားလုံးသည် ပထမသော့ဖွင့်ခြင်း၏ ရှေ့တွင်ရှိရမည်။ ၎င်းတွင် ဆုပ်ကိုင်ထားသည့်အရာများစုပုံနေသည့်အတောအတွင်း၊ ဆုပ်ကိုင်ထားသည့်အဆင့် (Growing Phase) နှင့် ဆုပ်ကိုင်ထားသောအဆင့် (Shrinking Phase) ဟူ၍ အဆင့်နှစ်ဆင့်ရှိသည်။ အရင်းအမြစ်များထဲမှ တစ်ခုကို ဖမ်းယူရန် မဖြစ်နိုင်ပါက အရောင်းအဝယ် ပြန်စပါသည်။ ဥပမာအားဖြင့်၊ ငွေပေးငွေယူများစွာသည် တူညီသောအရင်းအမြစ်များကို ယှဉ်ပြိုင်ပါက၊ ငွေပေးငွေယူတစ်ခုသည် လိုအပ်သောအရင်းအမြစ်များကို ရယူနိုင်မည်မဟုတ်ပါ။

အဆင့်နှစ်ဆင့် ကတိက၀တ်တစ်ခုသည် ဒေတာဘေ့စ်ပုံတူများအားလုံးကို လုပ်ဆောင်ကြောင်း သေချာစေသည်။

ဒေတာဘေ့စ်တစ်ခုစီသည် မှတ်တမ်းသို့ ပြောင်းလဲမည့် ဒေတာအကြောင်း အချက်အလက်ကို ထည့်သွင်းပြီး ညှိနှိုင်းရေးမှူး OK (မဲပေးခြင်းအဆင့်) ကို တုံ့ပြန်သည်။ လူတိုင်း OK တုံ့ပြန်ပြီးနောက်၊ ညှိနှိုင်းရေးမှူးက လူတိုင်းကို ကတိပြုရန် အချက်ပြမှုတစ်ခု ပေးပို့သည်။ ကတိပြုပြီးနောက်၊ ဆာဗာများသည် OK တုံ့ပြန်သည်၊ အနည်းဆုံးတစ်ခုက OK မတုံ့ပြန်ပါက၊ ညှိနှိုင်းရေးမှူးသည် ဆာဗာများအားလုံးသို့ ပြောင်းလဲမှုများကို ပယ်ဖျက်ရန် အချက်ပြချက်တစ်ခု ပေးပို့ပါသည်။

အချိန်တံဆိပ်နှိပ်နည်း

ငယ်ရွယ်သော ငွေပေးငွေယူဖြင့် ပါ၀င်သည့် ဒေတာကို ရယူရန် ကြိုးပမ်းသောအခါ အဟောင်းငွေပေးငွေယူကို ပြန်လှည့်ပါသည်။

ငွေပေးငွေယူတစ်ခုစီကို အချိန်တံဆိပ်တစ်ခု သတ်မှတ်ပေးသည်။ TS ကွပ်မျက်မှုစတင်ချိန်နှင့်သက်ဆိုင်သည်။ အကယ်လို့ Ti အဟောင်းတွေ Tjထိုအခါ TS(Ti) < TS(Tj).

ငွေပေးငွေယူကို ပြန်လှည့်သောအခါ၊ အချိန်တံဆိပ်အသစ်တစ်ခု သတ်မှတ်ပေးသည်။ ဒေတာတစ်ခုစီရှိကြပါတယ်။ Q ငွေပေးငွေယူတွင် ပါဝင်ပတ်သက်မှုကို အညွှန်းနှစ်ခုဖြင့် မှတ်သားထားသည်။ W-TS(Q) - စံချိန်တင်အောင်မြင်စွာပြီးဆုံးခဲ့သော အသက်အငယ်ဆုံးငွေပေးငွေယူ၏ အချိန်တံဆိပ် Q. R-TS(Q) — ဖတ်ပြီးသော မှတ်တမ်းကို လုပ်ဆောင်ခဲ့သော အသက်အငယ်ဆုံး ငွေပေးငွေယူ၏ အချိန်တံဆိပ် Q.

ငွေလွှဲတဲ့အခါ T အချက်အလက်ဖတ်ရန်တောင်းဆိုမှုများ Q ရွေးချယ်စရာနှစ်ခုရှိသည်။

လျှင် TS(T) < W-TS(Q)ဆိုလိုသည်မှာ၊ ဒေတာကို ငယ်ရွယ်သော ငွေပေးငွေယူဖြင့် အပ်ဒိတ်လုပ်ပြီး၊ ထို့နောက် အရောင်းအဝယ်ဖြစ်သည်။ T ပြန်လှည့်သည်။

လျှင် TS(T) >= W-TS(Q)ထို့နောက် စာဖတ်ခြင်းကို ဆောင်ရွက်ပေးသည်။ R-TS(Q) ဒါဟာဖြစ်လာ MAX(R-TS(Q), TS(T)).

ငွေလွှဲတဲ့အခါ T ဒေတာပြောင်းလဲမှုများကို တောင်းဆိုသည်။ Q ရွေးချယ်စရာနှစ်ခုရှိသည်။

လျှင် TS(T) < R-TS(Q)ဆိုလိုသည်မှာ၊ ဒေတာကို ငယ်ရွယ်သော အရောင်းအ၀ယ်တစ်ခုက ဖတ်ထားပြီးသားဖြစ်ပြီး အပြောင်းအလဲတစ်ခု ပြုလုပ်ပါက ပဋိပက္ခများ ဖြစ်ပေါ်လာမည်ဖြစ်သည်။ ငွေလွှဲခြင်း။ T ပြန်လှည့်သည်။

လျှင် TS(T) < W-TS(Q)ဆိုလိုသည်မှာ၊ ငွေပေးငွေယူသည် ပိုတန်ဖိုးအသစ်တစ်ခုကို ထပ်ရေးရန်ကြိုးစားသည်၊ ငွေပေးငွေယူ T သည် နောက်ပြန်ဆုတ်သွားသည်။ အခြားကိစ္စများတွင် အပြောင်းအလဲကို ဆောင်ရွက်သည်။ W-TS(Q) တန်းတူဖြစ်လာသည်။ TS(T).

စျေးကြီးသောစောင့်ဆိုင်းဂရပ်တည်ဆောက်မှုမလိုအပ်ပါ။ အဟောင်းများသည် ငွေပေးငွေယူအသစ်များပေါ်တွင်မူတည်သောကြောင့် စောင့်ဆိုင်းဂရပ်တွင် သံသရာမရှိပါ။ အရောင်းအ၀ယ်များကို မစောင့်ဘဲ ချက်ခြင်းပြန်ဆုတ်သွားသောကြောင့် သော့ပိတ်မှုများမရှိပါ။ Cascading rollback များသည် ဖြစ်နိုင်သည်။ အကယ်လို့ Ti လှိမ့်သွားသည်နှင့် Tj ပြောင်းလဲသွားတဲ့ ဒေတာကို ဖတ်တယ်။ Tiထိုအခါ Tj ပြန်လှည့်သင့်တယ်။ တစ်ချိန်တည်းမှာဆိုရင် Tj ကတိကဝတ်ပြုပြီးသည်နှင့် တည်ငြိမ်ရေးမူကို ချိုးဖောက်ရာရောက်လိမ့်မည်။

Cascading rollbacks များအတွက် အဖြေများထဲမှ တစ်ခု။ ငွေပေးငွေယူတစ်ခုသည် အဆုံးတွင် ရေးထားသော လုပ်ဆောင်ချက်အားလုံးကို ပြီးမြောက်စေပြီး အခြားငွေပေးချေမှုများသည် ထိုလုပ်ဆောင်ချက်ကို ပြီးမြောက်ရန် စောင့်ရပါမည်။ ငွေလွှဲမှုများကို မဖတ်မီ ကတိပြုရန် စောင့်ပါ။

သောမတ်စ် ရေးနည်းဥပဒေ - ငယ်ရွယ်သော ငွေပေးငွေယူဖြင့် အပ်ဒိတ်လုပ်ထားသော အချက်အလက်ကို အသက်ကြီးသူက ထပ်မရေးရန် တားမြစ်ထားသည့် အချိန်တံဆိပ်ရိုက်နည်း၏ ကွဲလွဲချက်

ငွေပေးငွေယူ T ဒေတာပြောင်းလဲမှုများကို တောင်းဆိုသည်။ Q။ လျှင် TS(T) < W-TS(Q)ဆိုလိုသည်မှာ၊ ငွေပေးငွေယူသည် အသစ်သောတန်ဖိုးတစ်ခုကို ထပ်ရေးရန်ကြိုးစားသည်၊ ငွေပေးငွေယူ T သည် အချိန်တံဆိပ်တုံးနည်းလမ်းအတိုင်း ပြန်မလှည့်ပါ။

source: www.habr.com

မှတ်ချက် Add