Tag Archives: mongodb

Don’t forget callback

သောကြာနေ့က Server Side ပိုင်းကို prototype ကို Node.js သုံးပြီး ရေးထားတာကို real data နဲ့ စမ်းကြည့်တော့ ပြဿနာ တက်နေတယ်။ Request ပို့လိုက်ပေမယ့် respond က ပြန်မလာဘူး ဖြစ်နေတယ်။ Test data နဲ့ စမ်းတာကတော့ အကုန် အဆင်ပြေတယ်။

ရေးထားတာက

callback တွေကို ဆင့်ကာ ဆင့်ကာ ခေါ်ထားတာကို တွေ့ရမှာပါ။ Node.js မှာ callback တွေ ဆင့်ကာ မခေါ်ချင်ရင် event commit လုပ်လို့ရပါတယ်။ Async ဖြစ်တဲ့အတွက်ကြောင့် sync လိုမျိုး line bye line ပုံစံ မျိုးထက် ပိုစဉ်းစားရခက်တယ်။ non-blocking, asynchronous architecture ဖြစ်တဲ့ အတွက်ကြောင့် Database က နေ data တစ်ခုခြင်းစီ ထုတ်လိုက်ရင် တစ်ခါနဲ့ တစ်ခါ result order တွေ မတူတာတွေ ရှိတတ်တယ်။

အခုလိုမျိုး အဆင့်ဆင့် စစ်ဆေးရတဲ့ ကိစ္စတွေမှာ အရင်ပြီးတာ အရင်ထွက်လာတယ်။ ဟို အရင်ကလိုမျိုး အရင်လာတာ အရင် တွက် မဟုတ်တော့တဲ့ အတွက်ကြောင့် ပိုပြီးမြန်လာတယ်။ သို့ပေမယ့် CPU က 1 processor နောက်ပြီး nginx worker က တစ်ခုပဲ ဆိုရင်တော့ ဘာမှ မထူးပါဘူး။ တကယ်လို့ 2 processor မှာ 4 worker လောက်နဲ့ run လိုက်ရင်တော့ အရမ်းကို သိသာသွားတယ်။

callback တွေ ဆင့်ကာ ဆင့်ကာ ခေါ်ရတဲ့ အချိန်မှာ ပြဿနာလေးတွေ ရှိတတ်တယ်။ တစ်ခါတစ်လေ callback ခေါ်ဖို့ ကျန်ခဲ့တာဆိုရင်တော့ သေပြီပဲ။ အပေါ်က code မှာ များနေတာ ရှိပါတယ်။ အဲဒါကတော့ for loop ကို တန်းခေါ်ထားပြီး array count ကို မစ်ထားတာပဲ။ တကယ်လို့ အဲဒီ လူက phone number သာမရှိရင် callback က return ပြန်တော့မှာ မဟုတ်တော့ဘူး။

Continue reading

I like Mongodb

သောကြာနေ့က Backend Admin Panel ကို App တစ်ခု အတွက် ရေးဖြစ်တယ်။ Client က Email ကို ထပ်ဖြည့်ချင်တယ်။ Account တစ်ခုမှာ Email က one or more ပါမယ်။ ပုံမှန် သမာရိုးကျ MySQL သုံးမယ်ဆိုရင် ကျွန်တော် တို့ အနေနဲ့ Email field တစ်ခု ထပ်ဖြည့်ရမယ်။ Email one or more ဖြစ်တယ်ဆိုတဲ့ အတွက် ကြောင့် table ဆောက်သင့်တယ်။ မဆောက်ဘဲနဲ့ comman ကို သုံးပြီး ထားမယ်ဆိုလည်း ဖြစ်တယ်။ အနည်းဆုံးတော့ Field တစ်ခု ထပ်ဖြည့်ရမယ်။ နောက်ပြီး UI ပိုင်း ပြင်ရမယ်။ JSON API respond ပြန်တဲ့ အပိုင်းမှာ , သုံးထားရင် split လုပ်ပြီး Array ပြန်ဖို့လိုတယ်။ ဒါဟာ MySQL သုံးထားရင် ကျွန်တော် ပြန်ပြင်ရမယ့် အပိုင်းပါ။

