වෙළඳපලේ ලැබෙන මහජන ලේඛන රෙජිස්ට්රියක 4 මිලියනකට වැඩි අයිතමයන් එක දිනයක තුළ සම්පූර්ණයෙන් සොයා ගැනීමට කාල සීමාවක් තිබුණා. පළමුව අනුමාන කළ පරිදි, සකස් කළ අක්ෂර මාලාව අනුව කොටස් වෙන් කර එක් එක් කාර්යය මණ්ඩලයක් එක් කොටසක් සොයා ගැනීමට පත් කළා.
කෙසේ වෙතත්, යතුරු (keys) සමානව බෙදා නොහැකි වීම නිසා එක කොටස සියලුම ඝන ප්රිෆික්ස් ග්රහණය කර, අනෙක් කොටස් කිහිපමිනිත්තු තුළ අවසන් වුණා. ප්රථම කට්ටලය 71% වැඩ භාර ගත්තාම, සම්පූර්ණ පද්ධතියේ වේගය අඩුම කොටසට සමාන වුණා – 56-කොටස් විස්තාරයක් තිබුනත් 3-කොටස් පමණ වේගයක් පමණයි.
මෙම ගැටළුව විසඳීමට, යතුරේ rank (අනුක්රමික ස්ථානය) ලබා දෙන API එකක් තිබුණා. එය භාවිතා කරමින්, සම්පූර්ණ ලැයිස්තුවේ P‑වන ස්ථානයේ යතුර කුමක්දැයි පරීක්ෂා කළා. එවිට, සමාන ගණනේ අයිතමයන් ඇති කොටස් සකස් කිරීම සම්භවය වුණා.
විශේෂයෙන්, GET /list?startkey="<key>"&limit=1 කියන ඇමතුමෙන් එම යතුරේ offset (rank) සහ total_rows ලබා ගත හැකි වීම, බයිනරි සර්ච් සඳහා අතින්ම සුදුසු “oracle” එකක් විය. එම නිසා, යතුරන් අතර මැදින් (midpoint) ගණනය කර, offset < targetOffset නම් lo = mid, එසේ නොමැතිනම් hi = mid යන ආකාරයෙන් 40 පමණ පරීක්ෂණයක් තුළ අවශ්ය සීමාව සොයාගන්නා ලදී.
ඉන්පසු, N‑1 සීමා ලකුණු (boundaries) ගණනය කර, ඒවා භාවිතා කරමින් crawler එකේ පරිමාණය සකසා, සෑම ශාර්ඩ් එකකම සම්පූර්ණ අයිතම ගණන සමානව බෙදා ගැනීමට හැකි වුණා. මෙය සතිපතා පැවැත්වූ crawl එකක් එක් දිනකට අඩු කිරීමට ප්රධාන හේතුව වුණා.
ශ්රී ලංකාවට ඇති වැදගත්කම
ශ්රී ලංකාවේ මෘදුකාංග සංවර්ධකයින් සහ තාක්ෂණ ශිෂ්යයන්ට මෙම ක්රමය අතිශය ප්රයෝජනවත්. ප්රධාන වශයෙන්:
- API එකක rank/offset දත්ත ලබා ගත හැකි නම්, බයිනරි සර්ච් මගින් දත්ත බෙදීම සරලව සිදු කළ හැක.
- ඉහළ ප්රමාණයේ දත්ත සමඟ වැඩ කරන සමාගම් සඳහා parallel processing කාර්යක්ෂමතාව වැඩිවීමෙන් වියදම් අඩු වේ.
- ශ්රී ලංකාවේ විශ්වවිද්යාල සහ පුහුණු වැඩසටහන්වලදී මෙම තත්ත්වය උදාහරණයක් ලෙස ගෙන, distributed systems පිළිබඳ නව පරීක්ෂණයන් කිරීමට හැකියාව ලැබේ.
එමෙන්ම, දත්ත ගබඩා කිරීමේ cloud සේවා භාවිතා කරන ව්යාපාරවලට, අඩු කේතයක් මගින් වැඩි throughput ලබා දීම, සේවා ගුණාත්මකභාවය සහ පාරිභෝගික තෘප්තිය වැඩි කරනවා.
අවසානයේ, මෙම සරල 10‑පේළි කේතය, සංකීර්ණ distributed system ගැටළුවක් ඉතා කාර්යක්ෂම ලෙස විසඳා, තාක්ෂණික ප්රජාවට නව මාර්ගයක් පෙන්වයි.