mysql දත්ත වේගයෙන් සහ ක්රමවත්ව හැසිරවීම – 1
අද මන් කතා කරන්න යන්නේ Mysql ඩේටාබේස් එකක performance වැඩි කරන්න විදිය ගැන.මන් මේ ලිපියෙන් Mysql කියන්නේ මොකක්ද කියා එක කියන්න යන්නේ නැ.මොකද Mysql ඩේටා බේස් එකක් කියන්නේ මොකක්ද කියලා දන්නේ නැතිනම් මේ ලිපියේ ඉදිරියට කියන දේවල් ටිකක් තේරෙන්නේ නැ.
මුලින්ම කියන්න ඔන දේ තමයි Database එකක ටේබල්ස් හදද්දි තමන්ට ඔන විදියට ඔන ඔන වෙලාවට ටේබල්ස් සහ ටේබල්ස් වලට ෆිල්ඩ්ස් දාන්න යන්න එපා.මුලින්ම තමන් කරන්න යන ප්රොජෙක්ට එකට අදාල ඩේටා හසුරවන විදිය පිලිබදව කලින් සැලසුම් කරලා ඉන්න ඔන.අවශය කරන ටේබල්ස් මොන්වද , ඒ එකිනෙක ටේබල්ස් වල තියෙන ෆිල්ඩ්ස් මොනවද එවාට බාවිතා කරන ඩෙටා ටයිප්ස්(Types) මොනවද කියලා කලින් කොලේක ලියලා සටහනක් හදාගෙන ඉන්න.එතකොට මේ වැඩේ පහසු වෙනවා විතරක් නෙමේ පස්සේ මුහුන පාන්න වෙන කරදර කොඩකින් ගැලවෙන්න පුලුවන්.මෙක Mysql වලට විතරක් නෙමේ Oracle , MSSQL වලට පවා පොදු දෙයක්.
ඩෙටාබේස් එක පැත්ත්න් ගත්තොත් , ටේබල් එකක අවශ්ය කරන ෆේල්ඩ්ස් Index පමනක් කරන්න.මේක ගොඩාක් ඩෙටාබේස් එකක වේගයට බලපානවා.Index එකකින් ඉක්මනට අදාල columns values හොයගන්න පුලුවන් වෙනවා.එහෙම නැත්තම් Mysql සර්වර් එකට පලවෙනි row එකේ ඉදලා අපිට හොයන්න අවශ්ය දේ හොයන්න වෙනවා.මෙක ගොඩාක් වෙලා යන වැඩක් වෙනවා අපේ ටේබල් එකේ දත්ත ගොඩාක් තියෙනවා නම්.
මේ Index බාවිතා කරන විදිය ගැන සවිස්තර ලිපියක් ලියන්න මන් ඉදිරියේදි බලාපොරොත්තු වෙනවා.
ඇප්ලිකේශන් එකේ ඉදන් ඩේටාබේස් සර්වර් එකට යන ට්රැෆික් අඩු කරන්න.ඒ කියන්නේ පුලුවන් තරම් බාවිතා කරන query ප්රමානය උපක්රමශීලීව අඩු කරන්න.ඒ වගේ ඩේටාබේස් එකෙන් අවශ්ය කරන දත්ත පමනක් ඉල්ලන්න.
උදාහරනෙකට ටේබල් එකකින් අපිට Id සහ Name කියා ෆීල්ඩ් පමනක් අව්ශ්ය වෙන වෙලාවක් එනවා.අපි එතකොට “SELECT * FROM …..”කියලා query එක ගහලා ටේබ්ල් එකේ තියෙන ඔක්කොම ෆීල්ඩ් වලට අදාල තොරතුරු ගෙන්ව ගන්නවට වැඩිය ගොඩාක් හොදයි “SELECT id,name FROM ……”වගේ query එක ගහලා අවශ්ය කරන ටික විතරක් පෙරලා ගන එක.
ඔව් ම දන්නවා මෙක කරන්න ටිකක් අමරු වෙයි අපි පේජ් එකක් කොඩ් කරනකොට අපි කරන කොටස ගැන කලින් අදහසක් අරන් එක කොලෙකවත් ලියගෙන හිටියෙ නැත්තම්.
තව දෙයක් මතක තියාගන්න සාමන්යයෙන් SELECT , DELETE query වලට වඩා UPDATE,INSERT query වලට ගොඩාක් වෙලාව සහ සම්පත්(RAM,CPU) වැය වෙනවා.ඒ නිසා එකත් ඔලුවෙ තියාගෙන වැඩ කරන්න,
ඒ වගේම අවශ්ය කරන ඩේටා කොටස් කොටස් වශයෙන් ඩෙටාබේස් එකෙන් ඉල්ලන්න.ඒ කියන්නේ Paging කරන්න.උදාහරනෙකට ඔයා එක පිටුවක ඔයගේ ඇප්ලිකෙශන් එකේ ලියාපදින්චි උනු users ගෑන විස්තර පෙන්වනවා කියලා හිතන්න,එතකොට එක පිටුවකට යුසර්ස්ලා 10ක් හෝ විස්සක් වගේ සීමා කරලා පෙන්වන්න.එකට අවශ්ය කරන ඩෙටා විතරක් ඩේටාබේස් එකෙන් අරන් පිටුවෙන් පිටුවට පෙන්වන්න.එකෙන් Frontend එකේ User experience එක හොද වෙනවා වගේම Backend එකේ ඩෙටාබේස් එක මරවන්න ඔනත් නැ.
for,foreach,while වගේ loop ඇතුලේ query දානකොට ගොඩාක් සැලකිලිමත් වෙන්න .මොකද අපිට කොඩ් එකේ එක query එකක් විදියට පෙනුනට ඔක රන් වෙද්දි එක query එක repeat වෙවි වදිනවා කියලා මතක තියාගන්න.ඔයවගේ වැඩකින් සමහරවිට queryඑක එක සිය දහස් වතාවක් රන් වෙන්න ඉඩ තියෙනවා.එතකොට නම් ඉතින් සොරිම තමයි.ඔයවගේ වැඩ කරලා අමතක වීමෙන් Server department එකේ එවුන්ට හොද ආතල් දිලා තියෙන්වා ඔෆිස් එකේ.ඒවගේ දෙයක් production සරවර් එකකට වගේ උනා නම් මල කෙලියක් තමයි.එක නිසා එකේ තියෙන අවදානම කියන්න ඔන නැනේ,
අදට මේ ලිපියේ පලවෙනි කොටස මන් නවත්වනවා.මේ ගැන තව ගොඩාක් කරුනු ලියන්න පුලුවන්.එවා ගැන ඉදිරි ලිපි වලින් බලමු,සුබ දවසක්.

