MongoDB සමඟ ආරම්භ කිරීමට පෙර මා දැන සිටිය යුතු කරුණු 14ක්

පාඨමාලා ආරම්භයට ආසන්න දිනක ලිපියේ පරිවර්තනය සකස් කරන ලදී "සම්බන්ධතා නොවන දත්ත සමුදායන්".

MongoDB සමඟ ආරම්භ කිරීමට පෙර මා දැන සිටිය යුතු කරුණු 14ක්

කැපී පෙනෙන අවස්ථා:

  • MongoDB හි වෛකල්පිත වුවද, යෝජනා ක්‍රමයක් සංවර්ධනය කිරීම අතිශයින් වැදගත් වේ.
  • එලෙසම, දර්ශක ඔබේ යෝජනා ක්‍රමයට සහ ප්‍රවේශ රටාවන්ට ගැළපිය යුතුය.
  • විශාල වස්තූන් සහ විශාල අරා භාවිතා කිරීමෙන් වළකින්න.
  • MongoDB සැකසුම් සමඟ ප්‍රවේශම් වන්න, විශේෂයෙන් ආරක්ෂාව සහ විශ්වසනීයත්වය සම්බන්ධයෙන්.
  • MongoDB සතුව විමසුම් ප්‍රශස්තකාරකයක් නොමැත, එබැවින් විමසුම් මෙහෙයුම් සිදු කිරීමේදී ඔබ ප්‍රවේශම් විය යුතුය.

මම දත්ත සමුදායන් සමඟ ඉතා දිගු කාලයක් වැඩ කර ඇත, නමුත් මෑතකදී MongoDB සොයා ගන්නා ලදී. මම එය සමඟ වැඩ කිරීමට පෙර මම දැන සිටිය යුතු කරුණු කිහිපයක් තිබේ. පුද්ගලයෙකුට දැනටමත් යම් ක්ෂේත්‍රයක අත්දැකීම් ඇති විට, දත්ත සමුදායන් යනු කුමක්ද සහ ඔවුන් කරන්නේ කුමක්ද යන්න පිළිබඳ පූර්ව නිගමනයන් ඇත. අන් අයට තේරුම් ගැනීමට පහසු කිරීමේ බලාපොරොත්තුවෙන්, මම පොදු වැරදි ලැයිස්තුවක් ඉදිරිපත් කරමි.

සත්‍යාපනයකින් තොරව MongoDB සේවාදායකයක් නිර්මාණය කිරීම

අවාසනාවන්ත ලෙස, MongoDB පෙරනිමියෙන් සත්‍යාපනයකින් තොරව ස්ථාපනය කර ඇත. දේශීයව ප්‍රවේශ වූ වැඩපොළක් සඳහා, මෙම පරිචය සාමාන්‍ය වේ. නමුත් MongoDB යනු විශාල මතක ප්‍රමාණයක් භාවිතා කිරීමට කැමති බහු-පරිශීලක පද්ධතියක් බැවින්, ඔබ එය සංවර්ධනය සඳහා පමණක් භාවිතා කළත්, හැකි තරම් RAM ප්‍රමාණයක් ඇති සේවාදායකයකට එය තැබුවහොත් වඩා හොඳය. පෙරනිමි වරාය හරහා සේවාදායකයේ ස්ථාපනය කිරීම ගැටළුකාරී විය හැකිය, විශේෂයෙන් ඉල්ලීමෙහි ඕනෑම ජාවාස්ක්‍රිප්ට් කේතයක් ක්‍රියාත්මක කළ හැකි නම් (උදාහරණයක් ලෙස, $where සඳහා අදහසක් ලෙස එන්නත්).

සත්‍යාපන ක්‍රම කිහිපයක් ඇත, නමුත් පහසුම වන්නේ පරිශීලක හැඳුනුම්පතක්/මුරපදයක් සැකසීමයි. මත පදනම් වූ විසිතුරු සත්‍යාපනය ගැන ඔබ සිතන අතරතුර මෙම අදහස භාවිතා කරන්න LDAP. ආරක්ෂාව සම්බන්ධයෙන් ගත් කල, MongoDB නිරන්තරයෙන් යාවත්කාලීන කළ යුතු අතර, අනවසර ප්‍රවේශය සඳහා ලොග් සෑම විටම පරීක්ෂා කළ යුතුය. උදාහරණයක් ලෙස, මම පෙරනිමි වරාය ලෙස වෙනත් වරායක් තෝරා ගැනීමට කැමතියි.

