စမ်းမယ် စမ်းမယ်နဲ့ သေသေချာချာ မစမ်းဖြစ်သေးတဲ့ MongoDB ကို ဒီနေ့မှပဲ စမ်းဖြစ်တော့တယ်။ php အတွက် driver ကိုတော့ စမ်းသွင်းထားတာ ကြာလှပါပြီ။ MongoDB က သွင်းရတာ လွယ်သလို ရေးရတာလည်း လွယ်တယ်။ ပြဿနာ တစ်ခုက PHP Driver သွင်းရတာလေးပဲ။ 32 bit နဲ့ 64 bit ပြဿနာ ကြောင့် driver ကို ကိုယ့်ဘာသာကိုယ် compile ပြန်လုပ်ရတယ်။ အဲဒါကလွဲပြီး ထွေထွေ ထူးထူး ပြဿနာ မရှိပါဘူး။ MongoDB က NoSQL Database တွေထဲက တစ်ခုပါ။

Intro

MongoDB အကြောင်း မပြောခင်မှာတော့ NoSQL (Not Only SQL) ဆိုတာ သိဖို့လိုပါတယ်။ NoSQL ဟာ Relational database လိုမျိုးမဟုတ်ပါဘူး။ Relational Database ဆိုတာက MySQL , MSSQL လိုမျိုး table တစ်ခုနဲ့ တစ်ခုချိတ်ဆက်ထားတာပေါ့။ NoSQL မှာတော့ အဲလိုမျိုး table အချင်းချင်း ချိတ်ဆက်မှုတွေ မပါတော့ဘူးပေါ့။ NoSQL ဆိုတဲ့အတိုင်း table အခြင်းခြင်း ချိတ်ဆက်တဲ့ SQL တွေကို အသုံးမပြုတော့ပါဘူး။ NoSQL ဟာ သာမာန် Relational Database တွေထက်စာရင် ပိုမိုမြန်ဆန်မှုရှိပါတယ်။ ၂ ဆ လောက် ပိုမြန်ပါတယ်။ ဒီမှာ ဖတ်ကြည့်နိုင်ပါတယ်။

NoSQL သိမ်းတဲ့ ပုံစံတွေက အမျိုးအမျိုးရှိပါတယ်။ သိမ်းထားပုံတွေကိုတော့ အောက်မှာ ရေးထားပါတယ်။ ကျွန်တော် ရေးပြထားတဲ့ ၃ နည်းကတော့ လူသုံးအများဆုံး နည်း ၃ ခုပေါ့။ သိမ်းတဲ့ နည်းပေါ်မှာ မူတည်ပြီး Database တွေလည်း ကွဲပြားသွားပါတယ်။

Key Value stores

သူက သိမ်းတဲ့အခါမှာ One Key, One Value ဖြစ်ပြီး Duplicate မရှိပါဘူး။ အရမ်းကို မြန်ဆန်ပါတယ်။ Binary Object အနေနဲ့ သိမ်းပါတယ်။ အဲလိုမျိုး သိမ်းတာကိုတော့ Amazon Dynamo, Memcache DB စတာတွေမှာ အသုံးပြုပါတယ်။

Document Database

နောက်တစ်မျိုး သိမ်းတဲ့ နည်းကတော့ Document Database ပါ။ သူကတော့ သိမ်းတဲ့ ပုံစံက JSON လိုမျိုး ပုံစံနဲ့ သိမ်းပါတယ်။ ဒါကြောင့် Query လုပ်လို့ရပါတယ်။ Amazon Simple DB, CouchDB , MongoDB စတာတွေမှာ အသုံးပြုပါတယ်။ ဘယ်လိုမျိုးလဲဆိုတော့ dog_12 မှာ သိမ်းထားတာက အောက်ကလို ပေါ့။

{
	type:"Dog",
	name: "Ronaldo",
	mood: "Happy"
}

အဲလိုမျိုး သိမ်းထားတာပေါ့။

ပိုပြီး ရှင်းလင်းသွားအောင် dog_12 key မှာ သိမ်းထားတာက

