Monday, August 26, 2013

MongoDB වලට පූර්විකාවක්

7 comments
MongoDB ගැන මුලින්ම අහන්න හම්බවුනේ කාලෙකට කලින් node.js සහ Single page applications ගැන ඔපීසියේදී කතාවෙද්දි NoSQL වලට කතාව ඇදිලා ආපුවාම. මේ කතාකරන්නේ මොකක් ගැනද කියන එක පොඩ්ඩක් අපහැදිලි වගේ නම්, පුංචි පැහැදිලි කිරීමක් කරන්නම්. Mysql කියන්නේ ඩේටා බේස් සිස්ටම් එකක් කියල හැමෝම දන්නවනේ. MongoDB කියන්නෙත් ඩේටාබේස් සිස්ටම් එකක් හැබැයි ඒකෙ විදිහ mysql හරි sql හරි වගේ නෙවෙයි ටිකක් වෙනස්.

Mysql හරි sql හරි ගත්තාම ඒවා Relational Database Systems. සරලව කිව්වාම දත්ත ගබඩා කරගන්න ටේබල්ස් තියෙනවා. ටේබල් වල තියෙන කොලම් එකකින් හරි කීපෙකින් හරි අනෙක් ටේබල් එකක් හරි කීපයක් හරි එක්ක සම්බන්ධකම් හදාගන්නවා. ඒකනේ Relational කියන්නේ. Mongo වගේ Nosql ඩේටා බේස් මීට වඩා වෙනස්.රිලේෂනල් ටේබල්ස් නැහැ. ඒ වෙනුවට දත්ත ගබඩා කරන්නේ JSON Object වගේ.

i.e
{ "firstName":"Amila" , "lastName":"Bandara" }

Mongodb වල දත්ත ගබඩාකරන විදිහට කියන්නේ BSON  කියලා. ඒ කියන්නේ JSON වල binary වර්ෂන් එක කියන අර්ථෙන්. MongoDB එකක Users කියලා Collection එකක් තිබුනොත් ඒක මේ වගේ වෙන්න පුලුවන්. ඔතන Collection කියලා කියන්නේ Mysql භාෂාවෙන් කියනවා නම් Table එකක් කියන එක.නමුත් මතක තියාගන්න ඕන කාරනාව තමා මේ කියන Collection , mysql table වලින් හාත්පසින්ම වෙනස් කියන එක.


මේක දිහා බලද්දි පැහැදිලිව පෙනෙනෙ දේ තමයි මේ documents වල සමාන වගේම වෙනස් Fields තියෙනවා කියන එක. Mongodb වල Document එකක් කියල කියන්නේ Mysql Table එකක එක Record එකක් වගේ දෙයකට. එතකොට Collection එකක් කියල කියන්නේ Document එකකට හෝ ගොඩක එකතුවකට.

Mysql වගේ ස්ථාවර Relational DBMS තියෙද්දි Mongodb වගේ දේවල් ඇතිවෙන්නත් මොකක් හරි හේතුවක් තියෙන්න ඕන. Mongodb කරලියට එන්නේ මොනවගේ පදනමකින්ද ?

Mysql වගේ Relational databases ඩිසයින් කරද්දි අපි Keys සහ indexes තියාගන්නවා Tables අතර Relationships හදාගන්න සහ Query වලට කාර්යක්ෂමව දත්ත අරගන්න පුලුවන් වෙන්න. ඒ වගේම දත්ත අනවශ්‍ය විදිහට රිපීට් වෙන එක හෙවත් Data Redundancy වලක්වන්න  Normalization කියලා ක්‍රියාපටිපාටියකට ලක්කරනවා. මේ Normalization එකේදී තියෙන Tables කැඩි කැඩී තව තව Tables හැදීම සිද්ද වෙනවා.(ඒ එක්කම keys සහ Indexes  ගානත් වැඩිවෙනවා.) එතකොට දත්ත ආපහු ගනිද්දි වැඩි වැඩියෙන් Joins ගහන්න සිද්ද වෙනවා.ඒක සාමාන්‍යයි. නමුත් ප්‍රශ්නෙ පටන් ගන්නෙ ඩේටාබේස් එක ලොකු වෙද්දි. ඩේටාබේස් එක ලොකු වෙන්න ලොකු වෙන්න, ඒක දත්ත වලින් පිරෙන්න පිරෙන්න Query වල කාර්යක්ෂමතාවය අඩුවෙලා මුලු System එකම Slow වෙන්න ගන්නවා.

Mongo වගේ Nosql දත්ත පද්දති වලින් විසඳන්න හදන්නේ ඔන්න ඔය ප්‍රශ්නයයි. ඒවාට අති විශාල දත්ත සම්භාරයක් හසුරවන එක, අපහසුතාවයකින් තොරව Query වල කාර්යක්ෂමතාවය අඩුනොකර දත්ත Retrieve කරන එක ප්‍රශ්නයක් නෙවෙයි. ප්‍රධානම වාසිය තමයි අධික වේගය.

මේවගෙත් අඩුපාඩු නැතිවා නෙවෙයි. දත්තවල විශාලත්වය සාපේක්ෂව වැඩියි. ඒ වගේම Mongo Indexing වලට භාවිතාකරන ක්‍රමය නිසා අනවශ්‍ය විදිහට Memory නාස්තිවීමකුත් සිද්ද වෙනවා. ඔය දෙක තමයි ප්‍රධාන අඩුපාඩු විදිහට කියන්න තියෙන්නේ.

