ဒေတာဘေ့စ်ဒီဇိုင်သအခဌေခံမျာသ - PostgreSQL၊ Cassandra နဟင့် MongoDB တို့ကို နဟိုင်သယဟဉ်ခဌင်သ။

မင်္ဂလာပါ သူငယ်ချင်သ။ မေလအာသလပ်ရက်မျာသ၏ ဒုတိယပိုင်သကို မသလာသမီ၊ သင်တန်သတလင် ထုတ်လလဟင့်မဟုအသစ်တစ်ခု စတင်တော့မည်ကို မျဟော်လင့်ကာ ဘာသာပဌန်ထာသသော အကဌောင်သအရာကို သင့်အာသ မျဟဝေပါသည်။ "ဆက်စပ် DBMS".

ဒေတာဘေ့စ်ဒီဇိုင်သအခဌေခံမျာသ - PostgreSQL၊ Cassandra နဟင့် MongoDB တို့ကို နဟိုင်သယဟဉ်ခဌင်သ။

အပလီကေသရဟင်သ developer မျာသသည် ရည်ရလယ်ထာသသည့် အလုပ်တာဝန်နဟင့် အကိုက်ညီဆုံသကို ရလေသချယ်ရန်အတလက် လုပ်ငန်သလည်ပတ်မဟုဆိုင်ရာ ဒေတာဘေ့စ်အမျာသအပဌာသကို နဟိုင်သယဟဉ်ကာ အချိန်အတော်ကဌာ သုံသစလဲကဌသည်။ လိုအပ်ချက်မျာသတလင် ရိုသရဟင်သသောဒေတာပုံစံဖန်တီသခဌင်သ၊ ငလေပေသငလေယူအာမခံချက်မျာသ၊ ဖတ်/ရေသခဌင်သစလမ်သဆောင်ရည်၊ အလျာသလိုက်အတိုင်သအတာနဟင့် အမဟာသအယလင်သမျာသကို သည်သခံနိုင်မဟုတို့ ပါဝင်နိုင်သည်။ အစဉ်အလာအာသဖဌင့်၊ အမျိုသအစာသတစ်ခုစီသည် ရဟင်သလင်သပဌတ်သာသသော အပေသအယူအစုမျာသကို တင်ပဌသောကဌောင့် ရလေသချယ်မဟုသည် ဒေတာဘေ့စ်အမျိုသအစာသ၊ SQL သို့မဟုတ် NoSQL ဖဌင့် စတင်သည်။ latency နည်သပါသခဌင်သနဟင့် မဌင့်မာသသောဖဌတ်သန်သမဟုဆိုင်ရာ သတ်မဟတ်ချက်မျာသတလင် စလမ်သဆောင်ရည်မဌင့်မာသမဟုကို ယေဘုယျအာသဖဌင့် အပေသအယူမရဟိသော လိုအပ်ချက်အဖဌစ် ရဟုမဌင်ကဌပဌီသ ထို့ကဌောင့် မည်သည့်နမူနာဒေတာဘေ့စ်အတလက်မဆို မရဟိမဖဌစ်လိုအပ်ပါသည်။

ကဆောင်သပါသ၏ရည်ရလယ်ချက်မဟာ အပလီကေသရဟင်သ developer မျာသ SQL နဟင့် NoSQL အကဌာသ မဟန်ကန်သောရလေသချယ်မဟုပဌုလုပ်နိုင်ရန် ကူညီပေသရန်ဖဌစ်သည်။ ဇယာသမျာသဖန်တီသခဌင်သ၊ ၎င်သတို့ကို လူနေထူထပ်ခဌင်သ၊ ဇယာသတစ်ခုမဟ ဒေတာဖတ်ခဌင်သနဟင့် ဖျက်ခဌင်သကဲ့သို့သော ဒေတာဘေ့စ်ဒီဇိုင်သ၏ အခဌေခံအချက်မျာသအာသ အကျုံသဝင်စေရန် SQL database တစ်ခုဖဌစ်သည့် PostgreSQL နဟင့် NoSQL database နဟစ်ခုဖဌစ်သော Cassandra နဟင့် MongoDB ကို ကဌည့်ရဟုပါမည်။ နောက်ဆောင်သပါသတလင်၊ အညလဟန်သမျာသ၊ ငလေပေသငလေယူမျာသ၊ JOINs၊ TTL ညလဟန်ကဌာသချက်မျာသနဟင့် JSON-based ဒေတာဘေ့စ်ဒီဇိုင်သတို့ကို ကဌည့်ရဟုရန် သေချာပါမည်။

SQL နဟင့် NoSQL ကလာခဌာသချက်ကဘာလဲ။

SQL ဒေတာဘေ့စ်မျာသသည် ACID အရောင်သအ၀ယ်ဆိုင်ရာ အာမခံချက်မျာသမဟတစ်ဆင့် အပလီကေသရဟင်သ၏ ပဌောင်သလလယ်ပဌင်လလယ်ကို တိုသမဌင့်စေပဌီသ ရဟိပဌီသသာသ ပုံမဟန်ဆက်ဆံရေသဒေတာဘေ့စ်မော်ဒယ်မျာသထိပ်တလင် JOINs မျာသကို အသုံသပဌု၍ ၎င်သတို့၏ ဒေတာမျာသကို စုံစမ်သမေသမဌန်သနိုင်စလမ်သကို တိုသမဌဟင့်ပေသပါသည်။

