Friday, April 8, 2016

Database Language

Database ကိုအသံုးျပဳဖို့အတြက္ database Language ဆိုတာလိုအပ္ပါတယ္။ database language ေတြက Database schema ေတြ၊ actual data ေတြကို define သတ္မွတ္ေပးရန္အတြက္အသံုးျပဳၾကပါတယ္။ Database Language အမ်ိဳးအစား ႏွစ္မ်ိဳးရွိပါတယ္။
  • SQL (Structured Query Language)
  • NDL

Relational data model ေတြကို အသံုးခ်ဖို့အတြက္ (data manipulation လုပ္ဖိုအတြက္) SQL ကိုအသံုးျပဳပါတယ္။ NDL ကေတာ့ network data model ကို manipulation လုပ္ဖို့အတြက္အသံုးျပဳၾကပါတယ္။
Database Language ေတြကို အေသးစိတ္ေလ့လာမယ္ဆိုရင္ သူ့ကို အမ်ိဳးအစား ၃ မ်ိဳးခြဲျခားႏုိင္ပါတယ္။
  • Data Definition Language (DDL)
  •  Data Manipulation Language (DML)
  •  End User Language (EUL)

Data Definition Language ဆိုတဲ့အတိုင္းဘဲ သူက data ေတြကို define လုပ္ေပးႏိုင္ပါတယ္။ တနည္းေျပာရရင္ schema ေတြကို သတ္မွတ္ေပးႏိုင္ပါတယ္။ ဥပမာ Create ၊ Drop ၊ Rename တို့ကုိေျပာျခင္းျဖစ္ပါတယ္။
Data Manipulation Language ဆိုတာကေတာ့ database ကို operation လုပ္ဖိုအတြက္ အသံုးျပဳတာျဖစ္ပါတယ္။ ဥပမာ table တစ္ခုကေန လုိခ်င္တဲ့ row ကို ဆဲြထုတ္တာမ်ိဳးကို ဆိုလိုပါတယ္။ (Select ၊ Insert ၊ Update စသည္ျဖင့္)
End User Language ဆိုတာကေတာ့ end user တွေအတွက် query Language ဘဲဖြစ်ပါတယ်။

SQL Database Language

            ခုအသံုးမ်ားဆံုး data model ကုိေျပာပါဆိုရင္ relational data model ဘဲျဖစ္ပါတယ္။ SQL ကေတာ့ relational data model ေတြကို manipulate လုပ္ဖိုအတြက္ အသံုးျပဳတဲ့ database Language တစ္ခုပါဘဲ။ SQL က non-procedural Language ျဖစ္တဲ့အတြက္ သူ့ရဲ့ statement ေတြက ရိုးရွင္း ပါတယ္။ တစ္နည္းေျပာရရင္ English Words စကားအတိုင္း ေရးသားထားျခင္း ဘဲျဖစ္ပါတယ္။ အဲ့တာေၾကာင့္ဘဲ SQL ကို ေနာ္တစ္မ်ိဳးေခါတာက SEQUEL ( Structured English Query Language ) ဘဲျဖစ္ပါတယ္။
(manipulate လုပ္တယ္ဆိုတာ set Operations ေတြျဖစ္တဲ့ Union ၊ Difference ၊ Intersection ၊ Cartesian product လို operations မ်ိဳးကိုလည္ေကာင္း ၊ Relation Operations ေတြျဖစ္တဲ့ Projection ၊ Join ၊ Divide လို operation မ်ိဳးကိုလည္းေကာင္း ျပဳလုပ္ေပး ျခင္းျဖစ္ပါတယ္။)
SQL structure
SQL မှာ Embedded SQL နှင့် Interactive SQL ဆိုပြီးနှစ်မျိုးသုံးလို့ရပါတယ်။

Embedded SQL ကို host language system မှာအသုံးပြုပါတယ်။ Host Language system ဆိုတာက database တွေကိုအခြား programming languages တွေကနေလှမ်းပြီးတော့ manipulate လုပ်တဲ့ system မျိုးဖြစ်ပါတယ်။ ဥပမာ ပြောရရင် Java program code ထဲကနေပြီးတော့ database queries တွေကို ခေါ်သုံးတာမျိုးဖြစ်ပါတယ်။

Interactive SQL ဆိုတာကတော့ self-contained system မှာအသုံးပြုတာဖြစ်ပါတယ်။ သူတို့က အခြား programming language တွေကနေပြီးတော့ database ကို manipulate လုပ်တာမဟုတ်ဘဲ၊ database manipulation language (MySQL) တစ်ခုတည်းကဘဲ manipulate လုပ်တာဖြစ်တယ်။