ඔබේ ප්‍රහාරක පෘෂ්ඨය MongoDB වෙත බැඳීමට අමතක නොකරන්න

MongoDB ආරක්ෂක පිරික්සුම් ලැයිස්තුව ජාල ආක්‍රමණය සහ දත්ත කාන්දු වීමේ අවදානම අවම කිරීම සඳහා හොඳ උපදෙස් අඩංගු වේ. එය ඉවත් කිරීම පහසු වන අතර සංවර්ධන සේවාදායකයකට ඉහළ මට්ටමේ ආරක්ෂාවක් අවශ්‍ය නොවන බව පැවසීම පහසුය. කෙසේ වෙතත්, එය එතරම් සරල නොවන අතර මෙය සියලුම MongoDB සේවාදායකයන්ට අදාළ වේ. විශේෂයෙන්ම, භාවිතා කිරීමට බලගතු හේතුවක් නොමැති නම් mapReduce, group හෝ $කොහේ, ඔබට වින්‍යාස ගොනුවේ ලිවීමෙන් ජාවාස්ක්‍රිප්ට් හි අත්තනෝමතික කේත භාවිතය අක්‍රිය කිරීමට අවශ්‍ය වේ. javascriptEnabled:false. දත්ත ගොනු සම්මත MongoDB තුළ සංකේතනය කර නොමැති බැවින්, MongoDB සමඟ ධාවනය කිරීම අර්ථවත් කරයි කැපවූ පරිශීලක, ගොනු වෙත පූර්ණ ප්‍රවේශය ඇති, එයට පමණක් සීමිත ප්‍රවේශයක් සහ මෙහෙයුම් පද්ධතියේම ගොනු ප්‍රවේශ පාලන භාවිතා කිරීමේ හැකියාව ඇත.

පරිපථය සංවර්ධනය කිරීමේදී දෝෂයකි

MongoDB යෝජනා ක්‍රමයක් භාවිතා නොකරයි. නමුත් මෙම යෝජනා ක්රමය අවශ්ය නොවන බව මින් අදහස් නොවේ. ඔබට කිසිදු ස්ථාවර රටාවකින් තොරව ලේඛන ගබඩා කිරීමට අවශ්‍ය නම්, ඒවා ගබඩා කිරීම ඉක්මන් සහ පහසු විය හැකි නමුත් පසුව ඒවා ලබා ගැනීම අපහසු විය හැක. අපොයි අමාරුයි.

සම්භාව්‍ය ලිපිය"MongoDB යෝජනා ක්‍රම නිර්මාණය සඳහා 6 නීති රීති" එය කියවීම වටී, සහ වැනි විශේෂාංග Schema Explorer තෙවන පාර්ශවීය මෙවලමක් වන Studio 3T තුළ, එය නිතිපතා පරිපථ පරීක්ෂා කිරීම සඳහා භාවිතා කිරීම වටී.

වර්ග කිරීමේ අනුපිළිවෙල අමතක කරන්න එපා

අනුපිළිවෙල අමතක කිරීම වෙනත් වැරදි වින්‍යාසයකට වඩා වැඩි කලකිරීමක් හා වැඩි කාලයක් නාස්ති කිරීමට හේතු විය හැක. පෙරනිමියෙන් MongoBD භාවිතා කරයි ද්විමය වර්ගය. නමුත් එය කිසිවෙකුට ප්රයෝජනවත් වනු ඇතැයි සිතිය නොහැක. පසුගිය ශතවර්ෂයේ 80 ගණන්වලදී පබළු, කැෆ්ටන් සහ රැලි සහිත උඩු රැවුල සමඟ කේස්-සංවේදී, උච්චාරණ-සංවේදී, ද්විමය වර්ග කුතුහලය දනවන ඇනක්‍රොනිසම් ලෙස සලකනු ලැබීය. දැන් ඔවුන්ගේ භාවිතය සමාව දිය නොහැකි ය. සැබෑ ජීවිතයේදී "යතුරුපැදිය" යනු "යතුරුපැදිය" හා සමානයි. තවද "බ්‍රිතාන්‍යය" සහ "බ්‍රිතාන්‍යය" එකම ස්ථානයයි. කුඩා අකුරක් යනු හුදෙක් ලොකු අකුරකට සමාන විශාල අකුරකි. ඒවගේම මට diacritics වර්ග කරන්න පටන් ගන්න එපා. MongoDB හි දත්ත සමුදායක් සාදන විට, උච්චාරණ-අසංවේදී collation සහ භාවිතා කරන්න ලියාපදිංචි කරන්න, භාෂාවට අනුරූප වන සහ පද්ධති පරිශීලක සංස්කෘතිය. මෙය string දත්ත හරහා සෙවීම වඩාත් පහසු කරයි.