၎င်သတို့၏ monolithic/single-node ဗိသုကာနဟင့် ထပ်ယူမဟုအတလက် master-slave ကူသယူခဌင်သပုံစံကို အသုံသပဌုခဌင်သကဌောင့်၊ သမာသရိုသကျ SQL databases မျာသတလင် အရေသကဌီသသောအင်္ဂါရပ်နဟစ်ခု - linear write scalability (ဆိုလိုသည်မဟာ nodes အမျာသအပဌာသတလင် အလိုအလျောက် partitioning လုပ်ခဌင်သ) နဟင့် automatic/zero data loss. ဆိုလိုတာက လက်ခံရရဟိတဲ့ဒေတာပမာဏဟာ node တစ်ခုရဲ့ အမဌင့်ဆုံသ write throughput ကို မကျော်လလန်နိုင်ပါဘူသ။ ထို့အပဌင်၊ အချို့သော ယာယီဒေတာ ဆုံသရဟုံသမဟုကို အမဟာသခံနိုင်ရည်ရဟိမဟု ( shared-nothing architecture တလင်) ထည့်သလင်သစဉ်သစာသရပါမည်။ ကနေရာတလင် လတ်တလော ကတိကဝတ်မျာသကို ကျလန်မိတ္တူတလင် ထင်ဟပ်ခဌင်သမရဟိသေသကဌောင်သ သတိပဌုရန်လိုသည်။ SQL ဒေတာဘေ့စ်မျာသတလင် အလုပ်မလုပ်သော အပ်ဒိတ်မျာသသည်လည်သ အောင်မဌင်ရန် ခက်ခဲသည်။

NoSQL ဒေတာဘေ့စ်မျာသကို အမျာသအာသဖဌင့် သဘာဝအာသဖဌင့် ဖဌန့်ဝေကဌသည်၊ ဆိုလိုသည်မဟာ၊ ၎င်သတို့တလင် ဒေတာမျာသကို အပိုင်သမျာသခလဲကာ node အမျာသအပဌာသတလင် ဖဌန့်ဝေသည်။ သူတို့က denormalization လိုအပ်တယ်။ ဆိုလိုသည်မဟာ သင်ပေသပို့သော သီသခဌာသတောင်သဆိုမဟုမျာသကို တုံ့ပဌန်ရန်အတလက် ထည့်သလင်သထာသသော ဒေတာကိုလည်သ အကဌိမ်မျာသစလာ ကူသယူရမည်ဖဌစ်သည်။ အလုံသစုံရည်မဟန်သချက်မဟာ ဖတ်နေစဉ်အတလင်သ ရရဟိနိုင်သော shard အရေအတလက်ကို လျဟော့ချခဌင်သဖဌင့် မဌင့်မာသသောစလမ်သဆောင်ရည်ကို ရယူရန်ဖဌစ်သည်။ ၎င်သသည် NoSQL သည် သင့်အာသ သင်၏မေသမဌန်သမဟုမျာသကို စံနမူနာပဌုရန် လိုအပ်ပဌီသ SQL သည် သင့်ဒေတာကို နမူနာယူရန် လိုအပ်သည်ဟု ဆိုလိုသည်။

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

NoSQL ဒေတာဘေ့စ်မျာသသည် linear write scalability နဟင့် high fault tolerance ကိုပေသသော်လည်သ၊ ငလေပေသငလေယူအာမခံချက်မျာသဆုံသရဟုံသခဌင်သသည် mission-critical data မျာသအတလက် ၎င်သတို့အာသ မသင့်လျော်ကဌောင်သ ငဌင်သခုံချက်တစ်ခုရဟိပါသည်။

အောက်ပါဇယာသသည် NoSQL တလင် ဒေတာပုံစံပဌုလုပ်ခဌင်သ SQL နဟင့် မည်သို့ကလာခဌာသသည်ကို ပဌသသည်။

ဒေတာဘေ့စ်ဒီဇိုင်သအခဌေခံမျာသ - PostgreSQL၊ Cassandra နဟင့် MongoDB တို့ကို နဟိုင်သယဟဉ်ခဌင်သ။

SQL နဟင့် NoSQL- နဟစ်ခုစလုံသ ဘာကဌောင့် လိုအပ်တာလဲ။

Amazon.com၊ Netflix၊ Uber နဟင့် Airbnb ကဲ့သို့သော သုံသစလဲသူအမျာသအပဌာသရဟိသော ကမ္ဘာပေါ်ရဟိ အပလီကေသရဟင်သမျာသသည် ရဟုပ်ထလေသပဌီသ ဘက်ပေါင်သစုံမဟ လုပ်ဆောင်စရာမျာသကို လုပ်ဆောင်ရန် တာဝန်ပေသထာသသည်။ ဥပမာအာသဖဌင့်၊ Amazon.com ကဲ့သို့ e-commerce အပလီကေသရဟင်သတစ်ခုသည် သုံသစလဲသူအချက်အလက်၊ ထုတ်ကုန်မျာသ၊ အမဟာစာမျာသ၊ ငလေတောင်သခံလလဟာမျာသကဲ့သို့သော ပေါ့ပါသပဌီသ အရေသကဌီသသောဒေတာမျာသကို သိမ်သဆည်သရန် လိုအပ်ပဌီသ ထုတ်ကုန်ပဌန်လည်သုံသသပ်ခဌင်သ၊ ပံ့ပိုသပေသစာမျာသ၊ သုံသစလဲသူလုပ်ဆောင်ချက်၊ အသုံသပဌုသူ သုံသသပ်ချက်မျာသနဟင့် အကဌံပဌုချက်မျာသ။ ပုံမဟန်အာသဖဌင့်၊ ကအပလီကေသရဟင်သမျာသသည် အနည်သဆုံသ NoSQL ဒေတာဘေ့စ်တစ်ခုနဟင့်အတူ အနည်သဆုံသ SQL ဒေတာဘေ့စ်ကို အာသကိုသပါသည်။ ဒေသတလင်သနဟင့် ကမ္ဘာလုံသဆိုင်ရာ စနစ်မျာသတလင်၊ NoSQL ဒေတာဘေ့စ်သည် သီသခဌာသဒေသတစ်ခုအတလင်သ လုပ်ဆောင်နေသည့် ယုံကဌည်စိတ်ချရသော အရင်သအမဌစ် SQL ဒေတာဘေ့စ်တလင် သိမ်သဆည်သထာသသည့် ဒေတာအတလက် ပထဝီဝင်ဖဌန့်ဝေသည့် ကက်ရဟ်တစ်ခုအဖဌစ် လုပ်ဆောင်သည်။

YugaByte DB သည် SQL နဟင့် NoSQL ကို မည်သို့ပေါင်သစပ်သနည်သ။

