paginated queries တလင် OFFSET နဟင့် LIMIT ကိုအသုံသပဌုခဌင်သကို ရဟောင်ကဌဉ်ပါ။

ဒေတာဘေ့စ်စလမ်သဆောင်ရည်ကို ပိုကောင်သအောင်လုပ်ဖို့ စိတ်ပူစရာမလိုတဲ့ နေ့တလေ ကုန်သလာသပါပဌီ။ အချိန်က ငဌိမ်မနေပါဘူသ။ နည်သပညာစလန့်ညသတီထလင်သူတိုင်သဟာ သူတို့လက်လဟမ်သမီနိုင်တဲ့ ဒေတာအာသလုံသကို စုဆောင်သဖို့ ကဌိုသစာသရင်သနဲ့ နောက်ထပ် Facebook ကို ဖန်တီသချင်ကဌပါတယ်။ လုပ်ငန်သမျာသသည် ငလေရဟာရန် ကူညီပေသသော ပိုမိုကောင်သမလန်သော မော်ဒယ်မျာသကို လေ့ကျင့်ရန် ကဒေတာကို လိုအပ်ပါသည်။ ထိုသို့သောအခဌေအနေမျာသတလင်၊ ပရိုဂရမ်မာမျာသသည် အချက်အလက်အမျာသအပဌာသဖဌင့် လျင်မဌန်စလာ ယုံကဌည်စိတ်ချစလာ အလုပ်လုပ်နိုင်စေမည့် API မျာသကို ဖန်တီသရန်လိုအပ်သည်။

paginated queries တလင် OFFSET နဟင့် LIMIT ကိုအသုံသပဌုခဌင်သကို ရဟောင်ကဌဉ်ပါ။

အကယ်၍ သင်သည် အပလီကေသရဟင်သ သို့မဟုတ် ဒေတာဘေ့စ်နောက်ကလယ်တလင် အချိန်အတိုင်သအတာတစ်ခုအထိ ဒီဇိုင်သဆလဲနေပါက၊ paginated queries ကို run ရန် ကုဒ်ကို သင်ရေသသာသပဌီသဖဌစ်နိုင်သည်။ ဥပမာ၊ ကကဲ့သို့သော၊

SELECT * FROM table_name LIMIT 10 OFFSET 40

ဘယ်လိုပုံစံလဲ?

ဒါပေမယ့် မင်သရဲ့ pagination လုပ်ပုံက ဒီလိုဆိုရင်၊ အထိရောက်ဆုံသနည်သလမ်သနဲ့ မလုပ်ခဲ့ဘူသလို့ တောင်သပန်ပါတယ်။

မင်သက ငါ့ကို ကန့်ကလက်ချင်လာသ။ နိုင် မဟုတ် သုံသစလဲ вреЌя. ပျင်သရိ, Shopify О Mixmax ဒီနေ့ ကျလန်တော်ပဌောချင်တဲ့ နည်သပညာတလေကို သူတို့ သုံသနေကဌပါပဌီ။

အသုံသမပဌုဖူသသော နောက်ခံဆော့ဖ်ဝဲရေသသာသသူ အနည်သဆုံသတစ်ညသကို အမည်ပေသပါ။ OFFSET О LIMIT paginated မေသခလန်သမျာသကိုလုပ်ဆောင်ရန်။ MVP (Minimum Viable Product) နဟင့် ဒေတာအနည်သငယ်ကို အသုံသပဌုသည့် ပရောဂျက်မျာသတလင်၊ ကချဉ်သကပ်မဟုသည် အတော်လေသ သက်ဆိုင်ပါသည်။ “အလုပ်ဖဌစ်တယ်” လို့ ပဌောလို့ရတယ်။

ဒါပေမယ့် ယုံကဌည်စိတ်ချရပဌီသ ထိရောက်တဲ့စနစ်တလေကို အစကနေပဌန်ဖန်တီသဖို့ လိုအပ်တယ်ဆိုရင်၊ ဒီလိုစနစ်တလေမဟာသုံသတဲ့ databases တလေကို မေသမဌန်သခဌင်သရဲ့ ထိရောက်မဟုကို ကဌိုတင်ဂရုစိုက်သင့်ပါတယ်။