Data Loading

            Database တွေတည်ဆောက်ပြီးသွားတဲ့အခါမှာ database (table) ထဲကို data တွေ ကိုထည့်သွင်းပေးရပါတယ်။အဲ့လို process မျိုးကို database loading လို့ခေါ်ပါတယ်။ database loading ကို သုံးနည်းဖြင့်ပြုလုပ်နိုင်ပါတယ်။
            Interactive System ဆိုတာကတော့ SQL statement တစ်ခုဖြစ်တဲ့ INSERT ကိုအသုံးပြုပြီးတော့ data တွေကို line by line ထည့်သွင်းတာဘဲဖြစ်ပါတယ်။ Line by line လုပ်တာကြောင့် များစွာသော data တွေကို ထည့်ရာမှာ အစဉ်မပြေပါဘူး။
            Host Language System ဆိုတာကတော့ programming language တစ်ခုခုကိုအသုံးချပြီး data တွေကို ထည့်တာဘဲဖြစ်ပါတယ်။ Programming ကိုအသုံးပြုပြီးထည့်တာကြောင့် condition ( data ကို filter) ပြုလုပ်နိုင်ပါတယ်။

            Utility Program System  ဆိုတာကတော့ utility program တွေကိုအသုံးပြုပြီးတော့ data တွေကိုထည့်သွင်းတာဘဲဖြစ်ပါတယ်။ များစွာသော data တွေကိုထည့်သွင်းရာမှာအသုံးဝင်ပါတယ်။

Wednesday, April 6, 2016

Understanding JVM

JVM လို့ေျပာတာနဲ Java developers ေတာ္ေတာ္မ်ားမ်ား ရင္းႏွီးျပီးသားျဖစ္မွာပါ။ Java app ကို run ေတာ့မယ္ဆိုရင္ အရင္ဆံုး class file ေျပာင္း၊ ျပီးရင္ bytecode ထုတ္တာျပီး  JRE ထဲမွာ execute  လုပ္လိုက္တာဘဲျဖစ္ပါတယ္။ JRE ထဲမွာဘာေတြပါဘညး္၊ ဘယ္လိုအလုပ္လုပ္ လည္းဆိုတာ သိထားဖို့လိုပါတယ္။

JRE ဆိုတာ Java API ေတြရယ္ JVM ရယ္ေပါင္းစပ္ထားတဲ့ package တစ္ခုပါဘဲ။ JRE ရဲံအဓိက component ကေတာ့ JVM (Java Virtual Machine) ဘဲျဖစ္ပါတယ္။
Virtual Machine ေတြရဲ့သေဘာ သဘာ၀အရ သူတို့က software implementation ေတြျဖစ္ျပီးေတာ့၊ program ေတြကို တကယ့္ physical machine ေပါမွာတင္ run ေနရသလိုမ်ိဳးလုပ္ေဆာင္ေပးပါတယ္။ Java က platform independence ဘာေၾကာင့္ျဖစ္တာလည္းဆိုရင္ JVM ေၾကာင့္ျဖစ္တာပါ။ Java ကိုစတင္ create လုပ္ကတည္းက WORA (Write once, Run Anywhere) ျဖစ္ဖို့အတြက္ရည္ရြယ္တာေၾကာင့္ တကယ္ physical machine (OS platforms ကုိဆိုလိုပါတယ္) ေပါမွာမွီခုီမူမရိွေအာင္ ျပဳလုပ္ထားပါတယ္။ သူ့အတြက္ ကိုယ္ပိုင္ machine (JVM) ေလးတစ္ခုတည္ေဆာက္လိုက္ျပီး bytecodes ေတြကို execute လုပ္ေပးႏိုင္တာဘဲျဖစ္ပါတယ္။
Java ကို company တစ္ခုတည္းကေန တည္ထြင္ခဲ့ေပမဲ့ JVM ကို မတူညီတဲ့ organization  ေတြကေနျပီးေတာ့ တည္ထြင္ထားပါတယ္။ အဲ့ေတာ့ JVM type ေတြက အမ်ိဳးမ်ိဳးရွိပါတယ္။ Oracle က ထုတ္တဲ့ JVM ၊ IBM ကထုတ္တဲ့ JVM စသည္ျဖင့္ေပါ့။ Google ကထုတ္တဲ့ Dalvik VM ဆိုတာလည္း JVM အမ်ိဳးအစားတစ္ခုပါဘဲ။
Complie 