විශාල ලේඛන සමඟ එකතු කිරීම් සාදන්න

MongoDB 16MB දක්වා විශාල ලේඛන එකතු කිරීම් තුළ සත්කාරකත්වය ලබා දීමට සතුටු වේ GridFS 16 MB ට වඩා විශාල ලේඛන සඳහා නිර්මාණය කර ඇත. නමුත් විශාල ලියකියවිලි එහි තැබිය හැකි නිසා, ඒවා එහි ගබඩා කිරීම හොඳ අදහසක් නොවේ. ඔබ කිලෝබයිට් කිහිපයක් ප්‍රමාණයෙන් යුත් තනි ලේඛන ගබඩා කරන්නේ නම්, ඒවා පුළුල් SQL වගුවක පේළි මෙන් සලකන්නේ නම් MongoDB වඩාත් හොඳින් ක්‍රියා කරයි. විශාල ලියකියවිලි ගැටළු වලට මූලාශ්රයක් වනු ඇත ඵලදායිතාව.

විශාල අරා සහිත ලේඛන නිර්මාණය කිරීම

ලේඛනවල අරාවන් අඩංගු විය හැක. අරාවේ ඇති මූලද්‍රව්‍ය සංඛ්‍යාව ඉලක්කම් හතරක සංඛ්‍යාවකට වඩා දුරින් නම් එය වඩාත් සුදුසුය. අරාවකට මූලද්‍රව්‍ය නිතර එක් කරන්නේ නම්, එය එය අඩංගු ලේඛනය අභිබවා යනු ඇත චලනය, එනම් එය අවශ්ය වනු ඇත දර්ශක ද යාවත්කාලීන කරන්න. විශාල අරාවක් සහිත ලේඛනයක් නැවත සුචිගත කිරීමේදී, දර්ශක බොහෝ විට නැවත ලියනු ලැබේ, මන්ද වාර්තාව, එහි දර්ශකය ගබඩා කරන. ලේඛනයක් ඇතුළු කළ විට හෝ මකා දැමූ විට ද මෙම නැවත සුචිගත කිරීම සිදු වේ.

MongoDB කියලා දෙයක් තියෙනවා "පිරවුම් සාධකය", මෙම ගැටලුව අවම කිරීම සඳහා ලේඛන වර්ධනය වීමට ඉඩ සලසා දෙයි.
අරාව සුචිගත කිරීමකින් තොරව ඔබට කළ හැකි යැයි ඔබ සිතනු ඇත. අවාසනාවකට, දර්ශක නොමැතිකම නිසා ඔබට වෙනත් ගැටළු ඇති විය හැක. ලේඛන ආරම්භයේ සිට අවසානය දක්වා පරිලෝකනය කර ඇති බැවින්, අරාව අවසානයේ ඇති මූලද්‍රව්‍ය සෙවීමට වැඩි කාලයක් ගතවනු ඇති අතර, එවැනි ලේඛනයක් හා සම්බන්ධ බොහෝ මෙහෙයුම් මන්දගාමී.

එකතු කිරීමක අදියරවල අනුපිළිවෙල වැදගත් බව අමතක නොකරන්න

විමසුම් ප්‍රශස්තකරණයක් සහිත දත්ත සමුදා පද්ධතියක, ඔබ ලියන විමසුම් ඔබට ලබා ගැනීමට අවශ්‍ය දේ පිළිබඳ පැහැදිලි කිරීම් මිස එය ලබා ගන්නේ කෙසේද යන්න නොවේ. මෙම යාන්ත්‍රණය ක්‍රියාත්මක වන්නේ අවන්හලක ඇණවුම් කිරීම හා සැසඳීමෙනි: සාමාන්‍යයෙන් ඔබ කෑමක් ඇණවුම් කරන අතර කුක් වෙත සවිස්තරාත්මක උපදෙස් ලබා නොදෙන්න.

