Calm Hill My Random Thoughts

Dat

Version Control System တွေထဲမှာ အခုအချိန်အတွက် အသုံးအများဆုံးက Git ဖြစ်လိမ့်မယ် လွန်ခဲ့တဲ့ ၅ နှစ်လောက်နဲ့စာရင် CVS, SVN တွေက တဖြည်းဖြည်းနဲ့ အသုံးနည်းလာကြပါပြီ။ Git ကိုသုံးတာက Source Code အတွက်ရယ် အပြောင်းအလဲသိပ်များတဲ့ Binary File တွေရယ်အတွက်က လုံလောက်ပါတယ် Source Code အတွက်ဆိုတာက Text File ဖြစ်တာရယ် Size အရလည်း Single Source Code File ဟာ 1MB ရောက်ဖို့ဆိုတာက အတော်လေးရေးယူရမယ် အများအားဖြင့်လည်း Multiple Small Files တွေပဲများပါတယ်။ ပြဿနာက Data File အကြီးကြီးတွေဆိုရင် အတော်လေး ပြဿနာတက်လာတယ် တခါတရံမှာ Data Analysis လုပ်တာတို့ Data Science Competition တွေမှာတို့ ပေးလေ့ရှိတဲ့ Dataset တွေမှာ Single File တခုဟာ အနည်းဆုံး 100 MB ကနေစပြီး GB လောက်အထိလည်း ဖြစ်နိုင်ပါတယ်။

Data တွေက တခါတရံ Raw တွေပေးလိုက်တာ ကိုယ့်ဟာကိုယ်လည်း လိုအပ်သလို Pre-Processing, Cleaning ပြန်လုပ်ရသေးတော့ လိုအပ်ရင်ဒါမှမဟုတ် မှားပြီးတော့လုပ်မိရင် ပြန်သုံးဖို့အတွက် မူရင်းဖိုင်တွေချန်ထား တခုခုပြင်လိုက်မိရင် Version တခုအနေနဲ့ File ကို Manually Save လုပ်ထားနဲ့ အတော်လေး ဂွကျတတ်ပါတယ်။ အဲလို File အကြီးကြီးတွေနဲ့ကျ Git ကိုသုံးလို့ရပေမယ့် Performance အရအတော်နှေးတယ် အဓိကကျတဲ့အချက်က Git အနေနဲ့က Version ကို File Level အနေနဲ့ပဲ ထိမ်းထားလို့ရတယ် Data Level မဟုတ်ဘူး Data Level ဆိုတာက Data Item ပေါင်း ၁ သောင်းပါတယ် ၁၀ ခုပဲပြင်တယ်ဆိုရင် Version က ပြင်လိုက်တဲ့ Item ၁၀ ခုကိုပဲ Track လုပ်ရမယ် Git အနေနဲ့ဆိုရင် File ရဲ့ Line Number ဘယ်လောက်နဲ့ ဘယ်လောက် ပြောင်းသွားတယ်ဆိုပြီး File ၁ ခုလုံးကို Track လုပ်တော့ မူရင်း File က ကြီးရင်ကြီးသလောက် Performance ဟာ အတော်ဆိုးပါတယ်။

ပြဿနာဆိုတာက ကိုယ့်တယောက်ထဲ ဖြစ်တာမှမဟုတ်ပဲ ကိုယ့်ထက်အရင် ကြုံခဲ့တဲ့လူတွေ ဘယ်လိုရှင်းကလဲ လိုက်ပြီးရှာရင်းဖွေရင်းနဲ့ Dat ဆိုတဲ့ Data Versioning Software တခုကိုတွေ့တယ် အခြေအနေကတော့ အတော်လေးကို စောသေးတော့ Stable ပါလို့ပြောဖို့ အတော်လေးခက်တဲ့ အချိန်ပဲရှိပါသေးတယ် ဒီအခြေအနေမှာကိုပဲ စမ်းသုံးကြည့်တော့ အတော်လေးကို သုံးလို့ရနေပါပြီ ကိုယ်သုံးဖို့လိုအပ်တဲ့ အခြေအနေအထိ အားလုံးကတော့ အခုအချိန်အထိကတော့ အဆင်ပြေပြေပါပဲ ပြဿနာကြီးကြီးမရှိသေးဘူး။

http://dat-data.com

