ပြီးခဲ့တဲ့နေ့က SQL အကြောင်းပြောပြီးပြီဆိုတော့ ဒီနေ့တော့ သူနဲ့ မတူတစ်မူ ထူးခြားတဲ့. NoSQL အကြောင်းလေး ရေးသွားပါမယ်။ စလိုက်ကြရအောင်။ SQL အကြောင်းမဖတ်ရသေးရင်တော့ ဒီမှာသွားဖတ်လို့ရပါတယ်။
https://www.facebook.com/permalink.php?story_fbid=802338006788912&id=100010381592688

SQL က အဆင်ပြေနေတယ်၊ RDBMSတွေကလဲ SQL နဲ့ တွဲပြီး ကောင်းကောင်းအလုပ်လုပ်နေတာပဲ၊ ဘာလို့ NoSQL ဆိုတာလိုလာရတာလဲမေးဖို့ရှိပါတယ်။ ပွင့်ပွင့်လင်းလင်းပြောရရင် ကျနော်တို့ လက်ရှိသုံးနေတဲ့ Internet ပေါ်မှာ 2018 ကတောင် ခန့်မှန်းချက်တွေအရ တစ် second ကို 50000 GB နဲ့ချီပြီး data တွေသိမ်းနေရတယ်လို့ တွေ့မိပါတယ်။ ၂၀၁၉ ဆိုရင်တော့ ပိုများနိုင်ပါတယ်။ ဆိုတော့ က အဲ့လောက် များတဲ့ data တွေကို handle လုပ်ဖို့ဆိုတာ challenging တစ်ခုပါပဲ။ ကံမကောင်းစွာနဲ့ပဲ RDBMS တွေမှာ အရမ်းများတဲ့ data တွေနဲ့ မတည့်တဲ့ရောဂါရှိနေပါတယ်။ ဖြေရှင်းချက်တစ်ခုတော့ ရှိပါတယ်၊ ဒါကတော့ အဲ့ဒီများလာတဲ့ data ပမာဏကိုလိုက်ပြီးတော့ memory နဲ့ cpu တွေလိုက်မြှင့်ပြီး သုံးရမှာပါ။ အဲ့လိုသုံးပေမဲ့ လည်း machine တစ်ခုမှာ ခံနိုင်ရည် request ကကန့်သတ်ချက်တစ်ချို့ ရှိနေသေးတဲ့အတွက် လုံး၀ completely အဆင်မပြေသွားပါဘူး။

ဒီနေရာမှာပြောစရာရှိလာပါတယ်၊ RDBMS ကိုပဲသုံးပြီး replication တို့ sharding တို့လုပ်ပြီးသုံးရင်လဲရတာပဲလို့ ပြောနိုင်ပါတယ်။ But literally data တွေအရမ်းကြီး (big data)ဖြစ်လာတဲ့ အချိန်ကြရင် အဲ့ဒီ technique တွေက လဲမလုံလောက်သေးပါဘူး။ အခါအခွင့်သင့်ရင် ဘာကြောင့်လဲဆိုတာ ရေးပေးသွားပါမယ်။

အိုကေ NoSQL ဘာကြောင့် သုံးရတာလဲဆိုတာ. နည်းနည်းသဘောပေါက်လာပြီထင်ပါတယ်။
NoSQL ကို non relational database system လို့လဲခေါ်သလို Not Only SQL လို့လဲပြောလို့ရပါတယ်။ သူ့ရဲ့ အဓိကရည်ရွယ်ချက်ကတော့ fixed schema တွေ join operations တွေမလိုဘဲ data များများသိမ်းထားနိုင်ဖို့ပါပဲ။ data တွေများလာရတဲ့အကြောင်းရင်းကတော့ အစုံပါပဲ၊ Personal user information, social graphs, geo location data, user-generated content and machine logging data
စသည်ဖြင့် ဒီ data တွေကနေ့စဉ်နှင့်အမျှတိုးတက်လာတာကြောင့်ပါ။ NoSQL ရဲ့ အဓိကအကြောင်းရင်းကလဲ ဒီလို big data တွေကို အဆင်ပြေပြေ handle လုပ်နိုင်အောင်ပါပဲ။

NoSQL က declarative query language မဟုတ်ဘူး၊ predefine လုပ်ထားတဲ့ schema တွေလဲမရှိဘူး၊ performance, availability , scalability ကောင်းအောင်ဦးစားပေးထားတယ်။ Key-Value pair storage, Column Store, Document Store, Graph databases ဆိုပြီး အဓိကအားဖြင့် ၄မျိုးခွဲထားတယ်။ CAP Theorem ကို Focus လုပ်ထားတယ်။

CAP Theorem ဆိုတာကတော့ distributed architecture ပုံစံ တစ်ခုတည်ဆောက်ပြီဆိုရင် လိုအပ်တဲ့အခြေခံ အချက် သုံးချက်ကိုဆိုလိုတာပါ။ distributed architecture ကိုမသိရင်ဒီမှာသွားကြည့်လို့ရပါတယ်။
https://en.wikipedia.org/wiki/Distributed_computing