MongoDB හි, ඔබ කුක්ට උපදෙස් දෙයි. උදාහරණයක් ලෙස, දත්ත හරහා ගමන් කරන බවට ඔබ සහතික විය යුතුය reduce භාවිතා කරන නල මාර්ගයේ හැකි ඉක්මනින් $match и $project, සහ වර්ග කිරීම සිදු වන්නේ පසුව පමණි reduce, සහ සෙවීම ඔබට අවශ්‍ය අනුපිළිවෙලට සිදු වන බව. අනවශ්‍ය වැඩ ඉවත් කරන, ප්‍රශස්ත ලෙස පියවර අනුක්‍රමණය කරන සහ සම්බන්ධ වීමේ වර්ග තෝරා ගන්නා විමසුම් ප්‍රශස්තකාරකයක් තිබීම ඔබව නරක් කළ හැකිය. MongoDB සමඟින්, ඔබට පහසුව සඳහා වැඩි පාලනයක් ඇත.

වැනි මෙවලම් ස්ටුඩියෝ 3T තුල එකතු කිරීමේ විමසුම් ගොඩනැගීම සරල කරනු ඇත MongoDB. එක්රැස් කිරීමේ සංස්කාරක විශේෂාංගය මඟින් ඔබට නල මාර්ග ප්‍රකාශයන් එක් අදියරකට යෙදීමට ඉඩ සලසයි, නිදොස්කරණය සරල කිරීම සඳහා එක් එක් අදියරේදී ආදාන සහ ප්‍රතිදාන දත්ත පරීක්ෂා කරන්න.

ඉක්මන් පටිගත කිරීම භාවිතා කිරීම

කිසිවිටෙකත් වැඩි වේගයක් ඇති නමුත් අඩු විශ්වසනීයත්වයක් ඇති කිරීමට MongoDB ලිවීමේ විකල්ප සකස් නොකරන්න. මෙම මාදිලිය "ගොනුව-සහ-අමතක කරන්න" ලිවීම සිදු වීමට පෙර විධානය ආපසු ලැබෙන නිසා වේගවත් බව පෙනේ. දත්ත තැටියට ලිවීමට පෙර පද්ධතිය බිඳ වැටුණහොත්, එය නැති වී අවසානයේ නොගැලපෙන තත්වයකට පත්වේ. වාසනාවකට මෙන්, 64-bit MongoDB ලොග් වීම සක්‍රීය කර ඇත.

MMAPv1 සහ WiredTiger ආචයන යන්ත්‍ර මෙය වලක්වා ගැනීම සඳහා ලොග් වීම භාවිතා කරයි, නමුත් WiredTiger හට අවසන් ස්ථාවරය දක්වා ප්‍රකෘතිමත් විය හැක. පාලන ලක්ෂ්යය, ලොග් වීම අබල කර ඇත්නම්.

ප්‍රකෘතිමත් වීමෙන් පසු දත්ත සමුදාය ස්ථාවර තත්ත්වයක පවතින බව ජර්නල් කිරීම සහතික කරන අතර එය ලොගයට ලියන තෙක් සියලු දත්ත රඳවා තබා ගනී. පටිගත කිරීමේ වාර ගණන පරාමිතිය භාවිතයෙන් වින්‍යාස කර ඇත commitIntervalMs.

ඇතුළත් කිරීම් පිළිබඳ සහතික වීමට, වින්‍යාස ගොනුවේ ලොග් වීම සක්‍රීය කර ඇති බවට වග බලා ගන්න (storage.journal.enabled), සහ පටිගත කිරීම් වාර ගණන ඔබට අහිමි විය හැකි තොරතුරු ප්රමාණයට අනුරූප වේ.

දර්ශකයකින් තොරව වර්ග කිරීම