အခု Mongodb သုံးလိုက်တဲ့ အခါမှာတော့ UI က Form မှာ Email field လည်း တစ်ခု ပိုလာတယ်။ data ကို update မလုပ်ခင်မှာ , ကို array ပြောင်းပေးလိုက်တယ်။ ဒါလေးပဲ။ ဘာဆို ဘာမှ မလိုဘူး။ JSON respond ကလည်း email field ရှိရင် ထည့်တယ်။ မရှိရင် မပါလာဘူး။ Database ပိုင်းကို ဘာမှ ထိ စရာမလိုပဲ Client ဘက်က ထပ်ဖြည့်ချင်တဲ့ Field အသစ်တွေကို လွယ်လွယ်နဲ့ လိုသလောက် ထည့်ဖြည့်နိုင်တယ်။ ဒါလေးကို တော်တော်လေး သဘောကျသွားတယ်။

နောက်တချက်က Mongodb export နဲ့ import ကို rockmongo သုံးပြီး အသုံးပြုလိုက်တာ တော်တော်လေးကို လွယ်တာ တွေ့ရတယ်။ ပထမဆုံး production အဆင့်မှာ Mongodb ကို သုံးလိုက်တာ တော်တော်လေးကို အဆင်ပြေသွားတာ တွေ့တယ်။

Mongodb ဟာ Document Base system တွေ အတွက် တော်တော်လေးကို ကောင်းတယ်။ Ornagai လိုမျိုး Search website ပိုင်းကျတော့ အဆင်မပြေတော့ဘူး။ ကျွန်တော် Ornagai ကို ရေးတုန်းက

၁။ တူတာ အရင်ပြ
၂။ စတဲ့ နေရာမှာ ပါတဲ့ စာလုံး ပြ
၃။ အလယ်မှာ ပါတဲ့ စာလုံးပြ
၄။ နောက်ဆု့းမှာ ပါတဲ့ စာလုံးပြ

အဲလို sorting စီထားတယ်။ SQL code ကိုတော့ ဒီမှာ ဖတ်ကြည့်လို့ရတယ်။

Mongodb နဲ့ဆိုရင် အဲလို စီလို့မရတော့ဘူး။ အဲလိုမျိုး result လိုချင်ရင်တော့ map reduce ဒါမှမဟုတ် client ပိုင်းကနေ ပြန်စီမှာ ရမယ်။ Map Reduce ကို ကျွန်တော် ကောင်းကောင်းနားမလည်သေးတဲ့အတွက် မသုံးတတ်သေးတာ အမှန်ပါပဲ။

Mongodb ဟာ Blgo Engine , CMS Engine လိုမျိုးအတွက် တော်တော်လေးကို အသုံးဝင်တယ်။ နောက်ပြီးတော့ Field အသစ်တွေ ဘယ်လောက် လာမယ်ဆိုတာ မသိတဲ့ ကိစ္စတွေမှာလည်း အသုံးဝင်တာကို တွေ့ရတယ်။

ကျွန်တော်ကတော့ MySQL ဖြစ်ဖြစ် Mongodb ဖြစ်ဖြစ် project ပေါ်မှာ ကြည့်ပြီး ဘယ်ဟာကို သုံးသင့်သလဲဆိုတာကိုပဲ ဆုံးဖြတ်ပြီး သုံးဖြစ်မှာပါ။

ExpressJS

ပြီးခဲ့တဲ့ ရုံးပိတ်ရက်က ExpressJS ကို အသုံးပြုပြီး project လေး တစ်ခုလုပ်ဖြစ်သွားတယ်။ ExpressJS ဆိုတာကတော့ Node.js အတွက် web framework တစ်ခုပါ။ ExpressJS က Sinatra ကို အခြေခံထားပြီး connect middleware ကို အသုံးပြုထားပါတယ်။

