Why Connecting pooling

Why Connection pooling

Database တွေက mostly C/C++ စတဲ့ system programming language တွေနဲ့ရေးထားကြတယ်။ Application တွေကျတော့ C#, Java, Node.js စသဖြင့်ရှိကြမယ်ပေါ့။

ခုနက application program နဲ့ DB ကျတော့ different language ဖြစ်မယ် အဲ့တော့ communicate လုပ်ချင်ရင်လုပ်လို့ရတဲ့နည်းက TCP/IP networking အရပဲလုပ်လို့ရမယ်။

Application program ကနေ Database driver ဥပမာ Java ဆို JDBC driver အောက်ကနေ ဆိုင်ရာ Oracle, MySQL driver တွေကနေတဆင့် ဆိုင်ရာ database ဆီ connect လုပ်တယ်။ command တွေပို့တယ် result ယူတယ်ပေါ့။

Database connection ဆိုတာ တကယ်တမ်းက အောက်ခြေမှာ TCP connection ပဲ။ အဲ့တော့ db connection တခုဖွင့်ဖို့က TCP connection ချိတ်ရမယ် authentication, authorization လုပ်ရမယ်။ DB server ဘက်မှာလဲ ခုနက connection တခုဆီဖို့ သိမ်းထားရတဲ့ data တွေရှိတယ်။ Server တခုကို max_connection ဘယ်လောက် နိုင်လဲဆိုတဲ့ limit တွေ ထားလို့ရတယ်။

TCP protocol ကိုယ်တိုင်က costly ဖြစ်တယ်။ three way handshake ဘာညာလိုတယ်။ အဲ့အပေါ်မှာခုနက ပြောတဲ့ database authentication ဘာညာဖို့ ထပ်ကုန်တယ်။ ဒါမို့ DB conncetion တွေက costly ဖြစ်တယ်ပြောတာ။

အဲ့တော့ ခုနက connection တွေဖွင့်တာ cost ကုန်တယ်ဆိုလို့ application ဘက်ကနေ ပြီး connection တခုထဲပဲထားသုံးမယ်ဆိုလဲ မရဘူး။ဘာလို့ဆိုတော့ application အနေနဲ့က multiple user transaction တွေလုပ်နေရတာ။ အဲ့တော့ connection တခုတည်းကို ထားဖို့ကအဆင်မပြေဘူး။

နောက်တခုက connection က ဖွင့်လိုက်ပိတ်လိုက်လုပ်ရင် ခုနက TCP ချိတ်တာ authentication လုပ်တာတွေအတွက်က အချိန်ကုန်တယ်။ အဲ့တော့ connection ကိုဖွင့်လိုက်ပိတ်လိုက်မလုပ်ပဲ တခါတည်းဖွင့်ထားတာ ကပိုအဆင်ပြေတယ်။

Connection pooling ဆိုတဲ့ concept က connection တွေ အများကြီးကို pool တခုထဲမှာသိမ်းထားမယ်။ ဖွင့်ထားတာပေါ့။ ပြန်မပိတ်ဘူး။ ArrayList သဘောပေါ့။ အဲ့မှာ connection တခု ဆီမှာ state ၂ မျိုးရှိတယ်။ လက်ရှိသုံးနေတဲ့ active connection, idle connection ဆိုပြီး။

Active ဆိုတာ application က connection pool ထဲက နေ ယူသုံးထားတဲ့ connection လက်ရှိသုံးနေတဲ့ကောင်ပေါ့။ Idle ကျတော့သုံးမနေဘူး။ အဲ့တော့ application က db connection တခုလိုရင် connection pool ထဲကနေ idle ဖြစ်တဲ့ကောင်ကိုယူတယ် ပြီးရင် သုံးတယ် (active ဖြစ်သွားမယ်) နောက် သုံးလို့ပြီးရင် pool ထဲပြန်ထဲ့ပေးလိုက်တယ်။ အဲ့တော့ idle ဖြစ်တယ်။

အဲ့လိုနည်းနဲ့ connection တွေကို reuse ပြန်လုပ်တယ်။ နောက်ကွယ်မှာ connection က broken ဖြစ်တာမျိုး (TCP level မှာဖြစ်တတတ်တယ်) အဲ့တာကိုလဲ ping လိုသဘောမျိုးသုံးပြီး connection pool တွေက ထိန်းတယ်စစ််တယ် လိုအပ်ရင် ပြန် connect လုပ်တယ်။

c3p0 တို့လို connection pooling library တွေရှိတယ်သာမာန်အားဖြင့် programmer ကဘာမှလုပ်စရာမလိုဘူး ဆိုင်ရာ ORM တွေသုံးရင် JPA ကကောင်တွေသုံးရင်ပါပြီးသားဖြစ်တယ်။

Original link=>(https://m.facebook.com/story.php?story_fbid=pfbid0MSJDB2iZFM2KTd6PGiAmchzGFLZQ7qkKAqCUzoebLaDbvA2ak1AmsKMmbhBxzSTcl&id=1819241055&mibextid=Nif5oz)

Leave a comment