සෙවීමේදී සහ එකතු කිරීමේදී බොහෝ විට දත්ත වර්ග කිරීමට අවශ්‍ය වේ. අනුපිළිවෙළට සකසන දත්ත ප්‍රමාණය අඩු කිරීම සඳහා ප්‍රතිඵලය පෙරීමෙන් පසු මෙය අවසන් අදියරෙන් එකක් සිදුවේ යැයි අපි බලාපොරොත්තු වෙමු. මෙම අවස්ථාවේදී පවා, වර්ග කිරීම සඳහා ඔබට අවශ්ය වනු ඇත දර්ශකය. ඔබට තනි හෝ සංයුක්ත දර්ශකයක් භාවිතා කළ හැකිය.

සුදුසු දර්ශකයක් නොමැති නම්, MongoDB එය නොමැතිව කරනු ඇත. සියලුම ලේඛනවල මුළු ප්‍රමාණය මත 32 MB මතක සීමාවක් ඇත වර්ග කිරීමේ මෙහෙයුම්, සහ MongoDB මෙම සීමාවට ළඟා වුවහොත්, එය එක්කෝ දෝෂයක් ඇති කරයි හෝ ආපසු පැමිණේ හිස් වාර්තා කට්ටලය.

දර්ශක සහාය නොමැතිව සොයන්න

සෙවුම් විමසුම් SQL හි JOIN මෙහෙයුමට සමාන කාර්යයක් ඉටු කරයි. වඩාත් හොඳින් ක්‍රියා කිරීමට, ඔවුන්ට විදේශීය යතුර ලෙස භාවිතා කරන යතුරේ අගය පිළිබඳ දර්ශකය අවශ්‍ය වේ. භාවිතය පිළිබිඹු නොවන නිසා මෙය පැහැදිලි නැත explain(). එවැනි දර්ශක ලියා ඇති දර්ශකයට අමතරව වේ explain(), එය නල මාර්ග ක්‍රියාකරුවන් විසින් භාවිතා කරනු ලැබේ $match и $sort, නල මාර්ගයේ ආරම්භයේ දී ඔවුන් හමු වූ විට. දර්ශක දැන් ඕනෑම අදියරක් ආවරණය කළ හැක එකතු කිරීමේ නල මාර්ගය.

බහු-යාවත්කාලීන භාවිතයෙන් ඉවත් වීම

ක්රමය db.collection.update() ඔබ සඳහන් කරන පරාමිතිය මත පදනම්ව, පවතින ලේඛනයක කොටසක් හෝ සම්පූර්ණ ලේඛනය සම්පූර්ණ ප්‍රතිස්ථාපනයක් දක්වා වෙනස් කිරීමට භාවිතා කරයි update. එතරම් පැහැදිලි නැති දෙය නම්, ඔබ විකල්පය සකසන්නේ නම් මිස එය එකතුවේ ඇති සියලුම ලේඛන ක්‍රියා නොකරනු ඇත multi ඉල්ලීම් නිර්ණායක සපුරාලන සියලුම ලේඛන යාවත්කාලීන කිරීමට.

හැෂ් වගුවක ඇති යතුරු අනුපිළිවෙලෙහි වැදගත්කම අමතක නොකරන්න

JSON හි, වස්තුවක් සමන්විත වන්නේ අනුපිළිවෙලකින් තොරව ශුන්‍ය ප්‍රමාණයේ හෝ ඊට වැඩි නම/අගය යුගලයක එකතුවකින් වන අතර, එහිදී නම තන්තුවක් වන අතර අගය යනු තන්තුවක්, අංකයක්, බූලියන්, ශුන්‍ය, වස්තුවක් හෝ අරාවකි.