{
	type:"Dog",
	name: "Ronaldo",
	mood: "Happy",
	birthdate: 2007-04-05
	braks: [
		{
			brak: "I had to wear stupid",
			comments: [
				{
					dog_id: "dog_4",
					comment: "You look so cute!"
				},
				{
					dog_id:"dog_14",
					comment: "I hate it ,too"
				}
			]
		}
	]
}

အဲဒါဆိုရင် break လုပ်တဲ့ အခါမှာ “I had to wear stupid” ဆိုပြီး ပြောမယ်။ တွေ့တဲ့ dog_id က dog_4 ဖြစ်နေရင် You look so cute ဆိုပြီး ပြောမယ်။ dog_14 ဖြစ်နေရင် I hate it , too လို့ ပြောမယ်။ tables တွေကို သွားပြီး ချိတ်နေစရာမလိုတော့ဘူး။ dog_4 ကို ဆွဲထုတ်လိုက်တာနဲ့ သူ့ရဲ့ comment ကို ဖော်ပြပေးလို့ရပါပြီ။ JSON ဖြစ်တဲ့အတွက်ကြောင့် နားလည်လွယ်ပြီး သူ့ကိုတော့ လူသုံးများပါတယ်။

Wide Columns Stores

သူ့ကိုတော့ Big Table Clone လို့ ခေါ်ကြတယ်။ Google Big Table နဲ့ Cassandra (Facebook) တို့မှာ အသုံးပြုထားပါတယ်။ သူ့ရဲ့ သိမ်းထားပုံကတော့

Graph Database

Relational database မှာ tables တွေ ချိတ်ဆက်မှုအားနည်းနေတယ်ထင်ရင် Graph Database ကို အသုံးပြုနိုင်ပါတယ်။ Graph Database ကိုတော့ Neo4j,InfoGraph စတဲ့ database တွေမှာ အသုံးပြုပါတယ်။

Relational database ကို အသုံးပြုတဲ့အခါမှာ table တွေ ဆောက်ရတယ်။ နောက်ပြီး relationship တွေ ချိတ်ရတယ်။ ပြန်ထုတ်ဖို့အတွက် SQL မှာ tables တွေ ချိတ်ဆက်တာတွေ ထည့်ရေးပေးရတယ်။ Graph Database ဟာ များပြားလှတဲ့ Relationship တွေအတွက် အထူးသင့်လျော်ပါတယ်။ key-value stores, document databases and wide column stores တွေမှာတော့ relationship တွေ မရှိပါဘူး။

ဆက်ပါအုံးမည် ..