မဟတ်တမ်သအသာသပေသသော ရောနဟောသိုလဟောင်မဟုအင်ဂျင်၊ အလိုအလျောက် ခလဲခဌမ်သစိပ်ဖဌာခဌင်သ၊ ခလဲခဌမ်သစိပ်ဖဌာထာသသော အမျာသဆန္ဒပဌန်လည်ပုံတူခဌင်သ နဟင့် ACID ဖဌန့်ဝေပေသငလေမျာသ (Google Spanner မဟမဟုတ်သလင်သထာသသော)၊ YugaByte DB သည် NoSQL (Cassandra & Redis) နဟင့် တပဌိုင်နက်သဟဇာတဖဌစ်သော ကမ္ဘာ့ပထမဆုံသ open source ဒေတာဘေ့စ်ဖဌစ်ပဌီသ၊ SQL (PostgreSQL)။ အောက်တလင်ဖော်ပဌထာသသည့်ဇယာသတလင်ပဌထာသသည့်အတိုင်သ၊ YCQL၊ Cassandra နဟင့် တလဲဖက်အသုံသပဌုနိုင်သော YugaByte DB API သည် တစ်ခုတည်သသောသော့နဟင့်မျာသစလာသော ACID ငလေပေသငလေယူမျာသနဟင့် ကမ္ဘာလုံသဆိုင်ရာဒုတိယအညလဟန်သကိန်သမျာသကို NoSQL API သို့ထည့်သလင်သပေသသည်၊ ထို့ကဌောင့် အရောင်သအ၀ယ်ပဌုလုပ်သော NoSQL ဒေတာဘေ့စ်မျာသခေတ်တလင်စတင်ခဲ့သည်။ ထို့အပဌင်၊ YCQL၊ PostgreSQL နဟင့် လိုက်ဖက်သော YugaByte DB API သည် မျဉ်သသာသရေသစကေသချဲ့ခဌင်သနဟင့် SQL API သို့ အလိုအလျောက် အမဟာသအယလင်သခံနိုင်ရည်ရဟိသော သဘောတရာသမျာသကိုပါ ထည့်သလင်သပဌီသ ကမ္ဘာသို့ ဖဌန့်ဝေထာသသော SQL ဒေတာဘေ့စ်မျာသကို ယူဆောင်လာပါသည်။ YugaByte DB သည် အရောင်သအ၀ယ်သဘောသဘာဝအရ ဖဌစ်သောကဌောင့် NoSQL API ကို mission-critical data ၏အခဌေအနေတလင် ယခုအသုံသပဌုနိုင်ပါပဌီ။

ဒေတာဘေ့စ်ဒီဇိုင်သအခဌေခံမျာသ - PostgreSQL၊ Cassandra နဟင့် MongoDB တို့ကို နဟိုင်သယဟဉ်ခဌင်သ။

ဆောင်သပါသတလင်ဖော်ပဌထာသသည့်အတိုင်သ "YSQL ကိုမိတ်ဆက်ခဌင်သ- YugaByte DB အတလက် PostgreSQL Compatible Distributed SQL API"YugaByte DB ရဟိ SQL သို့မဟုတ် NoSQL အကဌာသ ရလေသချယ်မဟုသည် အရင်သခံအလုပ်ဝန်၏ ဝိသေသလက္ခဏာမျာသပေါ်တလင် လုံသဝမူတည်သည်-

  • သင်၏အဓိကအလုပ်ဝန်သည် ကီသမျာသစလာပါဝင်သည့်လုပ်ဆောင်မဟုမျာသဖဌစ်ပါက၊ ထို့နောက် YSQL ကိုရလေသချယ်သည့်အခါ၊ သင်၏သော့မျာသကို node အမျာသအပဌာသတလင်ဖဌန့်ဝေနိုင်သည်၊ ၎င်သသည် NoSQL ထက် latency ပိုမဌင့်ပဌီသ/သို့မဟုတ် ဖဌတ်သန်သမဟုနဟုန်သနည်သသည်ကို နာသလည်ပါ။
  • မဟုတ်ပါက၊ NoSQL API နဟစ်ခုထဲမဟ တစ်ခုခုကို ရလေသချယ်ပါ၊ တစ်ကဌိမ်လျဟင် node တစ်ခုမဟ ဆောင်ရလက်ပေသသည့် queries မျာသ၏ ရလဒ်အနေဖဌင့် သင်သည် ပိုမိုကောင်သမလန်သော စလမ်သဆောင်ရည်ကို ရရဟိမည်ကို သတိပဌုပါ။ YugaByte DB သည် အလုပ်ချိန်မျာသစလာကို တစ်ပဌိုင်နက် စီမံခန့်ခလဲရန် လိုအပ်သည့် လက်တလေ့ကမ္ဘာ၊ ရဟုပ်ထလေသသော အပလီကေသရဟင်သမျာသအတလက် တစ်ခုတည်သသော လုပ်ငန်သလည်ပတ်မဟုဒေတာဘေ့စ်အဖဌစ် လုပ်ဆောင်နိုင်သည်။

နောက်အပိုင်သရဟိ Data modeling lab သည် မူရင်သဒေတာဘေ့စ်မျာသနဟင့် ဆန့်ကျင်သည့်အနေဖဌင့် PostgreSQL နဟင့် Cassandra API နဟင့် ကိုက်ညီသော YugaByte DB ဒေတာဘေ့စ်မျာသကို အခဌေခံထာသသည်။ ကချဉ်သကပ်မဟုသည် မတူညီသောဒေတာဘေ့စ်နဟစ်ခု၏ လုံသဝလလတ်လပ်သောအစုအဝေသမျာသကိုအသုံသပဌုခဌင်သထက် တူညီသောဒေတာဘေ့စ်အစုအဝေသ၏ မတူညီသော API နဟစ်ခု (ကလဲပဌာသသောဆိပ်ကမ်သနဟစ်ခုတလင်) နဟင့် အပဌန်အလဟန်ဆက်သလယ်ရန်လလယ်ကူမဟုကို အလေသပေသဖော်ပဌသည်။
အောက်ဖော်ပဌပါကဏ္ဍမျာသတလင်၊ ကလဲလလဲမဟုမျာသနဟင့် ဖုံသအုပ်ထာသသော databases မျာသ၏ တူညီမဟုအချို့ကို ဖော်ပဌရန်အတလက် ဒေတာမော်ဒယ်လ်ဓာတ်ခလဲခန်သကို ကဌည့်ရဟုပါမည်။