අවාසනාවකට මෙන්, BSON සෙවීමේදී ඇණවුම කෙරෙහි වැඩි අවධානයක් යොමු කරයි. MongoDB හි, ගොඩනඟන ලද වස්තූන් තුළ යතුරු අනුපිළිවෙල කරුණු, i.e. { firstname: "Phil", surname: "factor" } - මෙය සමාන නොවේ { { surname: "factor", firstname: "Phil" }. එනම්, ඔබට ඒවා සොයා ගැනීමට සහතික වීමට අවශ්‍ය නම්, ඔබේ ලේඛනවල නම්/අගය යුගල අනුපිළිවෙල ගබඩා කළ යුතුය.

අවුල් වෙන්න එපා "ශුන්‍ය" и "නිර්වචනය නොකළ"

අගය "නිර්වචනය නොකළ" අනුව JSON හි කිසිදා වලංගු නොවීය නිල සම්මතය JSON (ECMA-404 වගන්තිය 5), එය JavaScript හි භාවිතා වුවද. එපමනක් නොව, BSON සඳහා එය යල්පැන ඇති අතර එය බවට පරිවර්තනය වේ $null, සෑම විටම හොඳ විසඳුමක් නොවේ. භාවිතා කිරීමෙන් වළකින්න "නිර්වචනය නොකළ" MongoDB හි.

භාවිතා කරන්න $limit() තොරව $sort()

බොහෝ විට ඔබ MongoDB හි වර්ධනය වන විට, විමසුමකින් හෝ එකතු කිරීමකින් ආපසු ලැබෙන ප්‍රතිඵලයේ නියැදියක් බැලීම ප්‍රයෝජනවත් වේ. මෙම කාර්යය සඳහා ඔබට අවශ්ය වනු ඇත $limit(), නමුත් ඔබ එය පෙර භාවිතා නොකරන්නේ නම් එය කිසි විටෙක අවසාන කේතයේ නොතිබිය යුතුය $sort. මෙම යාන්ත්‍රිකයා අවශ්‍ය වන්නේ එසේ නොමැති නම් ඔබට ප්‍රති result ලය අනුපිළිවෙල සහතික කළ නොහැකි නිසා සහ ඔබට දත්ත විශ්වාසදායක ලෙස බැලීමට නොහැකි බැවිනි. ප්‍රතිඵලයේ ඉහළින්ම ඔබට වර්ග කිරීම අනුව විවිධ ඇතුළත් කිරීම් ලැබෙනු ඇත. විශ්වාසදායක ලෙස ක්‍රියා කිරීමට, විමසුම් සහ එකතු කිරීම් තීරණාත්මක විය යුතුය, එනම් ඒවා ක්‍රියාත්මක කරන සෑම අවස්ථාවකම එකම ප්‍රතිඵල නිපදවිය යුතුය. අඩංගු කේතය $limit(), නමුත් නැත $sort, තීරනාත්මක නොවන අතර පසුව සොයා ගැනීමට අපහසු වන දෝෂ ඇති විය හැක.

නිගමනය

MongoDB සමඟ කලකිරීමට පත් විය හැකි එකම ක්‍රමය වන්නේ එය DBMS වැනි වෙනත් දත්ත සමුදායක් සමඟ කෙලින්ම සංසන්දනය කිරීම හෝ යම් යම් අපේක්ෂාවන් මත පදනම්ව එය භාවිතා කිරීමට පැමිණීමයි. ඒක හරියට තැඹිලි ගෙඩියක් ගෑරුප්පුවකට සමාන කරනවා වගේ වැඩක්. දත්ත සමුදා පද්ධති නිශ්චිත අරමුණු ඉටු කරයි. මෙම වෙනස්කම් ඔබම සරලව තේරුම් ගෙන අගය කිරීම වඩාත් සුදුසුය. MongoDB සංවර්ධකයින්ට DBMS මාර්ගයට බල කළ මාර්ගයක් මත පීඩනය යෙදීම ලැජ්ජාවකි. දත්ත අඛණ්ඩතාව සහතික කිරීම සහ අසාර්ථකත්වයට සහ ද්වේෂසහගත ප්‍රහාරවලට ඔරොත්තු දෙන දත්ත පද්ධති නිර්මාණය කිරීම වැනි පැරණි ගැටලු විසඳීමට නව සහ රසවත් ක්‍රම දැකීමට මට අවශ්‍යය.

MongoDB හි 4.0 අනුවාදයේ ACID ගනුදෙනුව හඳුන්වාදීම නව්‍ය ආකාරයෙන් වැදගත් වැඩිදියුණු කිරීම් හඳුන්වා දීම සඳහා හොඳ උදාහරණයකි. බහු-ලේඛන සහ බහු-ප්‍රකාශ ගනුදෙනු දැන් පරමාණුක වේ. අගුලු ලබා ගැනීමට සහ සිරවී ඇති ගනුදෙනු අවසන් කිරීමට අවශ්‍ය කාලය සකස් කිරීමට මෙන්ම හුදකලා මට්ටම වෙනස් කිරීමට ද හැකිය.

MongoDB සමඟ ආරම්භ කිරීමට පෙර මා දැන සිටිය යුතු කරුණු 14ක්

තවත් කියවන්න:

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න