ඉතිං Mongodb වගේ Nosql ජාතියේ ඩේටාබේස් නිසා Mysql සහ Sql වල පල්ලට යාවිද ? තීර්ථ යාත්‍රිකයා නම් හිතන්නේ එහෙම නොවෙන බවයි. මොකද අපි මිටිය ඕන තැනට මිටියත් , නියන ඕන කරන තැනට නියනත් පාවිච්චි නොකලොත්  කරන්න යන වැඩේ සාර්ථක නොවෙන නිසා. අනික් දේ තමයි Mysql වලට මිලියන 300ක රෙකෝර්ඩ්ස් වුනත් ප්‍රශ්නයක් නැතිව හැන්ඩ්ල් කරන්න පුලුවනි. ඒ නිසා අපිට හදන්න වෙන ගොඩාක් Systems වලට Mysql ප්‍රමාණවත්. අධිය වේගයකුත් එක්ක ලොකු ඩේටාබේස් එකක් හැන්ඩ්ල් කරන්න වෙන අවස්ථාවන් වලට Mongo හොඳ විසඳුමක් විදිහටයි සැලකෙන්නේ. Mongodb කියන්නෙ අලුත් දෙයක්. ඒ නිසා විවිද Bottle -necks වගේම Bugs තියෙන්නත් පුලුවන්. මෙමරි මැනේජ්මන්ට් සම්බන්ධයෙන් Open වෙච්චි Ticket එකක් තාම තියෙනවා Close නොවී . :D . හැබැයි තොරතුරු තාක්ෂණ ක්ෂේත්‍රය වගේ සීග්‍රයෙන් වෙනස් වෙන ක්ෂේත්‍රයක රැකියාව කරන උදවිය මේ වෙනස් වෙන තාක්ෂණයන් ගැන අවදානයෙන් ඉඳලා යම් තරමකට හරි එව්වා අතපතගාල හුරුවෙලා, අවබෝධයක් ලබාගෙන තියෙන එක නුවණට හුරුයි. ඒක ක්ෂේත්‍රයේ ඉදිරියට යන්න උපකාර කරාවි.

7 comments:

  1. මොන්ගෝ එක sql, mysql තරමට එන්නනම් තව ගොඩක් කල් යාවි මම හිතන්නේ. ඒත් කන්සෙප්ට් එක ගත්තම පහසුයි වගේ කියලා හිතෙන්නේ. මේකේ තව මොනවද drawbacks ටිකක් තිබුනා. හරියටම දැන් මතක නෑ හප්පා. වටිනා ලිපියක් !

    ReplyDelete
    Replies
    1. කොහොමටත් ලොකු සයිස් ඩේටාබේස් එකක් නැතිව මොන්ගො භාවිතාකරන එක ඒ හැටි අවශ්‍යතාවයක් නෑ. අනික් අතට Facebook වගේ ලොකුම ඇප් එකක උනත් තාමත් Mysql භාවිතා කරනවා.ස්තුතියි.

      දන්නා තරමින් තියෙන ලොකුම ඩ්‍රෝ බැක් එකක් තමා මෙමරි භාවිතය වැඩි වීම. ඒ එයාල Data Retrieval වලදි භාවිතා කරන ඇල්ගොරිදම් එක නිසා.

      Delete
  2. බොහොම ස්තුතියි අමිල. ගොඩක් වටිනා ලිපියක්. මොන්ගෝ ගැන කියවපු පළමු ලිපිය.... :)

    ReplyDelete
    Replies
    1. ස්තුතියි ස්තුතියි. ඩිවලොපර් කෙනෙක් වෙච්ච් එකේ ඔය ගැන පොඩ්ඩක් හොයලා බැලුවනම් තමා හොඳ :)

      Delete
  3. ප්‍රිය ඇඩ්මින් වෙත,

    ඔබේ බ්ලොග් අඩවියත් විකසිත සින්ඩියට එක්කර ගන්න. (Blog Syndicator)
    Blogger සහ WordPress බ්ලොග් අඩවි සදහා එම අඩවියේ URL එක සහ බ්ලොග් එකෙහි නම ලබාදුන් සැනින් ස්වයංක්‍රියව සින්ඩිය හා ඇමුණුම සිදුවේ.
    බ්ලොග් නොවන නමුත් Feeds සක්‍රිය වෙබ් අඩවි වුවද සින්ඩිය හා ඇමිණිය හැකිය.
    විකසිත සින්ඩිය :- http://www.syndi.wikasitha.com/

    මිට හිතාදර
    ඇඩ්මින් - විකසිත සින්ඩිය. (info@vweb.lk)

    ReplyDelete
  4. මේ ගැන එහෙන් මෙහෙන් අහල තිබ්බට පිළිවෙලකට සිංහලෙන් විස්තරයක් කියෙව්වේ අද..

    ReplyDelete
    Replies
    1. ට්‍රයි එකක් දාල බලන්න.php වලට නම් driver එකක් තියෙනවා දැනටමත්

      Delete

අදහස්, උදහස්....

.