මුල් ලිපිය
අද මන් කතා කරන්න යන්නේ Mysql ඩේටාබේස් එකක performance වැඩි කරන්න විදිය ගැන.මන් මේ ලිපියෙන් Mysql කියන්නේ මොකක්ද කියා එක කියන්න යන්නේ නැ.මොකද Mysql ඩේටා බේස් එකක් කියන්නේ මොකක්ද කියලා දන්නේ නැතිනම් මේ ලිපියේ ඉදිරියට කියන දේවල් ටිකක් තේරෙන්නේ නැ.
මුලින්ම කියන්න ඔන දේ තමයි Database එකක ටේබල්ස් හදද්දි තමන්ට ඔන විදියට ඔන ඔන වෙලාවට ටේබල්ස් සහ ටේබල්ස් වලට ෆිල්ඩ්ස් දාන්න යන්න එපා.මුලින්ම තමන් කරන්න යන ප්රොජෙක්ට එකට අදාල ඩේටා හසුරවන විදිය පිලිබදව කලින් සැලසුම් කරලා ඉන්න ඔන.අවශය කරන ටේබල්ස් මොන්වද , ඒ එකිනෙක ටේබල්ස් වල තියෙන ෆිල්ඩ්ස් මොනවද එවාට බාවිතා කරන ඩෙටා ටයිප්ස්(Types) මොනවද කියලා කලින් කොලේක ලියලා සටහනක් හදාගෙන ඉන්න.එතකොට මේ වැඩේ පහසු වෙනවා විතරක් නෙමේ පස්සේ මුහුන පාන්න වෙන කරදර කොඩකින් ගැලවෙන්න පුලුවන්.මෙක Mysql වලට විතරක් නෙමේ Oracle , MSSQL වලට පවා පොදු දෙයක්.
ඩෙටාබේස් එක පැත්ත්න් ගත්තොත් , ටේබල් එකක අවශ්ය කරන ෆේල්ඩ්ස් Index පමනක් කරන්න.මේක ගොඩාක් ඩෙටාබේස් එකක වේගයට බලපානවා.Index එකකින් ඉක්මනට අදාල columns values හොයගන්න පුලුවන් වෙනවා.එහෙම නැත්තම් Mysql සර්වර් එකට පලවෙනි row එකේ ඉදලා අපිට හොයන්න අවශ්ය දේ හොයන්න වෙනවා.මෙක ගොඩාක් වෙලා යන වැඩක් වෙනවා අපේ ටේබල් එකේ දත්ත ගොඩාක් තියෙනවා නම්.
මේ Index බාවිතා කරන විදිය ගැන සවිස්තර ලිපියක් ලියන්න මන් ඉදිරියේදි බලාපොරොත්තු වෙනවා.
ඇප්ලිකේශන් එකේ ඉදන් ඩේටාබේස් සර්වර් එකට යන ට්රැෆික් අඩු කරන්න.ඒ කියන්නේ පුලුවන් තරම් බාවිතා කරන query ප්රමානය උපක්රමශීලීව අඩු කරන්න.ඒ වගේ ඩේටාබේස් එකෙන් අවශ්ය කරන දත්ත පමනක් ඉල්ලන්න.
උදාහරනෙකට ටේබල් එකකින් අපිට Id සහ Name කියා ෆීල්ඩ් පමනක් අව්ශ්ය වෙන වෙලාවක් එනවා.අපි එතකොට “SELECT * FROM …..”කියලා query එක ගහලා ටේබ්ල් එකේ තියෙන ඔක්කොම ෆීල්ඩ් වලට අදාල තොරතුරු ගෙන්ව ගන්නවට වැඩිය ගොඩාක් හොදයි “SELECT id,name FROM ……”වගේ query එක ගහලා අවශ්ය කරන ටික විතරක් පෙරලා ගන එක.
ඔව් ම දන්නවා මෙක කරන්න ටිකක් අමරු වෙයි අපි පේජ් එකක් කොඩ් කරනකොට අපි කරන කොටස ගැන කලින් අදහසක් අරන් එක කොලෙකවත් ලියගෙන හිටියෙ නැත්තම්.
තව දෙයක් මතක තියාගන්න සාමන්යයෙන් SELECT , DELETE query වලට වඩා UPDATE,INSERT query වලට ගොඩාක් වෙලාව සහ සම්පත්(RAM,CPU) වැය වෙනවා.ඒ නිසා එකත් ඔලුවෙ තියාගෙන වැඩ කරන්න,
ඒ වගේම අවශ්ය කරන ඩේටා කොටස් කොටස් වශයෙන් ඩෙටාබේස් එකෙන් ඉල්ලන්න.ඒ කියන්නේ Paging කරන්න.උදාහරනෙකට ඔයා එක පිටුවක ඔයගේ ඇප්ලිකෙශන් එකේ ලියාපදින්චි උනු users ගෑන විස්තර පෙන්වනවා කියලා හිතන්න,එතකොට එක පිටුවකට යුසර්ස්ලා 10ක් හෝ විස්සක් වගේ සීමා කරලා පෙන්වන්න.එකට අවශ්ය කරන ඩෙටා විතරක් ඩේටාබේස් එකෙන් අරන් පිටුවෙන් පිටුවට පෙන්වන්න.එකෙන් Frontend එකේ User experience එක හොද වෙනවා වගේම Backend එකේ ඩෙටාබේස් එක මරවන්න ඔනත් නැ.
for,foreach,while වගේ loop ඇතුලේ query දානකොට ගොඩාක් සැලකිලිමත් වෙන්න .මොකද අපිට කොඩ් එකේ එක query එකක් විදියට පෙනුනට ඔක රන් වෙද්දි එක query එක repeat වෙවි වදිනවා කියලා මතක තියාගන්න.ඔයවගේ වැඩකින් සමහරවිට queryඑක එක සිය දහස් වතාවක් රන් වෙන්න ඉඩ තියෙනවා.එතකොට නම් ඉතින් සොරිම තමයි.ඔයවගේ වැඩ කරලා අමතක වීමෙන් Server department එකේ එවුන්ට හොද ආතල් දිලා තියෙන්වා ඔෆිස් එකේ.ඒවගේ දෙයක් production සරවර් එකකට වගේ උනා නම් මල කෙලියක් තමයි.එක නිසා එකේ තියෙන අවදානම කියන්න ඔන නැනේ,
අදට මේ ලිපියේ පලවෙනි කොටස මන් නවත්වනවා.මේ ගැන තව ගොඩාක් කරුනු ලියන්න පුලුවන්.එවා ගැන ඉදිරි ලිපි වලින් බලමු,සුබ දවසක්.


මුල් ලිපිය