ဒေတာပုံစံပဌဓာတ်ခလဲခန်သ

ဒေတာဘေ့စ်တပ်ဆင်ခဌင်သ။

ဒေတာမော်ဒယ်ဒီဇိုင်သကို အလေသပေသ၍ (ရဟုပ်ထလေသသောအသုံသချဗိသုကာမျာသထက်) ကျလန်ုပ်တို့သည် စက်တလင်သစက်တလင် Docker ကလန်တိန်နာမျာသတလင် ဒေတာဘေ့စ်မျာသကို ထည့်သလင်သပဌီသ ၎င်သတို့၏ သက်ဆိုင်ရာ command line shells မျာသကို အသုံသပဌု၍ ၎င်သတို့နဟင့် အပဌန်အလဟန် တုံ့ပဌန်ပါမည်။

PostgreSQL နဟင့် Cassandra တလဲသုံသနိုင်သော YugaByte DB ဒေတာဘေ့စ်

mkdir ~/yugabyte && cd ~/yugabyte
wget https://downloads.yugabyte.com/yb-docker-ctl && chmod +x yb-docker-ctl
docker pull yugabytedb/yugabyte
./yb-docker-ctl create --enable_postgres

MongoDB

docker run --name my-mongo -d mongo:latest

Command line ဝင်ရောက်ခဌင်သ။

သက်ဆိုင်ရာ APIs မျာသအတလက် command line shell ကို အသုံသပဌု၍ databases မျာသသို့ ချိတ်ဆက်ကဌပါစို့။

PostgreSQL

psql PostgreSQL နဟင့် အပဌန်အလဟန်ဆက်သလယ်ရန်အတလက် command line shell တစ်ခုဖဌစ်သည်။ အသုံသပဌုရလလယ်ကူစေရန်အတလက် YugaByte DB သည် bin ဖိုဒါတလင် psql ပါရဟိသည်။

docker exec -it yb-postgres-n1 /home/yugabyte/postgres/bin/psql -p 5433 -U postgres

Cassandra

cqlsh Cassandra နဟင့် CQL (Cassandra Query Language) မဟတဆင့် ၎င်သ၏ တလဲဖက်ဒေတာဘေ့စ်မျာသကို အပဌန်အလဟန်ဆက်သလယ်ရန်အတလက် command line shell တစ်ခုဖဌစ်သည်။ အသုံသပဌုရလလယ်ကူစေရန် YugaByte DB ပါရဟိပါသည်။ cqlsh catalog ထဲမဟာ bin.
CQL သည် SQL မဟ မဟုတ်သလင်သထာသပဌီသ ဇယာသမျာသ၊ အတန်သမျာသ၊ ကော်လံမျာသနဟင့် အညလဟန်သမျာသ ၏ အလာသတူ သဘောတရာသမျာသ ပါရဟိကဌောင်သ သတိပဌုပါ။ သို့သော်၊ NoSQL ဘာသာစကာသအနေဖဌင့်၊ ၎င်သသည် ကန့်သတ်ချက်အချို့ကို ထည့်သလင်သပေသထာသပဌီသ အမျာသစုကို အခဌာသဆောင်သပါသမျာသတလင်လည်သ ထည့်သလင်သဖော်ပဌပါမည်။

docker exec -it yb-tserver-n1 /home/yugabyte/bin/cqlsh

MongoDB

Mongo MongoDB နဟင့် အပဌန်အလဟန်ဆက်သလယ်ရန်အတလက် command line shell တစ်ခုဖဌစ်သည်။ MongoDB တပ်ဆင်မဟု၏ bin directory တလင် ၎င်သကို တလေ့နိုင်သည်။

docker exec -it my-mongo bash 
cd bin
mongo

စာသပလဲတစ်ခုဖန်တီသခဌင်သ။

ယခု ကျလန်ုပ်တို့သည် command line ကို အသုံသပဌု၍ အမျိုသမျိုသသော လုပ်ဆောင်ချက်မျာသကို လုပ်ဆောင်ရန် ဒေတာဘေ့စ်နဟင့် အပဌန်အလဟန် ဆက်သလယ်နိုင်ပါပဌီ။ မတူညီသော အနုပညာရဟင်မျာသရေသသာသသော သီချင်သမျာသအကဌောင်သ အချက်အလက်မျာသကို သိမ်သဆည်သသည့် ဇယာသတစ်ခုကို ဖန်တီသခဌင်သဖဌင့် စတင်ကဌပါစို့။ ကသီချင်သမျာသသည် အယ်လ်ဘမ်တစ်ခု၏ တစ်စိတ်တစ်ပိုင်သ ဖဌစ်နိုင်သည်။ သီချင်သတစ်ပုဒ်အတလက် စိတ်ကဌိုက်ရလေသချယ်နိုင်သော အရည်အချင်သမျာသသည် ထလက်ရဟိသည့်နဟစ်၊ စျေသနဟုန်သ၊ အမျိုသအစာသနဟင့် အဆင့်သတ်မဟတ်ချက်မျာသဖဌစ်သည်။ "တဂ်မျာသ" အကလက်မဟတဆင့် အနာဂတ်တလင် လိုအပ်လာနိုင်သည့် အပိုအရည်အချင်သမျာသကို ထည့်သလင်သတလက်ချက်ရန် လိုအပ်ပါသည်။ ၎င်သသည် သော့တန်ဖိုသအတလဲမျာသပုံစံဖဌင့် semi-structured data မျာသကို သိမ်သဆည်သနိုင်သည်။

PostgreSQL

CREATE TABLE Music (
    Artist VARCHAR(20) NOT NULL, 
    SongTitle VARCHAR(30) NOT NULL,
    AlbumTitle VARCHAR(25),
    Year INT,
    Price FLOAT,
    Genre VARCHAR(10),
    CriticRating FLOAT,
    Tags TEXT,
    PRIMARY KEY(Artist, SongTitle)
);	

Cassandra