ပုံမှန် Node.js နဲ့ ရေးရင် ရပေမယ့် Restful API နဲ့ အဆင်မပြေပါဘူး။ တော်တော် အချိန်ပေးရပါတယ်။ ExpressJS ကို သုံးလိုက်တာ တော်တော်လေးကို လွယ်သွားတယ်။ Mobile အတွက် Admin Panel တစ်ခုဖန်တီးရာမှာလည်း Jade Template နဲ့ ရေးရတော့ ပုံမှန် သမာရိုးကျ HTML ရေးရတာထက်တော့ မြန်ပါတယ်။

Continue reading

Real time Todo list Tatoo

Tatoo အကြောင်းကိုတော့ mz blog မှာ ရေးထားခဲ့ဖူးပါတယ်။ Myanmar Link မှာ node.js အကြောင်းပြောရင်းနဲ့ web socket အကြောင်းလည်း မေးမြန်းလို့ ပြောမိပါတယ်။ ဒါနဲ့ web socket ကို သုံးပြီး real time app sample လေး တစ်ခုလောက် ရေးပြမယ်လို့ စဉ်းစားမိတာကနေ လက်ရှိ ရေးထားတဲ့ tatoo ကို socket.io ကို သုံးပြီး real time လေး ဖြစ်အောင် ပြန်ပြင်ထားလိုက်ပါတယ်။ source code ကိုတော့ github မှာ ရနိုင်ပါတယ်။ database ကိုတော့ Mongodb သုံးထားပြီး technology ကိုတော့ node.js ကို အသုံးပြုထားပါတယ်။ အားတဲ့ တစ်နေ့တော့ mz blog မှာ web socket ကို သုံးပြီး node.js နဲ့ real time chat application ရေးပုံလေး ရေးပါအုံးမယ်။

NoSQL — Part 2

အပိုင်း ၁ မှာတော့ Data Stores တွေ အကြောင်းပြောပြီးပါပြီ။

Relational Database မှာ limit less indexing နဲ့ အရမ်းကောင်းမွန်တဲ့ SQL language ရှိပါတယ်။ ဒါကြောင့် Relational Database ဟာ dynamic ဖြစ်ပြီး လူသုံးများနေရတာပါ။ NoSQL မှာတော့ limited ဖြစ်နေတဲ့ query နဲ့ indexing ရှိနေပါတယ်။ နောက်ပြီး JSON လိုမျိုးတွေက SQL language လို Query တွေ ရေးလို့ရမှာ မဟုတ်ပါဘူး။ NoSQL မှာ query ရေးသားတာက Database တစ်ခုနဲ့ တစ်ခုမတူသလို Stores ပေါ်မှာ မူတည်ပြီးတော့လည်း query ရေးသားပုံတွေက မတူညီကြပါဘူး။

Map-Reduce

Map-Reduce ကတော့ NoSQL ကို လွယ်လင့် တကူ အသုံးပြုလို့ရမယ့် design ပါ။ နောက်ပြီး NoSQL တွေမှာ javascript language လိုမျိုး ထည့်သွင်းရေးသားနိုင်ပါတယ်။ Mongodb မှာတော့ ဒီလို မျိုးရေးပါတယ်။

db.things.save({x : 4, j : 100});
for (var i = 1; i <= 20; i++) db.things.save({x : 4, j : i});

things ဆိုတဲ့ collection (tables) မှာ loop ပတ်ပြီးတော့ data သိမ်းလိုက်တာပါ။ .save, .update, .delete လိုမျိုး အရံသင့် function တွေ နဲ့ data သိမ်းတာ ဖျက်တာ update လုပ်တာတွေ လွယ်လွယ်ကူကူ လုပ်နိုင်ပါတယ်။
Continue reading