NoSQL අවශ්ය වූයේ ඇයි?
පෙර මොඩියුලයේදී, අපි ව්යුහගත දත්ත (structured data) ගබඩා කිරීම සඳහා ඉතා ප්රබල සහ විශ්වාසනීය ක්රමයක් වන SQL දත්ත සමුදා පිළිබඳව ඉගෙන ගත්තෙමු. බැංකු ගනුදෙනු, පරිශීලක ලියාපදිංචි කිරීම් වැනි දත්ත සඳහා ඒවා අදටත් හොඳම විසඳුමයි. නමුත්, අන්තර්ජාලයේ වර්ධනයත් සමග, සම්ප්රදායික SQL දත්ත සමුදා වලට කළමනාකරණය කිරීමට අපහසු, නව ආකාරයේ දත්ත සහ අභියෝග බිහි විය.
- විශාල දත්ත (Big Data): Facebook, Google වැනි සමාගම් දිනකට ජනනය කරන ටෙරාබයිට් ගණනක දත්ත.
- නම්යශීලී දත්ත (Flexible Data): සෑම පරිශීලකයෙකුටම වෙනස් තොරතුරු තිබිය හැකි user profiles, JSON APIs වලින් ලැබෙන දත්ත වැනි ව්යුහගත නොවූ (unstructured) දත්ත.
- ඉහළ පරිමාණය (High Scalability): මිල අධික තනි server එකක් (Vertical Scaling) මත යැපෙනවා වෙනුවට, මිල අඩු servers විශාල ගණනක් අතර දත්ත බෙදා හැරීමේ අවශ්යතාව (Horizontal Scaling).
මෙම අභියෝග ජය ගැනීම සඳහා නිර්මාණය වූ දත්ත සමුදා වර්ගීකරණය NoSQL (Not Only SQL) ලෙස හැඳින්වේ. මේවා නිශ්චිත කාර්යයන් සඳහා ඉහළ වේගයක් සහ නම්යශීලී බවක් ලබා දේ.
NoSQL දත්ත සමුදා වර්ග
NoSQL යනු තනි තාක්ෂණයක් නොව, විවිධ වර්ගයේ දත්ත සමුදා එකතුවකි. අපි ප්රධාන වර්ග කිහිපයක් බලමු.
1. Document Databases උදා: MongoDB
මෙහිදී දත්ත, JSON (JavaScript Object Notation) වැනි document ආකෘතියෙන් ගබඩා කෙරේ. සෑම document එකක්ම ස්වයං අන්තර්ගත වන අතර, ඒවායේ ව්යුහය එකිනෙකට වෙනස් විය හැක. මෙය නම්යශීලී දත්ත ආකෘති සඳහා ඉතා සුදුසුය.
භාවිතා කරන අවස්ථා: Content management systems, e-commerce නිෂ්පාදන නාමාවලි, පරිශීලක පැතිකඩ (user profiles).2. Key-Value Stores උදා: Redis
මෙය සරලම NoSQL වර්ගයයි. සෑම දත්තයක්ම අද්විතීය "යතුරක්" (key) සහ ඊට අදාළ "අගයක්" (value) ලෙස ගබඩා කෙරේ. මෙය ශබ්දකෝෂයක් වැනිය; යතුර (වචනය) ලබා දුන් විට, අගය (තේරුම) ඉතා වේගයෙන් ලබා ගත හැක.
භාවිතා කරන අවස්ථා: Caching (නිතර භාවිතා කරන දත්ත තාවකාලිකව ගබඩා කිරීම), User session management, Real-time leaderboards.3. Column-Family Stores උදා: Apache Cassandra
සම්ප්රදායික දත්ත සමුදා මෙන් පේළි (rows) වශයෙන් දත්ත ගබඩා කරනවා වෙනුවට, මෙහිදී තීරු (columns) වශයෙන් දත්ත ගබඩා කරයි. විශාල දත්ත ප්රමාණයක් මත විශ්ලේෂණාත්මක විමසුම් (analytical queries) සිදු කිරීමේදී මෙය අතිශය කාර්යක්ෂම වේ.
භාවිතා කරන අවස්ථා: Big Data analytics, Log data analysis, Time-series data (උදා: කාලගුණ දත්ත).4. Graph Databases උදා: Neo4j
දත්ත අතර ඇති සංකීර්ණ සම්බන්ධතා (relationships) ගබඩා කිරීම සහ විමසීම සඳහාම විශේෂයෙන් නිර්මාණය කර ඇත. මෙහිදී දත්ත "nodes" (entities) ලෙසත්, ඒවා අතර ඇති සම්බන්ධතා "edges" ලෙසත් නිරූපණය කෙරේ.
භාවිතා කරන අවස්ථා: සමාජ ජාල (Social networks - "friend of a friend" සෙවීම), Recommendation engines (Amazon හි "Customers who bought this also bought..."), වංචා හඳුනාගැනීම (fraud detection).SQL ද? NoSQL ද? - නිවැරදි තේරීම
"වඩා හොඳ කුමක්ද?" යන ප්රශ්නයට පිළිතුර "එය ඔබ විසඳන ගැටළුව මත රඳා පවතී" යන්නයි. මේවා එකිනෙකට තරඟකරුවන් නොව, විවිධ කාර්යයන් සඳහා ඇති විවිධ මෙවලම් වේ.
- ඔබගේ දත්ත ඉතා ව්යුහගත නම්, දත්තවල නිරවද්යතාවය (consistency) ඉතා වැදගත් නම්, SQL හොඳම තේරීමයි.
- ඔබගේ දත්ත ව්යුහගත නොවූ හෝ නිතර වෙනස් වන සුළු නම්, ඔබට අධික වේගයක් සහ විශාල පරිමාණයකට පහසුවෙන් යාමට අවශ්ය නම්, NoSQL වර්ගයක් වඩාත් සුදුසු විය හැක.
බොහෝ නවීන මහා පරිමාණ යෙදුම්, මෙම ප්රවේශයන් දෙකම එකට භාවිතා කරයි (Polyglot Persistence). උදාහරණයක් ලෙස, මූලික පරිශීලක දත්ත සඳහා SQL ද, caching සඳහා Key-Value store එකක් ද භාවිතා කළ හැක.
දැන් අපි පරිගණක මතකයේ සහ ස්ථිර ආචයනයේ (persistent storage) දත්ත කළමනාකරණය කරන විවිධ ක්රම පිළිබඳව පුළුල් අවබෝධයක් ලබාගෙන ඇත. අපගේ ඊළඟ පියවර වන්නේ, පරිශීලකයා මෙම දත්ත දකින සහ අන්තර්ක්රියා කරන කොටස, එනම් වෙබ් අඩවියේ ඉදිරිපස (Frontend) නිර්මාණය කරන ආකාරය ඉගෙන ගැනීමයි. ඒ සඳහා, අපි ඊළඟ මොඩියුලයෙන් "වෙබ් සංවර්ධනයේ මූලික කරුණු (HTML, CSS, JavaScript)" සමගින් අපගේ ගමන ඉදිරියට ගෙන යමු.