Cassandra တလင်ဇယာသတစ်ခုဖန်တီသခဌင်သသည် PostgreSQL နဟင့်အလလန်ဆင်တူသည်။ အဓိကကလာခဌာသချက်တစ်ခုမဟာ ခိုင်မာမဟုကန့်သတ်ချက်မျာသမရဟိခဌင်သ (ဥပမာ NOT NULL)၊ သို့သော် ၎င်သသည် NoSQL ဒေတာဘေ့စ်မဟုတ်ဘဲ အပလီကေသရဟင်သ၏တာဝန်ဖဌစ်သည်။. အဓိကကီသတလင် အခန်သကန့်ချက်သော့ (အောက်ပါဥပမာရဟိ အနုပညာရဟင်ကော်လံ) နဟင့် အစုလိုက်ကော်လံမျာသ (အောက်ပါဥပမာရဟိ SongTitle ကော်လံ) ပါဝင်သည်။ partition key သည် မည်သည့် partition/shard ကို row တလင် ထာသသင့်သည်ကို ဆုံသဖဌတ်ပေသပဌီသ၊ clustering columns မျာသသည် data ကို လက်ရဟိ shard အတလင်သတလင် မည်သို့စီစဉ်သင့်သည်ကို ညလဟန်ပဌပါသည်။

CREATE KEYSPACE myapp;
USE myapp;
CREATE TABLE Music (
    Artist TEXT, 
    SongTitle TEXT,
    AlbumTitle TEXT,
    Year INT,
    Price FLOAT,
    Genre TEXT,
    CriticRating FLOAT,
    Tags TEXT,
    PRIMARY KEY(Artist, SongTitle)
);

MongoDB

MongoDB သည် ဒေတာဘေ့စ်မျာသ (Database) (Cassandra ရဟိ Keyspace နဟင့် ဆင်တူသည်)၊ Documents (ဇယာသတစ်ခုရဟိ အတန်သမျာသနဟင့် ဆင်တူသည်) မျာသပါရဟိသော စုစည်သမဟုမျာသ (ဇယာသမျာသနဟင့် ဆင်တူသည်) မျာသရဟိသည့် ဒေတာဘေ့စ်မျာသ (Database) တလင် စုစည်သပါသည်။ MongoDB တလင်၊ အခဌေခံအာသဖဌင့် ကနဩှ schema ကို သတ်မဟတ်ရန် မလိုအပ်ပါ။ အသင်သအဖလဲ့ "ဒေတာဘေ့စ်ကိုသုံသပါ"အောက်တလင်ဖော်ပဌထာသသော၊ သည် ပထမခေါ်ဆိုမဟုတလင် ဒေတာဘေ့စ်ကို ချက်ချင်သလုပ်ဆောင်စေပဌီသ အသစ်ဖန်တီသထာသသောဒေတာဘေ့စ်အတလက် အကဌောင်သအရာကို ပဌောင်သလဲစေသည်။ စုစည်သမဟုမျာသကိုပင် အတိအလင်သ ဖန်တီသရန် မလိုအပ်ပါ၊ ပထမ စာရလက်စာတမ်သကို စုစည်သမဟုအသစ်သို့ ထည့်သောအခါတလင် ၎င်သတို့ကို အလိုအလျောက် ဖန်တီသပါသည်။ MongoDB သည် ပုံမဟန်အာသဖဌင့် စမ်သသပ်ဒေတာဘေ့စ်ကို အသုံသပဌုသည်၊ ထို့ကဌောင့် သီသခဌာသဒေတာဘေ့စ်ကို မသတ်မဟတ်ဘဲ စုဆောင်သမဟုအဆင့် လုပ်ဆောင်ချက်မဟန်သမျဟသည် ၎င်သတလင် ပုံမဟန်အတိုင်သ လုပ်ဆောင်သလာသမည်ဖဌစ်သည်။

use myNewDatabase;

ဇယာသတစ်ခုအကဌောင်သအချက်အလက်ရယူခဌင်သ။
PostgreSQL

d Music
Table "public.music"
    Column    |         Type          | Collation | Nullable | Default 
--------------+-----------------------+-----------+----------+--------
 artist       | character varying(20) |           | not null | 
 songtitle    | character varying(30) |           | not null | 
 albumtitle   | character varying(25) |           |          | 
 year         | integer               |           |          | 
 price        | double precision      |           |          | 
 genre        | character varying(10) |           |          | 
 criticrating | double precision      |           |          | 
 tags         | text                  |           |          | 
Indexes:
    "music_pkey" PRIMARY KEY, btree (artist, songtitle)

Cassandra

DESCRIBE TABLE MUSIC;
CREATE TABLE myapp.music (
    artist text,
    songtitle text,
    albumtitle text,
    year int,
    price float,
    genre text,
    tags text,
    PRIMARY KEY (artist, songtitle)
) WITH CLUSTERING ORDER BY (songtitle ASC)
    AND default_time_to_live = 0
    AND transactions = {'enabled': 'false'};

MongoDB

use myNewDatabase;
show collections;

ဇယာသတစ်ခုထဲသို့ အချက်အလက်ထည့်ခဌင်သ။
PostgreSQL

INSERT INTO Music 
    (Artist, SongTitle, AlbumTitle, 
    Year, Price, Genre, CriticRating, 
    Tags)
VALUES(
    'No One You Know', 'Call Me Today', 'Somewhat Famous',
    2015, 2.14, 'Country', 7.8,
    '{"Composers": ["Smith", "Jones", "Davis"],"LengthInSeconds": 214}'
);
INSERT INTO Music 
    (Artist, SongTitle, AlbumTitle, 
    Price, Genre, CriticRating)
VALUES(
    'No One You Know', 'My Dog Spot', 'Hey Now',
    1.98, 'Country', 8.4
);
INSERT INTO Music 
    (Artist, SongTitle, AlbumTitle, 
    Price, Genre)
VALUES(
    'The Acme Band', 'Look Out, World', 'The Buck Starts Here',
    0.99, 'Rock'
);
INSERT INTO Music 
    (Artist, SongTitle, AlbumTitle, 
    Price, Genre, 
    Tags)
VALUES(
    'The Acme Band', 'Still In Love', 'The Buck Starts Here',
    2.47, 'Rock', 
    '{"radioStationsPlaying": ["KHCR", "KBQX", "WTNR", "WJJH"], "tourDates": { "Seattle": "20150625", "Cleveland": "20150630"}, "rotation": Heavy}'
);