Consistency
Operation တစ်ခု execute လုပ်လိုက်တဲ့ အခါတိုင်းမှာ data result က consistent & stable ဖြစ်ပြီးကျန်ခဲ့ရပါမယ်။ဆိုလိုချင်တာက update operation တစ်ခု run လိုက်ပြီဆိုရင် နေရာတိုင်းမှာ updated data ဖြစ်ပြီး client side က မြင်ရတဲ့ data ကလဲ update လုပ်ပြီးသားတစ်ခုတည်းဖြစ်နေရပါမယ်။

Availability
ဒါကတော့ ရှင်းပါတယ်၊ system က အမြဲတမ်း up ဖြစ်နေရမယ်။ တစ်နည်းအားဖြင့် zero downtime ဖြစ်ရမယ်။

Partition Tolerance
Distributed system ထဲက Database server တစ်လုံးမဟုတ် တစ်လုံး down သွားခဲ့ရင်တောင် လက်ရှိလုပ်နေတဲ့အလုပ်တွေမပျက်သွားဘဲ ဆက်လက်လည်ပတ်နိုင်အောင်လုပ်ထားတာပါ။

ဒီသုံးခုလုံးကို ပြည့်စုံအောင်ရနိုင်ဖို့ဆိုတာတော့ မဖြစ်နိုင်ပါဘူး၊ဒါပေမဲ့ theorem ကလည်း အဲ့ဒီ သုံးခုထဲကမှ နှစ်ခုကိုလိုက်နာနိုင်ရင်အဆင်ပြေတယ်လို့ပြောထားပါတယ်။ အဲ့အတွက်ကြောင့် မို့လို့ အခု NoSQL system တွေကတော့ C, A, P elements တွေကို တစ်ခုမဟုတ်တစ်ခုနဲ့ combine လုပ်ပြီး follow လုပ်ထားပါတယ်၊ ဥပမာ CA, CP , AP ။ SQL မှာတော့ နှစ်ခုကိုလိုက်နာဖို့ကိုတောင် အခက်အခဲ တော်တော်လေးရှိပါတယ်။

NoSQL မှာအဓိကအားဖြင့် database type (category) ၄မျိုးရှိပါတယ်။

Key-value Database
NoSQL ရဲ့ အရိုးရှင်းဆုံး type တစ်ခုလို့ပြောလို့ရတယ်။ key value ဆိုတဲ့အတိုင်း unique key သိမ်းတယ် နောက်က value လိုက်သိမ်းတယ်။ data များများသိမ်းဖို့အဆင်ပြေအောင်လုပ်ထားတယ်။ amazon ရဲ့ dynamo paper ကိုအခြေခံထားတယ်။
Example – Redis, Dynamo a

Column Oriented Database
သူ့နာမည် အတိုင်းပဲ column specific အဖြစ်နဲ့ သိမ်းတယ်။ specific column ကိုလှမ်းထောက်လို့ရတဲ့အတွက် query performance ကောင်းတယ်။ အထူးသဖြင့် aggregration queries တွေအတွက် အဆင်ပြေတယ်။ data warehouse တို့ CRM တို့လို appတွေမှာအသုံးများတယ်။
Example.- BigTable, SampleData

Graph Database
Data တွေကို graph နဲ့သိမ်းတယ်။ Node တွေ edge တွေနဲ့ထိန်းထားတယ်။ Node ဆိုတာကတော့ entity (student or business) တစ်ခုကိုကိုယ်စားပြုပြီးတော့ edge ကတော့ node နှစ်ခုကြားထဲက connection or relationship ကိုကိုယ်စားပြုတယ်။ nodeကော edge ကော unique identifierတွေဖြစ်တယ်။
Example – OrientDB, Titan

Document Oriented Database
လက်ရှိအသုံးများတာကတော့ ဒီ database type ဖြစ်ပါတယ်။ Documents တွေကို collection လုပ်ပြီးသိမ်းတယ်။ data အစုံပါတယ်၊ key-value pairs လည်းဖြစ်နိုင်တယ်၊key-array လည်းဖြစ်နိုင်တယ်၊ Nested documents တွေတောင်ဖြစ်နိုင်ပါတယ်။ အကုန်လုံးကို collection လုပ်ပြီး document တွေအနေနဲ့သိမ်းပါတယ်။
Example – mongodb, couchdb

NoSQL အကြောင်းကို ဒီထက်ပိုပြောချင်အသေးစိတ်လိုက်ပြောလို့ရပါသေးတယ်၊ ကျနော်ကတော့ ကျနော်နားလည်ထားသလောက်ကို ယေဘုယျအားဖြင့် ဆီလျော်အောင် ပြန်ရေးပေးထားတာပါ။

Learning လုပ်ဖို့ဆိုရင်တော့ mongodb university ကိုသွားကြည့်ဖို့အကြံပေးချင်ပါတယ်၊
https://university.mongodb.com/

https://university.mongodb.com/courses/M001/about

register လုပ်ပြီးရင် course တွေကို free တတ်လို့ရတဲ့အပြင် certificate ပါထုတ်ပေးပါတယ်။
Certificate sample ကို comment မှာတင်ထားပေးပါတယ်။

SQL နဲ့ NoSQL အကြောင်းကို ယှဉ်ပြီးရေးထားတဲ့ ပို့စ်နဲ့ပြန်လာခဲ့ပါမယ်။