Database ကို စတင်လေ့လာခါစ ဒါမှမဟုတ် Web/Backend Development ကို လုပ်ကိုင်နေသူတွေ အမေးများဆုံး မေးခွန်းတစ်ခုရှိပါတယ်။
"Table တစ်ခုမှာ Data အသစ်တစ်ခု သွင်းတိုင်း ID နံပါတ် အစဉ်လိုက်တိုးသွားအောင်
SELECT MAX(id) + 1လုပ်ပြီး သုံးရင်လည်း ရတာပဲ၊ ဘာလို့ Sequence ဆိုတဲ့ Object ကို သီးသန့် သုံးနေရတာလဲ?"
ဒီနေ့တော့ Database Administrator (DBA) တစ်ယောက်ရဲ့ အမြင်နဲ့၊ မျက်စိထဲ ကွင်းကွင်းကွက်ကွက် မြင်သာသွားစေမယ့် လက်တွေ့ဘဝက ဥပမာလေးတွေ သုံးပြီး Sequence အကြောင်းကို အသေးစိတ် ရှင်းပြပေးသွားပါမယ်။
၁။ လက်တွေ့ဘဝက ဥပမာ- "တန်းစီနံပါတ်ထုတ်စက် (Token Machine)"
လူတွေအများကြီး တစ်ပြိုင်နက်တည်း ပြိုးပြိုးပျက်ပျက် ငွေလာလွှဲနေကြတဲ့ ဘဏ်ကြီးတစ်ခုကို မြင်ယောင်ကြည့်ပါ။
❌ နည်းလမ်း (၁) - လူကိုယ်တိုင် လိုက်မေးတဲ့စနစ် (Max ID + 1 နှင့် တူသည်)
ဘဏ်မှာ တန်းစီနံပါတ်ထုတ်ပေးတဲ့ အလိုအလျောက်စက် မရှိဘူးဆိုပါစို့။ လူတစ်ယောက် ရောက်လာတိုင်း ကောင်တာက ဝန်ထမ်းဆီပြေးသွားပြီး "အမ... အခုနက နောက်ဆုံးလူက ဘယ်နှနံပါတ်လဲဟင်? ကျနော် နောက်တစ်နံပါတ် ယူမယ်နော်" ဆိုပြီး လိုက်မေးရတယ်။
လူနည်းရင်တော့ ပြဿနာမရှိပါဘူး။ ဒါပေမယ့် လူအယောက် ၁၀၀ က တံခါးဝကနေ တစ်ပြိုင်နက်တည်း တိုးဝှေ့ဝင်လာပြီး ဝန်ထမ်းကို ပြိုင်တူ လုမေးကြရင် ဘာဖြစ်မလဲ? ဝန်ထမ်းလည်း ဘယ်သူ့ကို အရင်ဖြေရမှန်းမသိ၊ လူတွေလည်း နံပါတ်လုရင်း ရန်ဖြစ်ကုန်ပါလိမ့်မယ်။ ဘဏ်ကြီးတစ်ခုလုံးလည်း အလုပ်မတွင်တော့ဘဲ စောင့်ဆိုင်းချိန်တွေ အရမ်းကြာသွားမှာပါ။
Database မှာလည်း လူပေါင်းများစွာ (Concurrent Users) က တစ်ပြိုင်နက်တည်း Data သွင်းတဲ့အခါ
MAX(id) + 1
နည်းလမ်းကို သုံးရင် အားလုံးက နောက်ဆုံး ID ကို လုကြည့်ပြီး စောင့်နေရလို့ Database ကြီး လေးသွားတတ်ပါတယ် (ဒါကို DBA ဘာသာစကားနဲ့
Row Lock / Contention
လို့ ခေါ်ပါတယ်)။
✅ နည်းလမ်း (၂) - တန်းစီနံပါတ်ထုတ်စက် ထားလိုက်ခြင်း (Sequence နှင့် တူသည်)
ဘဏ်တံခါးဝမှာ အလိုအလျောက် နံပါတ်ထုတ်ပေးတဲ့ စက်ကလေး (Token Machine) တစ်လုံး ချထားလိုက်တာပါ။ ဘယ်သူ့ကိုမှ သွားမေးနေစရာမလိုဘူး။ ခလုတ်နှိပ်လိုက်တာနဲ့
၁
၊
၂
၊
၃
ဆိုပြီး မထပ်မယ့် အစဉ်လိုက်နံပါတ်တွေ စက္ကန့်ပိုင်းအတွင်း ထွက်လာမယ်။ လူတွေလည်း ဝန်ထမ်းကို ဒုက္ခပေးစရာမလိုဘဲ မိမိနံပါတ်နဲ့မိမိ ငြိမ်ငြိမ်လေး စောင့်ရုံပါပဲ။
Database လောကမှာ Sequence ဆိုတာ အဲဒီ "တန်းစီနံပါတ်ထုတ်စက်" ပါပဲ။
၂။ Database Sequence ဆိုတာ အတိအကျ ဘာလဲ?
Database မှာ Sequence ဆိုတာ သီးသန့်ရပ်တည်နေတဲ့ Database Object တစ်ခု ဖြစ်ပါတယ်။ သူက မည်သည့် Table နဲ့မှ တိုက်ရိုက်တွဲနေတာ မဟုတ်ပါဘူး။ သူတို့်ကို သတ်မှတ်ထားတဲ့ စည်းမျဉ်းအတိုင်း (ဥပမာ - ၁ ကနေစမယ်၊ တစ်ခါခေါ်ရင် ၁ စီတိုးမယ်၊ ဒါမှမဟုတ် ၁၀၀၀ ကနေစပြီး ၅ စီတိုးမယ်) ထူးခြားပြီး ဘယ်တော့မှ မထပ်မယ့် ကိန်းဂဏန်း (Unique Ordered Integers) တွေကို အလိုအလျောက် ထုတ်လုပ်ပေးဖို့ သုံးပါတယ်။
၃။ Senior DBA တစ်ယောက်အနေနဲ့ Sequence ကို ဘာလို့ သုံးဖို့ ညွှန်းတာလဲ?
🚀 (က) Concurrent Performance (ပြိုင်တူ သုံးနိုင်စွမ်း အလွန်ကောင်းခြင်း)
ဒါက အဓိက အကျဆုံး အချက်ပါ။ စနစ်ကြီးတစ်ခုမှာ လူပေါင်းထောင်ချီ၊ သောင်းချီက တစ်ပြိုင်နက်တည်း ငွေလွှဲတာ၊ Data သွင်းတာတွေ လုပ်ကြပါတယ်။ Sequence က Disk ပေါ်မှာ ခဏခဏသွားရှာနေတာမဟုတ်ဘဲ
Memory (RAM)
ပေါ်မှာ အလုပ်လုပ်တာဖြစ်လို့ ဘယ်သူ့ကိုမှ ပေးမစောင့်ဘဲ တစ်ပြိုင်နက်တည်း နံပါတ်တွေကို မထပ်အောင် စက္ကန့်ပိုင်းအတွင်း ဖြန့်ပေးနိုင်ပါတယ်။ (
Cache
စနစ်ကိုပါ သုံးရင် ပိုတောင် မြန်ပါသေးတယ်)။
🛠️ (ခ) Centralized & Flexible (ဗဟိုက ထိန်းချုပ်နိုင်ပြီး ပြောင်းလွယ်ပြင်လွယ်ရှိခြင်း)
Sequence က သီးသန့် Object ဖြစ်တဲ့အတွက် Table တစ်ခုတည်းတင်မရမက Table ပေါင်းစုံမှာပါ မျှဝေသုံးစွဲနိုင်ပါတယ်။ ထို့ပြင် လိုအပ်ချက်အရ နံပါတ်စဉ်ရဲ့ စည်းမျဉ်းတွေကို ပြောင်းလဲချင်ရင် Application Code တွေကို လိုက်ပြင်စရာမလိုဘဲ Database Level ကနေ
ALTER SEQUENCE
အမိန့်တစ်ခုတည်းနဲ့ အလွယ်တကူ ပြောင်းလဲနိုင်ပါတယ်။
💻 (ဂ) Application Independence (လုပ်ငန်းစဉ်များ သီးခြားဖြစ်ခြင်း)
နံပါတ်စဉ် ထုတ်ပေးတဲ့တာဝန် (Identity Generation) ကို Database ဘက်ကပဲ အပြည့်အဝ တာဝန်ယူပေးလိုက်တဲ့အတွက် Backend Developer တွေအနေနဲ့ ID ထပ်သွားမလား၊ မှားသွားမလားဆိုပြီး စိုးရိမ်စရာမလိုတော့ဘဲ Business Logic အပိုင်းကိုပဲ အာရုံစိုက် ရေးသားနိုင်တော့ပါတယ်။
၄။ Database အလိုက် Sequence အသုံးပြုပုံများ
လုပ်ငန်းသုံး Database စနစ်ကြီးတွေဖြစ်တဲ့ Oracle, PostgreSQL, SQL Server တို့မှာ ဒီ Sequence Object ကို အလွန်အသုံးများပါတယ်။
ဥပမာအားဖြင့် PostgreSQL မှာ Sequence တစ်ခု ဆောက်မယ်ဆိုရင်-
CREATE SEQUENCE user_id_seq START WITH 1 INCREMENT BY 1;
Data သွင်းတဲ့အခါ အဆိုပါ Sequence ထဲကနေ နံပါတ်လှမ်းယူပြီး သုံးကြပါတယ်-
INSERT INTO users (id, name) VALUES (nextval('user_id_seq'), 'Yoon Zar Pyi Kyaw');

0 Comments