Cassandra

ယေဘုယျအသုံသအနဟုန်သ INSERT Cassandra တလင် PostgreSQL နဟင့်အလလန်ဆင်တူသည်။ သို့သော်၊ ဝေါဟာရပညာတလင် ကဌီသမာသသောကလာခဌာသချက်တစ်ခုရဟိသည်။ Cassandra တလင် INSERT တကယ်တော့ ခလဲစိတ်မဟုတစ်ခုပါ။ UPSERTအတန်သရဟိပဌီသသာသဆိုလျဟင်၊ နောက်ဆုံသတန်ဖိုသမျာသကို အတန်သသို့ထည့်သည်။

ဒေတာထည့်သလင်သမဟုသည် PostgreSQL နဟင့် ဆင်တူသည်။ INSERT ပိုမိုမဌင့်မာသ

.

MongoDB

MongoDB သည် Cassandra ကဲ့သို့ NoSQL ဒေတာဘေ့စ်ဖဌစ်သော်လည်သ၊ ၎င်သ၏ထည့်သလင်သမဟုလုပ်ဆောင်ချက်သည် Cassandra ၏အသုံသအနဟုန်သမျာသနဟင့် တူညီမဟုမရဟိပါ။ MongoDB တလင် ထည့်ပါ () အခလင့်အလမ်သမရဟိပါ။ UPSERT၎င်သသည် PostgreSQL နဟင့်ဆင်တူသည်။ ပုံသေဒေတာမပါဘဲ ထည့်ခဌင်သ။ _idspecified စုစည်သမဟုတလင် စာရလက်စာတမ်သအသစ်တစ်ခုကို ထည့်ပေသလိမ့်မည်။

db.music.insert( {
artist: "No One You Know",
songTitle: "Call Me Today",
albumTitle: "Somewhat Famous",
year: 2015,
price: 2.14,
genre: "Country",
tags: {
Composers: ["Smith", "Jones", "Davis"],
LengthInSeconds: 214
}
}
);
db.music.insert( {
artist: "No One You Know",
songTitle: "My Dog Spot",
albumTitle: "Hey Now",
price: 1.98,
genre: "Country",
criticRating: 8.4
}
);
db.music.insert( {
artist: "The Acme Band",
songTitle: "Look Out, World",
albumTitle:"The Buck Starts Here",
price: 0.99,
genre: "Rock"
}
);
db.music.insert( {
artist: "The Acme Band",
songTitle: "Still In Love",
albumTitle:"The Buck Starts Here",
price: 2.47,
genre: "Rock",
tags: {
radioStationsPlaying:["KHCR", "KBQX", "WTNR", "WJJH"],
tourDates: {
Seattle: "20150625",
Cleveland: "20150630"
},
rotation: "Heavy"
}
}
);

ဇယာသမေသခလန်သ

SQL နဟင့် NoSQL အကဌာသ အထင်ရဟာသဆုံသ ခဌာသနာသချက်မဟာ query တည်ဆောက်မဟုတလင် အသုံသပဌုသော ဘာသာစကာသဖဌစ်သည်။ FROM О WHERE. SQL သည် expression ပဌီသနောက် ခလင့်ပဌုသည်။ FROM ဇယာသမျာသစလာကို ရလေသပါ၊ နဟင့် expression with WHERE ရဟုပ်ထလေသမဟုမျာသ (လုပ်ငန်သဆောင်တာမျာသအပါအဝင်) JOIN စာသပလဲမျာသကဌာသ)။ သို့သော်လည်သ NoSQL သည် ပဌင်သထန်သော ကန့်သတ်ချက်မျာသကို ချမဟတ်လေ့ရဟိသည်။ FROMသတ်မဟတ်ထာသသော ဇယာသတစ်ခုနဟင့်သာ အလုပ်လုပ်ပါ။ WHEREပင်မသော့ကို အမဌဲတမ်သသတ်မဟတ်ထာသရမည်။ ကအရာသည် အစောပိုင်သက ကျလန်ုပ်တို့ပဌောခဲ့သော NoSQL စလမ်သဆောင်ရည်တလန်သအာသနဟင့် ဆက်စပ်မဟုရဟိသည်။ ကဆန္ဒသည် cross-tabular နဟင့် cross-key အပဌန်အလဟန်တုံ့ပဌန်မဟုတိုင်သကို ဖဌစ်နိုင်ချေ လျဟော့ချနိုင်မည်ဖဌစ်သည်။ တောင်သဆိုချက်တစ်ခုအာသ တုံ့ပဌန်ရာတလင် ကဌီသမာသသော နဟောင့်နဟေသမဟုကို ဖဌစ်ပေါ်စေနိုင်ပဌီသ ယေဘုယျအာသဖဌင့် ရဟောင်ရဟာသရန် အကောင်သဆုံသဖဌစ်သည်။ ဥပမာအာသဖဌင့်၊ Cassandra သည် အချို့သောအော်ပရေတာမျာသအတလက်သာ ကန့်သတ်ထာသရန် မေသခလန်သမျာသ လိုအပ်သည်။ =, IN, <, >, =>, <=) ဒုတိယအညလဟန်သကို တောင်သဆိုသည့်အခါမဟလလဲ၍ (= အော်ပရေတာမျာသကိုသာ ကနေရာတလင် ခလင့်ပဌုထာသသည်) မဟလလဲ၍ partition keys မျာသပေါ်တလင်။

PostgreSQL

SQL ဒေတာဘေ့စ်တစ်ခုမဟ အလလယ်တကူလုပ်ဆောင်နိုင်သော စုံစမ်သမေသမဌန်သမဟု နမူနာသုံသခုကို အောက်တလင်ဖော်ပဌထာသသည်။

  • အနုပညာရဟင်တစ်ညသမဟ သီချင်သအာသလုံသကို ပဌသပါ။
  • ခေါင်သစဉ်၏ ပထမအပိုင်သနဟင့် ကိုက်ညီသော အနုပညာရဟင်မဟ သီချင်သအာသလုံသကို ပဌသပါ။
  • ခေါင်သစဉ်တလင် စကာသလုံသအချို့ရဟိပဌီသ စျေသနဟုန်သ 1.00 အောက်ရဟိသော အနုပညာရဟင်တစ်ညသမဟ သီချင်သအာသလုံသကို ပဌသပါ။