Java app တစ္ခုကို complie လုပ္ လိုက္တဲ့အခါမွာ class file ထြတ္လာပါတယ္။


ထြက္လာတဲ့ class file ကို class loader ကေနျပီးေတာ့ လိုအပ္တဲ့ lib files ေတြႏွင့္ခ်ိတ္ဆက္ေပးပါတယ္။ ျပီးရင္ bytecode ကို ေျပာင္းလဲေပးလိုက္ပါတယ္။ bytecode ဆိုတာက user language ႏွင့္ machine language ၾကားမွာရွိတဲ့ middle-language တစ္ခုလဲျဖစ္ပါတယ္။ JVM က ၀င္လာတဲ့ bytecode ကို emulate လုပ္ေပးပါတယ္။ တစ္နည္းေျပာရရင္ bytecode ဆိုတာ JVM နားလည္တဲ့ language ျဖစ္သြားပါျပီး။
Class Loader ထဲမွာ process သံုးခုျပဳလုပ္ေပးပါတယ္။ Load ၊ Link ၊ Initialize ဆိုတာပါဘဲ ။ Load အပိုင္းမွာေတာ့  User-Defined Class Loader / System Class Loader / Extension Class Loader / Bootstrap Class Loader တုိပါ၀င္ပါတယ္။

Class Loader က class တစ္ခုကို load လုပ္ေတာ့မယ္ဆိုရင္ အထက္ပါ အတိုင္း စစ္ေဆးျပိးလုပ္ေဆာင္ပါတယ္။ User-Defined Class Loader က user မွ direct ေရးသားထားတဲ့ code ေတြကို load ေခါေပးပါတယ္။ System Class loader ကေတာ့ CLASSPATH ထဲမွာရွိတဲ့ class ေတြကို load ေခါေပးပါတယ္။ Extension Class Loader ကေတာ့ လုိအပ္တဲ့ Java API ေတြကို load လုပ္ေပးပါတယ္။ ေနာက္ဆံုး bootstrap class loader မွာေတာ့ JVM က စတင္ run ေနပါျပီး။
အဲ့တာ class တစ္ခုစာ process တစ္ခုပါ။ အျခားေသာ class ေတြရွိေသးတဲ့အတြက္ link process ကို ဆက္လက္လုပ္ေဆာင္ပါတယ္။

Link process ျပီးလို့ initializing လုပ္ျပီးသြားရင္ class loader အပိုင္းက ျပီးဆံုးသြားပါျပီး။ Class Loader ကေနထြက္လာတဲ့ output က Runtime Data Area ထဲကို ေရာက္ရွိသြားပါတယ္။

Runtime Data Area

            Runtime Data Area ဆိုတာ JVM ကို OS ေပါမွာ  run ႏိုင္ရန္အတြက္ သတ္မွတ္ေပးထားေသာ memory area ေလးတစ္ခုဘဲျဖစ္ပါတယ္။ Runtime Data Area ကို အပိုင္း ၅ ပိုင္းခဲြလုိရပါတယ္။ အတိအက်ေျပာရင္ ၆ ပိုင္းခြဲလို့ရတာပါ။