8 responses to “NoSQL”

  1. ကိုစေတန် ဒီပိုစ့်ကိုတော့ ကျွန်တော်ဘယ်လိုမှကို နားမလည်နိုင်ဘူးဗျာ။ ပြီးတော့ ကိုစေတန်က Game developer လည်းပြောသေးတယ်ဗျာ။ အခုလုပ်နေတဲ့ ကိုစေတန်အလုပ်တွေက ဘာဂိမ်းနဲ့မှကို မဆိုင်သေးဘူး။ သိချင်တာက အခုကိုစေတန်ပြောသွားတဲ့အကြောင်းအရာ web ပိုင်းရဲ့ ဘယ်အဆင့်မှာရှိလဲဗျာ။

    1. NoSQL ဟာ အခုနောက်ပိုင်း ခေတ်စားလာတာပါ။ Facebook ဆိုရင် Realtional database အစား NoSQL cassandra ကို အသုံးပြုသလို Digg ကလည်း Casandra ကိုပဲ အသုံးပြုထားပါတယ်။ Full time အလုပ်က iOS Mobile Development ပါ။ Game လည်း ရေးတဲ့အခါ ရေးတယ်။ တစ်ခါတစ်လေ mobile online application တွေရေးတဲ့အခါလည်း ရှိတယ်။ web development ကတော့ဝါသနာအရလုပ်နေတုန်းပဲ။ NoSQL အကြောင်းက Database ပိုင်းကို နားလည်ထားတဲ့ သူတွေ ဖတ်မှ နားလည်လိမ့်မယ်။ Database ဆိုတာက MySQL တစ်ခုတည်းကို ပြောတာမဟုတ်ပါဘူး။ Relational database ဆိုတာဘာ။ tables တွေကို ဘယ်လိုချိတ်ပြီး အလုပ်လုပ်ရလဲ။ စတဲ့ real world မှာ အလုပ်လုပ်နေတဲ့ ပုံစံတွေကို နားလည်ထားရင်တော့ ဒီ post ကို နားလည်မှာပါ။

  2. အရင်လကမှ MongoDB ကို စမ်းကြည့်သေးတယ်.. ဒါတောင် စက်ထဲမှာ မဟုတ်ပါဘူး.. သူ့ Demo မှာ သွားစမ်းတာ…
    ပထမလုပ်မိတဲ့ Demo ၂ ခုလောက်မှာတင် အတော်ကြိုက်သွားတယ်…
    Graph အကြောင်းတော့ DS မှာလေ့လာနေပြီး အရမ်းသဘောကျပေမယ့် Graph ကို real worl မှာ ဘယ်လို Apply လုပ်ရမလဲ သိပ်မသိသေးဘူး… Graph Database ရှိတယ်ဆိုတာတော့ အခုမှ သိတာ (ညံ့ချက်)…
    ဆက်လက်ရေးမယ့် MongoDB or (NoSQL) နဲ့ သက်ဆိုင်တာတွေကို စောင့်နေပါတယ်… :)

    1. မြေပုံတွေရဲ့ route တွေကို ဆွဲကြည့်ရင်တော့ ဒါမှမဟုတ် တွက်ချက်ရင်တော့ Graph က တော်တော် အသုံးဝင်ပါတယ်။ ကျွန်တော်လည်း အများကြီး မစမ်းဖူးပါ။ :D

  3. […] NoSQL — Part 2 saturngod on February 20, 2011 #readabilityBadge { background: #EDEDED; padding: 5px; color: #535353; font-size: 11px; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; text-shadow: #FFF 1px 1px 2px; } #readabilityBadge a,#readabilityBadge a:link { color: #535353; text-decoration: none !important; font-weight: bold; } Readability cassandra , mongodb , nosql […]

  4. ဗျို့ကိုစေတန် ကိုစေတန် ကျွန်တော့ comment ကို reply ပြန်တဲ့အခါမှာ facebook လို့notification လေးလုပ်လို့မရဘူးလား။ ကျွန်တော့မေးလ်ထဲကို notification အနေနဲ့လှမ်းပို့ဖို့လေ။ ကျွန်တော်စဉ်းစားကြည့်တာကို ပြောပြတာပါ။ ကျွန်တော်ကိုစေတန်ဆိုဒ်မှာ comment ပေးသွားတယ်။ ဒါပေမဲ့ ကျွန်တော့ comment ကို ကိုစေတန် reply ပြန်မပြန်ကို ကိုစေတန်ရဲ့ ဘလော့မှာ ကြည့်မှ သိတယ်ဗျ။ ကျွန်တော်ဖြစ်စေချင်တာက ကျွန်တော်ပေးသွားတဲ့ comment reply ပြန်တာကို gmail မှာ ပေါ်ချင်တာ။ ကျွန်တော်က ဘာရယ်မဟုတ်ပါဘူးဗျာ။ ကိုစေတန်အတွက် စမ်းသပ်စရာတစ်ခုဖြစ်အောင် ပြောပြတာပါ။ တစ်ခြားသူတွေလည်း အဲ့လိုမျိုးဖြစ်စေချင်မှာ သေချာပါတယ်။ ကိုစေတန်ဆီက ပညာတွေကလည်းဗျာ တစ်ချို့ဟာတွေကျတော့ ကျွန်တော်မမှီသေးဘူးဗျ။ ဒါပေမဲ့ ကိုစေတန်ရေ သြင်္ကန်ပြီးရင် ရန်ကုန်ရောက်တော့မှာ၊ ကျွန်တော် webdeveloper ဖြစ်ဖို့အတွက် ဘာတွေလုပ်ရမယ်ဆိုတာ ပြောအုံးနော်။

  5. […] Mongodb အကြောင်းကိုတော့ ကျွန်တော် ဒီမှာ ရေးဘူးပါတယ်။ နောက်ပြီးတော့ Cassandra ကို […]

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.