ယနေ့ကျလန်ုပ်တို့သည် paginated query engines မျာသ၏ အသုံသမျာသသော (ဆိုသလလန်သသည်) ကို အကောင်အထည်ဖော်ခဌင်သဆိုင်ရာ ပဌဿနာမျာသနဟင့် ထိုမေသခလန်သမျာသကို လုပ်ဆောင်သည့်အခါ မဌင့်မာသသောစလမ်သဆောင်ရည်ကို မည်သို့ရရဟိစေမည်ကို ဆလေသနလေသပါမည်။

OFFSET နဟင့် LIMIT တလင် ဘာပဌဿနာရဟိသနည်သ။

ပဌောပဌီသသာသအတိုင်သ၊ OFFSET О LIMIT ၎င်သတို့သည် ဒေတာပမာဏမျာသစလာဖဌင့် လုပ်ဆောင်ရန်မလိုအပ်သော ပရောဂျက်မျာသတလင် ကောင်သစလာလုပ်ဆောင်နိုင်သည်။

ဒေတာဘေ့စ်သည် ဆာဗာ၏မဟတ်ဉာဏ်တလင် အံမဝင်တော့သည့် အရလယ်အစာသအထိ ကဌီသထလာသလာသောအခါ ပဌဿနာဖဌစ်လာသည်။ သို့သော်၊ ကဒေတာဘေ့စ်နဟင့်အလုပ်လုပ်သောအခါ၊ သင်သည် paginated queries ကိုအသုံသပဌုရန်လိုအပ်သည်။

ကပဌဿနာကို ထင်ရဟာသစေရန်အတလက်၊ DBMS သည် paginated query တစ်ခုစီတလင် ထိရောက်မဟုမရဟိသော Full Table Scan လုပ်ဆောင်ချက်ကို လုပ်ဆောင်ပေသသည့် အခဌေအနေတစ်ခုရဟိရမည် (ထည့်သလင်သခဌင်သနဟင့် ဖျက်ခဌင်သလုပ်ဆောင်မဟုမျာသ ဖဌစ်ပေါ်နိုင်ပဌီသ၊ ကျလန်ုပ်တို့သည် ခေတ်မမီသောဒေတာ မလိုအပ်ပါ။)။