PC Register တစ္ခုက thread တစ္ခုအတြက္ဘဲ create လုပ္ပါတယ္။ ေနာက္ထပ္ thread တစ္ခုသာဆိုရင္ ေနာက္ထပ္ PC Register တစ္ခုထပ္ျပီး create လုပ္ေပးရပါတယ္။ ထိုနည္းတူစြာ JVM stack ႏွင့္ Native Method Stack တို့ကလညး္ အတူတူပင္ျဖစ္ပါတယ္။
Heap ႏွင့္ Method Area အပါအ၀င္ Runtime Constant Pool တုိ့က တစ္ခါ create လုပ္ယံုပါဘဲ ။ thread ေတြဘယ္ေလာက္ရွိရွိ သူတို့ကို တစ္ၾကိမ္တည္းသာ create လုပ္ေပးရပါတယ္။
PC register ဆုိ Program counter register ျဖစ္ျပီး executed လုပ္ထားတဲ့ JVM ရဲ့ instruction ေတြရွိတဲ့ address ဘဲျဖစ္ပါတယ္။ next instruction ေတြကို ရည္ညြန္းတာဘဲျဖစ္ပါတယ္။
Thread တစ္ခုအတြက္ JVM stack တစ္ခု ျဖစ္တယ္။ အဲ့ေတာ့ stack ေတြအားလံုးကို stack Frame ေပါမွာတင္ထားပါတယ္။ JVM က လိုအပ္သလို stack ေတြကို stack frame ေပါ push/pull လုပ္ေဆာင္ပါတယ္။
Native method stack ဆိုတာကေတာ့ Java မဟုတ္တဲ့ native code ေတြထားရွိရန္အတြက္သံုးတဲ့ stack တစ္ခုဘဲျဖစ္ပါတယ္။ တစ္နည္းေျပာရရင္ native interface ကေနတစ္ဆင့္ link ခ်ိတ္ထားတဲ့ c code ေတြကိုထားရန္အတြက္ ျဖစ္ပါတယ္။ c stack ေပ့ါ။ (program ေပါမူတည္ျပီး stack name ေျပာင္းနီင္သည္)
Method Area ဆိုတာ လြယ္လြယ္ေျပာရရင္ class data (static variables, field and method information, method bytecode constant pool) ေတြ store လုပ္တဲ့ space တစ္ခုျဖစ္ပါတယ္။
Heap ဆိုတာက objects ေတြ ၊ instances ေတြကို store လုပ္တဲ့ space တစ္ခုျဖစ္တယ္။ အဓိကကေတာ့ garbage
Collection အတြက္သံုးျပဳပါတယ္။ JVM အမ်ိဳးအစားေတြက heap ကိုကိုင္တယ္ ပံုခ်င္း မတူ ႏွင့္ garbage collect လုပ္၊မလုပ္ ေပါမွာကြဲျပားသြားပါတယ္။ 

Monday, April 4, 2016

3-Tier Schema and ERD

3-Tier Schema

            Data modeling ေတြလုပ္ေဆာင္ရန္အတြက္ ANSI-SPARC ကေနျပီးေတာ့ 3-tier schema ကို မိတ္ဆတ္ခဲ့ပါတယ္။ 3-Tier လို့ေျပာတဲ့အတိုင္းဘဲ သူ့မွာ အပိုင္းသံုးပိုင္းပါ ပါတယ္။

  1. External schema
  2. Internal schema
  3. Conceptual schema 
External schema က user point view က data ေတြ (user လိုခ်င္တဲ့ ပံုစံ) ကို အသံုးျပဳျပီး database ပံုစံတည္ေဆာက္တဲ့အပိုင္းျဖစ္ပါတယ္။ Conceptual schema ကေတာ့ data structure ကို logical အရ define လုပ္ေပးယံုပါ ။တကယ္ တည္ေဆာက္တာက internal schema အပိုင္းမွာျဖစ္ပါတယ္။ တစ္နည္းေျပာရရင္ internal schema က physical data structure ကို define လုပ္ေပးတာပါျဖစ္ပါတယ္။

ERD

          အေဆာက္ဦး တစ္ခုတည္ေဆာက္ေတာ့မယ္ ဆိုရင္ ဒီအတိုင္း ရမ္းသန္းေဆာက္လို့မရပါဘူး။ လိုအပ္တဲ့ design ေတြ ၊ resources ေတြကို analysis လုပ္ေပးျပီးမွ တည္ေဆာက္ရပါတယ္။ အေဆာက္ဦး ပံုစံ design ခ်တာမ်ိဳး -blueprint လုပ္တာမ်ိဳးလုပ္ရပါတယ္။ Database မွာလည္း ထိုနည္းတူစြာ ျပဳလုပ္ေပးရပါတယ္။ အဲ့လိုမ်ိဳး process ကို Entity-Relationship model (ERD) ဆိုတဲ့ diagram expressing ကေနျပီးေတာ့ ျပဳလုပ္ေပးပါတယ္။ ERD ပံုေတြဆိုတာ database blueprint ေတြျဖစ္ပါတယ္။ ERD က 3-Tier schema မွာဆိုရင္ conceptual schema အပိုင္းကို ေဖာ္ျပေပး တဲ့ diagram ေတြဘဲျဖစ္ပါတယ္။ ERD အဆင့္ထိ ဆိုရင္ DBMS independence ဘဲျဖစ္ပါေသးတယ္။  ဆိုလိုတာက အေဆာက္ဦးေဆာက္ဖို့ အတြက္ design ဆြဲတာ က ပံုစံခ်တာ သတ္သတ္ဘဲရွိပါေသးတယ္။ အဲ့ designed ဆြဲျပီးသား အေဆာက္ဦးကိုူ ဘာႏွင့္တည္ေဆာက္မွာလည္း (ဥပမာ သစ္သာ၊အုတ္ စသည္ျဖင့္) ဆိုတာက အပိုင္းတစ္ပိုင္းျဖစ္တယ္။ ERD က ပံုစံ သတ္သတ္ျဖစ္ျပီးေတာ့ အဲ့ကေနထြက္လာတဲ့ ပံုစံေပါမူတည္းျပီး ဘာ DBMS (ဥပမာ MySQL,Oracle စသည္ျဖင့္) ကိုသံုးမွာလညး္ ဆိုတာကို ျပဳလုပ္ၾကပါတယ္။