Dat ရဲ့ Concept ဟာ Git သုံးတဲ့လူတွေအတွက်က ခက်ခက်ခဲခဲမဟုတ်ဘူး Distributed Architecture ဖြစ်တာကနေ Terminology တွေအထိက အားလုံးနီးနီးတူတယ် Data အတွက် Design လုပ်ထားတာတခုပဲ ကွာတယ်လို့ပြောလို့ရတယ်။ Dat မှာ Data Item တွေကို Track လုပ်စေချင်ရင် JSON file ဖြစ်ဖြစ် CSV လို file တွေဖြစ်ဖြစ် Structure Parse လုပ်လို့ရတဲ့ Format အတော်များများကို Support လုပ်ပါတယ် ထည့်ပေးလိုက်တာနဲ့ Parse လုပ်ပြီးတော့ Item တခုချင်းစီကို Track လုပ်ပါတယ်။ ကိုယ်က Item 2 ကိုပဲပြင်ပြီးတော့ Add လုပ်လိုက်ရင် ပြင်လိုက်တဲ့ ၂ ခုကိုပဲသူက Version ပြောင်းတယ် မပြောင်းတဲ့ Item တွေကိုမထိတော့ File လိုက် Track လုပ်တာထက် အများကြီးမြန်သလို Efficient လည်းပိုဖြစ်တယ်။ Scientific Data တွေမှာ တချို့အရာတွေက Parse လုပ်လို့မလွယ်တဲ့ ဒါမှမဟုတ် လုပ်ဖို့လည်းမလိုတဲ့ Legacy Format တွေနဲ့လည်း ရှိကောင်းရှိတယ် အဲဒါတွေအတွက်လည်း File လိုက်ပဲ သုံးဖို့လိုရင်လည်း Dat မှာသုံးလို့ရပါတယ်။ စမ်းကြည့်ချင်ရင်တော့ အောက်မှပြထားတဲ့ URL မှာ Official Tutorial ရှိတယ် Browser မှာပဲ စမ်းကြည့်လို့ရတယ်။

http://try-dat.com

Dat မှာ တခုအဆင်ပြေတာက Dat API ကနေ ကိုယ်ရေးနေတဲ့ Program ထဲကနေ Manipulate လုပ်ထားတဲ့ Data တွေကို Version တခုအနေနဲ့ တိုက်ရိုက်အနေနဲ့ ထည့်လိုက်လို့ရတယ် အဲဒီတော့ File အနေနဲ့သွားရေးစရာ မလိုအပ်တော့ Data Write တွေမှာလည်း အရေးရသက်သာသလို Data Read အတွက်လည်း ဘယ် Version ဆိုပြီးတော့လည်း Dat API ကနေ တခါတည်း လှမ်းဖတ်လို့ရတော့ အချိန်ကုန်သက်သာတယ်။ သူ့ရဲ့ Site မှာ နမူနာအနေနဲ့ R ရယ် Python ရယ်နဲ့ပြထားတာတွေ့တယ် Python နဲ့ စမ်းမကြည့်မိပေမယ့် R နဲ့စမ်းကြည့်တာတော့ အဆင်ပြေပါတယ်။ Extreme Case လိုမျိုးတော့ 1GB လောက်ရှိတဲ့ Data တွေကို Dat ထဲမှာ Version အနေနဲ့ သွားသိမ်းတာနဲ့ File ထဲကို Manually သွားရေးတာနဲ့ ဘယ်လောက် Performance ကွာလဲဆိုတာအထိတော့ စမ်းမကြည့်ဖြစ်သေးပါဘူး Data Item Level Version ဆိုတဲ့အတွက် မလိုအပ်တဲ့ Data တွေကို ထပ်မရေးတော့ ပိုတော့မြန်ပါလိမ့်မယ်။ R နဲ့သုံးဖို့အတွက်ဆိုရင် rdat ကို Install လုပ်ဖို့လိုမယ်။

https://github.com/ropensci/rdat

Cutting Edge ဆိုတော့ အကြံပေးတိုင်း သုံးတတ်တဲ့ စကားရှိတယ် Cutting Edge ဆိုတော့ သုံးတတ်ရင်တော့ အလုပ်မြန်မြန်ပြီးတာပေါ့လေ ဒါပေမယ့်လို့ Cutting Edge ဖြစ်နေတော့ မတော်တဆဆိုတာရှိခဲ့ရင် သွေးထွက်သံယိုလည်း ပိုများတတ်မှာပေါ့ အဓိကအားဖြင့် လူသုံးနည်းလွန်းရင် ပြဿနာဖြစ်ရင် ကိုယ်တိုင်ရှင်းနိုင်တဲ့ အခြေအနေရှိရင်ရှင်း မရှင်းတတ်ဘူးဆိုရင်တော့ ရွာလည်လိမ့်မယ်။ Data ကို Version Track လုပ်ဖို့ဆိုတာက သာမန်အားဖြင့် Scientific Computing တွေရယ် Data Science တွေမှာပဲ အသုံးများဖို့ရှိတော့ အသုံးတည့်တဲ့လူများရှိခဲ့ရင် စမ်းကြည့်ချင်ကြည့်နိုင်ပါတယ် သာမန်အားဖြင့် Software Development အလုပ်တွေမှာတော့ လိုအပ်ဖို့တော့ နည်းပါလိမ့်မယ်။