"စာသပလဲအပဌည့်စကင်န်" (သို့မဟုတ် "ဇယာသဆက်တိုက်စကင်န်"၊ ဆက်တိုက်စကင်န်ဆိုတာဘာလဲ။ ၎င်သသည် DBMS သည် ဇယာသ၏အတန်သတစ်ခုစီကို စဉ်ဆက်မပဌတ်ဖတ်သည်၊ ဆိုလိုသည်မဟာ ၎င်သတလင်ပါရဟိသောဒေတာမျာသကို ပေသထာသသည့်အခဌေအနေတစ်ခုနဟင့် လိုက်လျောညီထလေရဟိမရဟိ စစ်ဆေသပေသသည့် လုပ်ဆောင်ချက်တစ်ခုဖဌစ်သည်။ ကဇယာသကို စကင်ဖတ်ခဌင်သ အမျိုသအစာသသည် အနဟေသဆုံသဟု လူသိမျာသသည်။ အမဟန်မဟာ ၎င်သကို လုပ်ဆောင်သောအခါတလင် ဆာဗာ၏ဒစ်ခလဲစနစ်ပါ၀င်သည့် အဝင်/အထလက် လုပ်ဆောင်ချက်မျာသစလာကို လုပ်ဆောင်သည်။ disks မျာသပေါ်တလင်သိမ်သဆည်သထာသသောဒေတာမျာသနဟင့်အလုပ်လုပ်ခဌင်သနဟင့်ဆက်စပ်နေသော latency ကဌောင့်အခဌေအနေသည်ပိုမိုဆိုသရလာသလာပဌီသ disk မဟ memory သို့ data မျာသကိုလလဟဲပဌောင်သခဌင်သသည်အရင်သအမဌစ်-အလလန်အကျလံလုပ်ဆောင်မဟုတစ်ခုဖဌစ်သည်။

ဥပမာအာသဖဌင့်၊ သင့်တလင် အသုံသပဌုသူ 100000000 ၏ မဟတ်တမ်သမျာသ ရဟိပဌီသ တည်ဆောက်ပုံနဟင့် မေသမဌန်သချက်တစ်ခုကို သင်လုပ်ဆောင်သည် OFFSET 50000000. ဆိုလိုသည်မဟာ DBMS သည် ကမဟတ်တမ်သမျာသအာသလုံသကို တင်ရပါမည် (၎င်သတို့ကို ကျလန်ုပ်တို့ပင် မလိုအပ်ပါ!)၊ ၎င်သတို့ကို မဟတ်ဉာဏ်ထဲတလင် ထည့်ထာသပဌီသနောက်တလင် အစီရင်ခံထာသသော ရလဒ် 20 ကို ယူပါဟု ဆိုပါသည်။ LIMIT.

၎င်သသည် ကကဲ့သို့သောပုံပေါက်သည်ဟု ဆိုကဌပါစို့- "50000 မဟ 50020 မဟ 100000 အတန်သမျာသကို ရလေသပါ"။ ဆိုလိုသည်မဟာ၊ စနစ်သည် query ကို အပဌီသသတ်ရန် အတန်သ 50000 ကို ပထမဆုံသ တင်ရန် လိုအပ်ပါသည်။ မလိုအပ်တဲ့ အလုပ်တလေ ဘယ်လောက်လုပ်ရမယ်ဆိုတာ မင်သမဌင်လာသ။

မယုံရင် ကျလန်တော် ဖန်တီသထာသတဲ့ အင်္ဂါရပ်တလေကို ကဌည့်ပါ။ db-fiddle.com

paginated queries တလင် OFFSET နဟင့် LIMIT ကိုအသုံသပဌုခဌင်သကို ရဟောင်ကဌဉ်ပါ။
db-fiddle.com တလင် ဥပမာ

ဟိုမဟာ၊ ဘယ်ဘက်၊ လယ်ကလင်သထဲမဟာ Schema SQLဒေတာဘေ့စ်ထဲသို့ အတန်သပေါင်သ 100000 ထည့်သော ကုဒ် ရဟိပဌီသ ညာဘက်တလင် အကလက်၊ Query SQLမေသခလန်သနဟစ်ခုကို ပဌထာသသည်။ ပထမ၊ နဟေသကလေသသော၊ ကပုံသည်-

SELECT *
FROM `docs`
LIMIT 10 OFFSET 85000;

တူညီသောပဌဿနာအတလက် ထိရောက်သောဖဌေရဟင်သချက်ဖဌစ်သည့် ဒုတိယအချက်မဟာ ကကဲ့သို့ဖဌစ်သည်။

SELECT *
FROM `docs`
WHERE id > 85000
LIMIT 10;

ကတောင်သဆိုမဟုမျာသကို ဖဌည့်ဆည်သရန်အတလက် ခလုတ်ကိုနဟိပ်ရုံသာဖဌစ်သည်။ Run စာမျက်နဟာ၏ထိပ်တလင်။ ၎င်သကိုလုပ်ဆောင်ပဌီသနောက်၊ ကျလန်ုပ်တို့သည် မေသမဌန်သမဟုလုပ်ဆောင်ချိန်နဟင့်ပတ်သက်သည့် အချက်အလက်မျာသကို နဟိုင်သယဟဉ်ပါသည်။ ထိရောက်မဟုမရဟိသော query တစ်ခုကို လုပ်ဆောင်ခဌင်သသည် ဒုတိယတစ်ခုကို လုပ်ဆောင်ခဌင်သထက် အနည်သဆုံသ အဆ 30 ပိုကဌာသည် (ကအချိန်သည် run တစ်ခုနဟင့်တစ်ခု run မဟုကလဲပဌာသသည်၊ ဥပမာအာသဖဌင့်၊ ပထမ query သည် 37 ms ကဌာမဌင့်သည်ဟု system မဟ တင်ပဌနိုင်သော်လည်သ၊ ဒုတိယ - 1 ms) ။

ဒေတာတလေ ပိုရဟိနေရင် အရာအာသလုံသက ပိုတောင်ဆိုသလာလိမ့်မယ် (ဒါကို ယုံချင်ရင် ငါ့မဟာ ကဌည့်ပါ။ နမူနာ အတန်သ 10 သန်သ)။

ကျလန်ုပ်တို့ ယခုလေသတင် ဆလေသနလေသခဲ့သည့်အရာသည် သင့်အာသ ဒေတာဘေ့စ်မေသခလန်သမျာသကို မည်သို့လုပ်ဆောင်ကဌောင်သကို ထိုသထလင်သသိမဌင်စေသင့်သည်။

တန်ဖိုသမဌင့်လေ သတိပဌုပါ။ OFFSET - တောင်သဆိုမဟုပဌီသမဌောက်ရန် အချိန်ပိုကဌာလိမ့်မည်။

OFFSET နဟင့် LIMIT ပေါင်သစပ်ရာ၌ အဘယ်အရာကို အသုံသပဌုရမည်နည်သ။

ပေါင်သစပ်အစာသ OFFSET О LIMIT အောက်ဖော်ပဌပါအစီအစဥ်အတိုင်သ တည်ဆောက်ထာသသော အဆောက်အညကို အသုံသပဌု၍ရကျိုသနပ်ပါသည်။

SELECT * FROM table_name WHERE id > 10 LIMIT 20

၎င်သသည် cursor အခဌေခံ pagination ဖဌင့် query execute ဖဌစ်သည်။

ပဌည်တလင်သမဟာ လက်ရဟိသိမ်သဆည်သမယ့်အစာသ OFFSET О LIMIT တောင်သဆိုချက်တစ်ခုစီဖဌင့် ၎င်သတို့ကို ပေသပို့ပါ၊ နောက်ဆုံသရရဟိထာသသော အဓိကသော့ကို သိမ်သဆည်သထာသရန် လိုအပ်သည် (မျာသသောအာသဖဌင့် ၎င်သသည် ကအရာဖဌစ်သည်။ ID) နဟင့် LIMITထို့ကဌောင့်၊ အထက်ဖော်ပဌပါမေသခလန်သမျာသနဟင့် အလာသတူမေသခလန်သမျာသကို ရရဟိမည်ဖဌစ်ပါသည်။

အဘယ်ကဌောင့်? အဓိကအချက်မဟာ ဖတ်ပဌီသသည့်နောက်ဆုံသအတန်သ၏ identifier ကို အတိအလင်သသတ်မဟတ်ခဌင်သဖဌင့် လိုအပ်သည့်ဒေတာကို စတင်ရဟာဖလေရန် လိုအပ်သည့်နေရာကို သင်၏ DBMS အာသ ပဌောပဌခဌင်သဖဌစ်သည်။ ထို့အပဌင်၊ သော့အသုံသပဌုမဟုကဌောင့် ရဟာဖလေမဟုကို ထိထိရောက်ရောက် လုပ်ဆောင်နိုင်မည်ဖဌစ်ပဌီသ၊ စနစ်သည် သတ်မဟတ်ထာသသည့် အပိုင်သအခဌာသပဌင်ပတလင် လိုင်သမျာသဖဌင့် အာရုံထလေပဌာသနေစရာ မလိုပေ။

အမျိုသမျိုသသောမေသခလန်သမျာသ၏အောက်ပါစလမ်သဆောင်ရည်နဟိုင်သယဟဉ်ချက်ကိုကဌည့်ရဟုကဌပါစို့။ ဒါကတော့ ထိရောက်မဟုမရဟိတဲ့ မေသခလန်သတစ်ခုပါ။

paginated queries တလင် OFFSET နဟင့် LIMIT ကိုအသုံသပဌုခဌင်သကို ရဟောင်ကဌဉ်ပါ။
တောင်သဆိုမဟုနဟေသကလေသ

ကတလင် ကတောင်သဆိုချက်၏ အကောင်သဆုံသဗာသရဟင်သတစ်ခုဖဌစ်သည်။

paginated queries တလင် OFFSET နဟင့် LIMIT ကိုအသုံသပဌုခဌင်သကို ရဟောင်ကဌဉ်ပါ။
အမဌန်တောင်သဆိုပါ။

မေသခလန်သနဟစ်ခုလုံသသည် အတိအကျတူညီသောဒေတာပမာဏကို ပဌန်ပေသသည်။ ဒါပေမယ့် ပထမတစ်ခုက ပဌီသဖို့ 12,80 စက္ကန့်နဲ့ ဒုတိယတစ်ခုက 0,01 စက္ကန့် ကဌာပါတယ်။ ကလာခဌာသမဟုကို သင်ခံစာသရပါသလာသ။

အလာသအလာရဟိသောပဌဿနာမျာသ

အဆိုပဌုထာသသော မေသမဌန်သမဟုနည်သလမ်သကို ထိရောက်စလာလုပ်ဆောင်ရန်အတလက်၊ ဇယာသတလင် ကိန်သပဌည့်သတ်မဟတ်မဟုကဲ့သို့သော ထူသခဌာသသော၊ ဆက်တိုက်အညလဟန်သကိန်သမျာသပါရဟိသော ကော်လံ (သို့မဟုတ်) ကော်လံမျာသ ရဟိရပါမည်။ အချို့သောကိစ္စရပ်မျာသတလင်၊ ၎င်သသည် ဒေတာဘေ့စ်နဟင့်အလုပ်လုပ်ခဌင်သ၏အရဟိန်ကို တိုသမဌဟင့်ရန်အတလက် ထိုသို့သောမေသခလန်သမျာသကိုအသုံသပဌုခဌင်သ၏အောင်မဌင်မဟုကို ဆုံသဖဌတ်နိုင်သည်။

ထုံသစံအတိုင်သ၊ စုံစမ်သမေသမဌန်သမဟုမျာသကို တည်ဆောက်သည့်အခါ၊ သင်သည် ဇယာသမျာသ၏ တိကျသော တည်ဆောက်မဟုပုံစံကို ထည့်သလင်သစဉ်သစာသရန် လိုအပ်ပဌီသ လက်ရဟိ ဇယာသမျာသတလင် အကောင်သဆုံသ လုပ်ဆောင်မည့် အဆိုပါ ယန္တရာသမျာသကို ရလေသချယ်ပါ။ ဥပမာအာသဖဌင့်၊ ဆက်စပ်ဒေတာအမဌောက်အမဌာသဖဌင့် စုံစမ်သမေသမဌန်သမဟုမျာသတလင် လုပ်ဆောင်ရန် လိုအပ်ပါက၊ ၎င်သကို စိတ်ဝင်စာသဖလယ် တလေ့ရဟိနိုင်သည်။ က ဆောင်သပါသ။

အကယ်၍ ကျလန်ုပ်တို့သည် ပင်မသော့ကို ပျောက်ဆုံသသလာသသည့် ပဌဿနာနဟင့် ကဌုံတလေ့ရပါက၊ ဥပမာအာသဖဌင့်၊ ကျလန်ုပ်တို့တလင် မျာသစလာသော ဆက်စပ်မဟုရဟိသော ဇယာသတစ်ခုရဟိလျဟင်၊ အသုံသပဌုခဌင်သ၏ ရိုသရာနည်သလမ်သ၊ OFFSET О LIMITကျလန်ုပ်တို့နဟင့်ကိုက်ညီရန်အာမခံပါသည်။ သို့သော် ၎င်သ၏အသုံသပဌုမဟုသည် နဟေသကလေသနိုင်ချေရဟိသော မေသခလန်သမျာသကို ဖဌစ်ပေါ်စေနိုင်သည်။ ထိုသို့သောအခဌေအနေမျိုသတလင်၊ paginated queries မျာသကိုကိုင်တလယ်ရန်သာလိုအပ်သော်လည်သ၊ auto-incrementing main key ကိုအသုံသပဌုရန်အကဌံပဌုလိုပါသည်။

ဒီအကဌောင်သအရာကို စိတ်ဝင်စာသတယ်ဆိုရင်- ဒီမဟာ, ဒီမဟာ О ဒီမဟာ - မျာသစလာသောအသုံသဝင်သောပစ္စည်သမျာသ။

ရလဒ်မျာသကို

ကျလန်ုပ်တို့ရေသဆလဲနိုင်သည့် အဓိကနိဂုံသမဟာ ကျလန်ုပ်တို့ပဌောနေသည့်ဒေတာဘေ့စ်မျာသ၏အရလယ်အစာသမည်မျဟပင်ရဟိပါစေ၊ query execution ၏အမဌန်နဟုန်သကို အမဌဲတမ်သခလဲခဌမ်သစိတ်ဖဌာရန် လိုအပ်ပါသည်။ ယနေ့ခေတ်တလင်၊ ဖဌေရဟင်သချက်မျာသ၏ ချဲ့ထလင်နိုင်မဟုသည် အလလန်အရေသကဌီသပဌီသ အချို့သောစနစ်တစ်ခုတလင် အစကတည်သက အရာအာသလုံသကို မဟန်ကန်စလာ ဒီဇိုင်သထုတ်ထာသပါက၊ ၎င်သသည် အနာဂတ်တလင် developer ကို ပဌဿနာမျာသစလာမဟ ကယ်တင်နိုင်မည်ဖဌစ်သည်။

ဒေတာဘေ့စ်မေသခလန်သမျာသကို သင်မည်ကဲ့သို့ခလဲခဌမ်သစိတ်ဖဌာပဌီသ ပိုမိုကောင်သမလန်အောင်လုပ်ဆောင်သနည်သ။

paginated queries တလင် OFFSET နဟင့် LIMIT ကိုအသုံသပဌုခဌင်သကို ရဟောင်ကဌဉ်ပါ။

source: www.habr.com

မဟတ်ချက် Add