ERD model တစ္ခုမွာဆိုရင္ အပိုင္း ၃ ပိုင္းပါ ပါတယ္။

  1.   Entities
  2.  Relationships
  3.  Attributes
Entities ဆိုတာ က objects ေတြပါ။ သူ့ကို rectangle box ႏွင့္ေဖာ္ျပပါတယ္။ Relationship ဆိုတာကေတာ့ entity တစ္ခု ႏွင့္ entity တစ္ခုၾကားက ဆက္သြယ္မွဳပါဘဲ၊ သူ့ကုိ diamond ပံုစံျဖင့္ေဖာ္ျပပါတယ္။ Attribute ဆိုတာကေတာ့ entity ထဲမွာပါ ၀င္တဲ့ values ေတြပါ (characteristics of entities) ၊ သူ့ကုိ oval ပံုုစံျဖင့္ေဖာ္ျပပါတယ္။

ပံုတြင္ ေဖာ္ျပသည့္အတိုင္း Driver က ေနျပီး ကား ေမာင္းျပီး ခရီးတစ္ခု သြားတာ ျဖစ္ပါတယ္။ Driver ၊ Car ဆိုတာက objects ေတြျဖစ္ပါတယ္။ သူတုိ့ကို entities အေနႏွင့္ယူဆပါတယ္။ Driver တစ္ေယာက္မွာ နာမည္ပါမယ္၊ လိုင္စင္ပါမယ္ စသည္ျဖင့္ေပါ့ အဲ့တာေတြက driver ရဲ့ characteristics ေတြဘဲျဖစ္ပါတယ္။ ပံုမွာေတာ့ Driver ရဲ့ Name တစ္ခုကိုဘဲ attribute ယူထားတာဘဲျဖစ္ပါတယ္။ ထိုနည္းတူစြာပင္ Car လည္းအတူတူပင္ျဖစ္ပါတယ္။ Driver ႏွင့္ Car ၾကားမွာ ဘာ      ဆက္ႏြယ္မွူရွိလည္းဆိုရင္ ကားေမာင္းျခင္း (Drive) ဆိုတာက ဆက္သြယ္ေပးထားပါတယ္။ Drive Relationship မွာ attribute တစ္ခု ရွိေနတာ ကိုသတိျပဳမိမယ္ထင္ပါတယ္။ ဆိုလုိတာက trip ဆိုတာ Driver ေၾကာင့္ျဖစ္တာလညး္မဟုတ္ ဘူး၊ Car ေၾကာင့္ျဖစ္တာလည္း မဟုတ္ဘူး (Car ကိုဒီအတ္ိုင္းရပ္ထားရင္ေပါ့) ၊ Driver က Car ကို ေမာင္းသြားမွသာ Trip ဆိုတာ ျဖစ္ေပါေသာေၾကာင့္ Trip attribute ကို drive Relationship မွာ link ခ်ိတ္ေပးထား ျခင္းျဖစ္ပါတယ္။
Relationship အမ်ိဳးအစား သံုးမ်ိဳးရွိပါတယ္။
One-to-One
One-to-many
Many-to-many တိုဘဲျဖစ္ပါတယ္။ တကယ္လို့ Car တစ္စီး Driver တစ္ေယာက္ဘဲျဖစ္ရမယ္ လို့ constant ေပးမယ္ဆိုရင္ one-to-one relationship ျဖစ္ေပါပါတယ္။ အဲ့လိုမွ မဟုတ္ဘဲ Car တစ္စီး ကို Driver တစ္ေယာက္ထက္မက လို constant ေပးရင္ one-to-many relationship ျဖစ္ေပါပါတယ္။