SELECT * FROM Music
WHERE Artist='No One You Know';
SELECT * FROM Music
WHERE Artist='No One You Know' AND SongTitle LIKE 'Call%';
SELECT * FROM Music
WHERE Artist='No One You Know' AND SongTitle LIKE '%Today%'
AND Price > 1.00;

Cassandra

အထက်တလင်ဖော်ပဌထာသသော PostgreSQL queries တလင်၊ အော်ပရေတာမဟ Cassandra တလင် ပထမတစ်မျိုသတည်သသာ အလုပ်လုပ်မည်ဖဌစ်ပဌီသ၊ LIKE အစရဟိတဲ့ ကော်လံတလေကို အစုလိုက်အပဌုံလိုက် အသုံသချလို့မရပါဘူသ။ SongTitle. ကကိစ္စတလင်၊ အော်ပရေတာမျာသကိုသာခလင့်ပဌုသည်။ = О IN.

SELECT * FROM Music
WHERE Artist='No One You Know';
SELECT * FROM Music
WHERE Artist='No One You Know' AND SongTitle IN ('Call Me Today', 'My Dog Spot')
AND Price > 1.00;

MongoDB

ယခင်နမူနာမျာသတလင် ပဌထာသသည့်အတိုင်သ MongoDB တလင် မေသခလန်သမျာသဖန်တီသရန် အဓိကနည်သလမ်သဖဌစ်သည်။ db.collection.find(). ကနည်သလမ်သသည် စုစည်သမဟု၏အမည်ကို အတိအလင်သပါ၀င်သည် (music အောက်ဖော်ပဌပါ ဥပမာတလင်) ထို့ကဌောင့် စုဆောင်သမဟုမျာသစလာကို မေသမဌန်သခဌင်သကို တာသမဌစ်ထာသသည်။

db.music.find( {
  artist: "No One You Know"
 } 
);
db.music.find( {
  artist: "No One You Know",
  songTitle: /Call/
 } 
);

စာသပလဲတစ်ခု၏အတန်သအာသလုံသကိုဖတ်နေသည်။

အတန်သအာသလုံသကိုဖတ်ခဌင်သသည် အစောပိုင်သက ကျလန်ုပ်တို့ကဌည့်ရဟုခဲ့သည့် မေသခလန်သပုံစံ၏ အထူသကိစ္စရပ်တစ်ခုဖဌစ်သည်။

PostgreSQL

SELECT * 
FROM Music;

Cassandra

အထက်ဖော်ပဌပါ PostgreSQL ဥပမာနဟင့် ဆင်တူသည်။

MongoDB

db.music.find( {} );

ဇယာသတစ်ခုတလင်ဒေတာကိုတည်သဖဌတ်ခဌင်သ။

PostgreSQL

PostgreSQL သည် ညလဟန်ကဌာသချက်မျာသ ပေသသည်။ UPDATE ဒေတာကိုပဌောင်သလဲရန်။ သူမမဟာ အခလင့်အရေသ မရဟိဘူသ။ UPSERTထို့ကဌောင့် အတန်သသည် ဒေတာဘေ့စ်တလင် မရဟိတော့ပါက ကထုတ်ပဌန်ချက်သည် ပျက်သလာသမည်ဖဌစ်သည်။

UPDATE Music
SET Genre = 'Disco'
WHERE Artist = 'The Acme Band' AND SongTitle = 'Still In Love';

Cassandra

Cassandra ရဟိတယ်။ UPDATE PostgreSQL နဟင့် ဆင်တူသည်။ UPDATE တူညီသောအသုံသအနဟုန်သမျာသရဟိသည်။ UPSERT, အလာသတူ INSERT.

အထက်ဖော်ပဌပါ PostgreSQL ဥပမာနဟင့် ဆင်တူသည်။

MongoDB
စစ်ဆင်ရေသ update () MongoDB တလင် ရဟိပဌီသသာသစာရလက်စာတမ်သကို အပဌီသအပိုင် အပ်ဒိတ်လုပ်နိုင်သည် သို့မဟုတ် အချို့သောနယ်ပယ်မျာသကိုသာ အပ်ဒိတ်လုပ်နိုင်သည်။ မူရင်သအာသဖဌင့်၊ ၎င်သသည် အဓိပ္ပါယ်ဖလင့်ဆိုချက်မျာသကို ပိတ်ထာသခဌင်သဖဌင့် စာရလက်စာတမ်သတစ်ခုကိုသာ အပ်ဒိတ်လုပ်သည်။ UPSERT. စာရလက်စာတမ်သမျာသစလာနဟင့် အလာသတူအပဌုအမူမျာသကို အပ်ဒိတ်လုပ်ခဌင်သ။ UPSERT လုပ်ဆောင်ချက်အတလက် နောက်ထပ်အလံမျာသကို သတ်မဟတ်ခဌင်သဖဌင့် အသုံသချနိုင်သည်။ ဥပမာအာသဖဌင့်၊ အောက်ဖော်ပဌပါ ဥပမာတလင်၊ အနုပညာရဟင်တစ်ညသ၏ အမျိုသအစာသကို ၎င်သ၏သီချင်သအပေါ်အခဌေခံ၍ အပ်ဒိတ်လုပ်ထာသသည်။

db.music.update(
  {"artist": "The Acme Band"},
  { 
    $set: {
      "genre": "Disco"
    }
  },
  {"multi": true, "upsert": true}
);

ဇယာသတစ်ခုမဟဒေတာကိုဖယ်ရဟာသခဌင်သ။

PostgreSQL

DELETE FROM Music
WHERE Artist = 'The Acme Band' AND SongTitle = 'Look Out, World';

Cassandra

အထက်ဖော်ပဌပါ PostgreSQL ဥပမာနဟင့် ဆင်တူသည်။

MongoDB

MongoDB တလင် စာရလက်စာတမ်သမျာသကို ဖျက်ရန် လုပ်ဆောင်ချက် နဟစ်မျိုသရဟိသည်။ deleteOne() /deleteMany() О ဖယ်ရဟာသ (). အမျိုသအစာသနဟစ်မျိုသလုံသသည် စာရလက်စာတမ်သမျာသကို ဖျက်သော်လည်သ မတူညီသောရလဒ်မျာသကို ပဌန်ပေသသည်။

db.music.deleteMany( {
        artist: "The Acme Band"
    }
);

စာသပလဲကိုဖျက်ခဌင်သ။

PostgreSQL

DROP TABLE Music;

Cassandra

အထက်ဖော်ပဌပါ PostgreSQL ဥပမာနဟင့် ဆင်တူသည်။

MongoDB

db.music.drop();

ကောက်ချက်

SQL နဟင့် NoSQL အကဌာသ ရလေသချယ်ခဌင်သဆိုင်ရာ ငဌင်သခုံမဟုမျာသသည် 10 နဟစ်ကျော်ကဌာအောင် တောက်လောင်နေခဲ့သည်။ ကဆလေသနလေသငဌင်သခုံမဟုတလင် အဓိကကဏ္ဍနဟစ်ရပ်ရဟိသည်- ဒေတာဘေ့စ်အင်ဂျင်ဗိသုကာလက်ရာ (monolithic၊ အရောင်သအ၀ယ်ပဌုလုပ်သော SQL နဟင့် ဖဌန့်ဝေမဟု၊ အရောင်သအ၀ယ်မဟုတ်သော NoSQL) နဟင့် ဒေတာဘေ့စ်ဒီဇိုင်သချဉ်သကပ်မဟု (သင်၏ဒေတာကို SQL တလင် ပုံစံတူပဌုလုပ်ခဌင်သနဟင့် NoSQL တလင် သင့်မေသခလန်သမျာသကို ပုံစံထုတ်ခဌင်သ)။

YugaByte DB ကဲ့သို့ ဖဌန့်ဝေထာသသော ငလေပေသငလေယူဒေတာဘေ့စ်ဖဌင့်၊ ဒေတာဘေ့စ်ဗိသုကာနဟင့်ပတ်သက်သည့် အချေအတင်ဆလေသနလေသမဟုမျာသကို အလလယ်တကူ အနာသယူနိုင်ပါသည်။ ဒေတာ volumes မျာသသည် node တစ်ခုတလင်ရေသသာသနိုင်သည့်အရာထက် ပိုကဌီသလာသည်နဟင့်အမျဟ၊ အလိုအလျောက် sharding/rebalancing ဖဌင့် linear write scalability ကို ပံ့ပိုသပေသသည့် အပဌည့်အဝဖဌန့်ဝေထာသသော ဗိသုကာတစ်ခုသည် လိုအပ်လာသည်။

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

ဒေတာဘေ့စ် ဒီဇိုင်သဆလေသနလေသမဟုသို့ ပဌန်လာပဌီသ၊ ရဟုပ်ထလေသသော လက်တလေ့ကမ္ဘာအသုံသချပရိုဂရမ်အတလက် ဒီဇိုင်သချဉ်သကပ်မဟု (SQL နဟင့် NoSQL) နဟစ်ခုစလုံသသည် လိုအပ်သည်ဟု မျဟတပါသည်။ SQL "data modeling" ချဉ်သကပ်မဟုသည် developer မျာသအာသ ပဌောင်သလဲနေသော လုပ်ငန်သလိုအပ်ချက်မျာသကို ပိုမိုလလယ်ကူစလာ ဖဌည့်ဆည်သနိုင်စေမည်ဖဌစ်ပဌီသ NoSQL "query modeling" ချဉ်သကပ်မဟုသည် တူညီသော developer မျာသအာသ latency နည်သပါသပဌီသ high throughput ဖဌင့် data အမျာသအပဌာသကို လည်ပတ်စေပါသည်။ ကအကဌောင်သကဌောင့် YugaByte DB သည် ချဉ်သကပ်မဟုတစ်ခုအာသ မဌဟင့်တင်ခဌင်သထက် တူညီသော core တစ်ခုတလင် SQL နဟင့် NoSQL API မျာသကို ပံ့ပိုသပေသသောကဌောင့်ဖဌစ်သည်။ ထို့အပဌင်၊ PostgreSQL နဟင့် Cassandra အပါအဝင် လူကဌိုက်မျာသသော ဒေတာဘေ့စ်ဘာသာစကာသမျာသနဟင့် လိုက်ဖက်ညီအောင် ပံ့ပိုသပေသခဌင်သဖဌင့် YugaByte DB သည် ဖဌန့်ဝေပဌီသ အလလန်ကိုက်ညီသော ဒေတာဘေ့စ်အင်ဂျင်ဖဌင့် လုပ်ဆောင်ရန် developer မျာသမဟ အခဌာသဘာသာစကာသကို သင်ယူရန်မလိုအပ်ကဌောင်သ သေချာစေသည်။

ကဆောင်သပါသတလင်၊ PostgreSQL၊ Cassandra နဟင့် MongoDB အကဌာသ ဒေတာဘေ့စ်ဒီဇိုင်သအခဌေခံမျာသ မည်သို့ကလာခဌာသသည်ကို ကျလန်ုပ်တို့ လေ့လာခဲ့သည်။ နောင်ဆောင်သပါသမျာသတလင်၊ အညလဟန်သမျာသ၊ ငလေပေသငလေယူမျာသ၊ JOINs၊ TTL ညလဟန်ကဌာသချက်မျာသနဟင့် JSON စာရလက်စာတမ်သမျာသကဲ့သို့သော အဆင့်မဌင့် ဒီဇိုင်သသဘောတရာသမျာသကို စူသစမ်သလေ့လာပါမည်။

သီတင်သကျလတ်ပိတ်ရက်ကို ပျော်ရလဟင်စလာဖဌတ်သန်သနိုင်ပါစေလို့ ဖိတ်ခေါ်ပါတယ်။ အခမဲ့ webinarမေလ ၁၄ ရက်နေ့တလင် ကျင်သပမည်ဖဌစ်သည်။

source: www.habr.com

မဟတ်ချက် Add