VKontakte පණිවිඩ දත්ත සමුදාය මුල සිට නැවත ලියන්න සහ බේරෙන්න

අපගේ පරිශීලකයින් තෙහෙට්ටුව නොදැන එකිනෙකාට පණිවිඩ ලියයි.
VKontakte පණිවිඩ දත්ත සමුදාය මුල සිට නැවත ලියන්න සහ බේරෙන්න
ඒක සෑහෙන ගානක්. ඔබ සියලුම පරිශීලකයින්ගේ සියලුම පණිවිඩ කියවීමට සූදානම් වන්නේ නම්, එය වසර 150 දහසකට වඩා වැඩි කාලයක් ගතවනු ඇත. ඔබ තරමක් දියුණු පාඨකයෙකු වන අතර සෑම පණිවිඩයක් සඳහාම තත්පරයකට වඩා වැය නොකළ යුතුය.

එවැනි දත්ත පරිමාවක් සමඟ, එය ගබඩා කිරීම සහ ප්‍රවේශ වීම සඳහා තර්කනය ප්‍රශස්ත ලෙස ගොඩනගා තිබීම ඉතා වැදගත් වේ. එසේ නොවුවහොත්, එතරම් පුදුම සහගත නොවන එක් මොහොතක, සියල්ල ඉක්මනින් වැරදී යන බව පැහැදිලි විය හැකිය.

අපට නම් මේ මොහොත පැමිණියේ මීට වසර එකහමාරකට පෙරය. අපි මෙයට පැමිණියේ කෙසේද සහ අවසානයේ සිදු වූ දේ - අපි ඔබට පිළිවෙලට කියමු.

ගැටලුවේ ඉතිහාසය

පළමු ක්‍රියාත්මක කිරීමේදී, VKontakte පණිවිඩ PHP පසුපෙළ සහ MySQL වල එකතුවක් මත ක්‍රියා කළේය. මෙය කුඩා ශිෂ්‍ය වෙබ් අඩවියක් සඳහා සම්පූර්ණයෙන්ම සාමාන්‍ය විසඳුමකි. කෙසේ වෙතත්, මෙම වෙබ් අඩවිය පාලනය කළ නොහැකි ලෙස වර්ධනය වූ අතර දත්ත ව්‍යුහයන් ප්‍රශස්ත කිරීම ඉල්ලා සිටීමට පටන් ගත්තේය.

2009 අවසානයේ, පළමු පෙළ-එන්ජින් ගබඩාව ලියා ඇති අතර, 2010 දී එය වෙත පණිවිඩ මාරු කරන ලදී.

පෙළ-එන්ජිම තුළ, පණිවිඩ ලැයිස්තු වල ගබඩා කර ඇත - "තැපැල් පෙට්ටි" වර්ගයකි. එවැනි සෑම ලැයිස්තුවක්ම uid මගින් තීරණය වේ - මෙම සියලු පණිවිඩ හිමි පරිශීලකයා. පණිවිඩයක ගුණාංග සමූහයක් ඇත: අන්තර් සම්බන්ධක හඳුනාගැනීම, පෙළ, ඇමුණුම් සහ යනාදිය. "කොටුව" තුළ ඇති පණිවිඩ හඳුනාගැනීම local_id වේ, එය කිසි විටෙකත් වෙනස් නොවන අතර නව පණිවිඩ සඳහා අනුක්‍රමිකව පවරනු ලැබේ. "පෙට්ටි" ස්වාධීන වන අතර එන්ජිම තුළ එකිනෙකා සමඟ සමමුහුර්ත නොවේ; ඒවා අතර සන්නිවේදනය PHP මට්ටමින් සිදු වේ. ඔබට ටෙක්ස්ට් එන්ජිමේ දත්ත ව්‍යුහය සහ හැකියාවන් ඇතුළත සිට බැලිය හැක මෙහි.
VKontakte පණිවිඩ දත්ත සමුදාය මුල සිට නැවත ලියන්න සහ බේරෙන්න
පරිශීලකයින් දෙදෙනෙකු අතර ලිපි හුවමාරුව සඳහා මෙය ප්රමාණවත් විය. ඊළඟට සිදුවූයේ කුමක්දැයි අනුමාන කරන්න?

2011 මැයි මාසයේදී VKontakte සහභාගී වූවන් කිහිප දෙනෙකු සමඟ සංවාද හඳුන්වා දුන්නේය - බහු කතාබස්. ඔවුන් සමඟ වැඩ කිරීමට, අපි නව පොකුරු දෙකක් ඇති කළෙමු - සාමාජික කතාබස් සහ කතාබස් සාමාජිකයින්. පළමුවැන්න පරිශීලකයින් විසින් කතාබස් පිළිබඳ දත්ත ගබඩා කරයි, දෙවැන්න කතාබස් මගින් පරිශීලකයින් පිළිබඳ දත්ත ගබඩා කරයි. ලැයිස්තු වලට අමතරව, මෙයට, උදාහරණයක් ලෙස, ආරාධිත පරිශීලකයා සහ ඔවුන් කතාබහට එක් කළ කාලය ඇතුළත් වේ.

"PHP, අපි චැට් එකට පණිවිඩයක් යවමු" පරිශීලකයා පවසයි.
“එන්න, {username},” PHP පවසයි.
VKontakte පණිවිඩ දත්ත සමුදාය මුල සිට නැවත ලියන්න සහ බේරෙන්න
මෙම යෝජනා ක්රමයේ අවාසි ඇත. සමමුහුර්තකරණය තවමත් PHP හි වගකීමයි. විශාල කතාබස් සහ ඔවුන්ට එකවර පණිවිඩ යවන පරිශීලකයින් භයානක කතාවකි. පෙළ-එන්ජින් අවස්ථාව uid මත රඳා පවතින බැවින්, කතාබස් සහභාගිවන්නන්ට විවිධ වේලාවන්හි එකම පණිවිඩය ලැබිය හැකිය. ප්‍රගතිය නිශ්චල වුවහොත් කෙනෙකුට මෙය සමඟ ජීවත් විය හැකිය. නමුත් එහෙම වෙන්නේ නැහැ.

2015 අවසානයේ, අපි ප්‍රජා පණිවිඩ දියත් කළ අතර, 2016 ආරම්භයේදී අපි ඔවුන් සඳහා API දියත් කළෙමු. ප්‍රජාවන් තුළ විශාල චැට්බෝට් පැමිණීමත් සමඟ, බර බෙදා හැරීම පවා අමතක කිරීමට හැකි විය.

හොඳ බොට් එකක් දිනකට පණිවිඩ මිලියන කිහිපයක් ජනනය කරයි - වඩාත්ම කතා කරන පරිශීලකයින්ට පවා මේ ගැන පුරසාරම් දෙඩීමට නොහැකිය. මෙයින් අදහස් කරන්නේ එවැනි බොට් ජීවත් වූ පෙළ-එන්ජිමේ සමහර අවස්ථා උපරිමයෙන් දුක් විඳීමට පටන් ගත් බවයි.

2016 දී පණිවිඩ එන්ජින් යනු කතාබස්-සාමාජිකයින් සහ සාමාජික කතාබස් අවස්ථා 100 ක් සහ පෙළ-එන්ජින් 8000 කි. ඒවා 64 GB මතකයක් සහිත සේවාදායකයන් දහසක් මත සත්කාරකත්වය සපයන ලදී. පළමු හදිසි පියවර ලෙස, අපි මතකය තවත් 32 GB කින් වැඩි කළෙමු. අපි අනාවැකි ඇස්තමේන්තු කළා. දැඩි වෙනස්කම් නොමැතිව, මෙය තවත් වසරක් පමණ ප්රමාණවත් වනු ඇත. ඔබට දෘඪාංග අල්ලා ගැනීමට හෝ දත්ත සමුදායන් ප්‍රශස්ත කිරීමට අවශ්‍ය වේ.

වාස්තු විද්‍යාවේ ස්වභාවය අනුව, දෘඩාංග ගුණාකාර වලින් වැඩි කිරීම පමණක් අර්ථවත් කරයි. එනම්, අවම වශයෙන් මෝටර් රථ සංඛ්යාව දෙගුණ කිරීම - පැහැදිලිවම, මෙය තරමක් මිල අධික මාර්ගයකි. අපි ප්‍රශස්ත කරන්නෙමු.

නව සංකල්පය

නව ප්‍රවේශයේ කේන්ද්‍රීය හරය වන්නේ කතාබස් කිරීමයි. කතාබහක එයට අදාළ පණිවිඩ ලැයිස්තුවක් ඇත. පරිශීලකයාට කතාබස් ලැයිස්තුවක් ඇත.

අවශ්‍ය අවම නව දත්ත සමුදායන් දෙකකි:

  • චැට්-එන්ජිම. මෙය චැට් දෛශික ගබඩාවකි. සෑම කතාබස් එකකම එයට අදාළ පණිවිඩ දෛශිකයක් ඇත. සෑම පණිවිඩයක්ම කතාබස් තුළ පෙළක් සහ අනන්‍ය පණිවිඩ හඳුනාගැනීමක් ඇත - chat_local_id.
  • පරිශීලක එන්ජිම. මෙය පරිශීලක දෛශික ගබඩාවකි - පරිශීලකයින් වෙත සබැඳි. සෑම පරිශීලකයෙකුටම peer_id දෛශිකයක් (අන්තර් සම්බන්ධ කරන්නන් - වෙනත් පරිශීලකයින්, බහු කතාබස් හෝ ප්‍රජාවන්) සහ පණිවිඩ දෛශිකයක් ඇත. සෑම peer_id එකකම එයට අදාළ පණිවිඩ දෛශිකයක් ඇත. සෑම පණිවිඩයකටම chat_local_id එකක් සහ එම පරිශීලකයා සඳහා අනන්‍ය පණිවිඩ ID එකක් ඇත - user_local_id.

VKontakte පණිවිඩ දත්ත සමුදාය මුල සිට නැවත ලියන්න සහ බේරෙන්න
නව පොකුරු TCP භාවිතයෙන් එකිනෙකා සමඟ සන්නිවේදනය කරයි - මෙය ඉල්ලීම් අනුපිළිවෙල වෙනස් නොවන බව සහතික කරයි. ඉල්ලීම් සහ ඒවා සඳහා තහවුරු කිරීම් දෘඪ තැටියේ සටහන් කර ඇත - එබැවින් අපට එන්ජිම අසාර්ථක වීමෙන් හෝ නැවත ආරම්භ කිරීමෙන් පසු ඕනෑම වේලාවක පෝලිමේ තත්වය යථා තත්වයට පත් කළ හැකිය. පරිශීලක-එන්ජිම සහ චැට්-එන්ජිම කැබලි 4 බැගින් වන බැවින්, පොකුරු අතර ඉල්ලීම් පෝලිම ඒකාකාරව බෙදා හරිනු ඇත (නමුත් යථාර්ථයේ දී කිසිවක් නැත - එය ඉතා ඉක්මනින් ක්‍රියා කරයි).

බොහෝ අවස්ථාවලදී අපගේ දත්ත සමුදාය තුළ තැටිය සමඟ වැඩ කිරීම පදනම් වන්නේ වෙනස්වීම් (binlog), ස්ථිතික ස්නැප්ෂොට් සහ මතකයේ ඇති අර්ධ රූපයක එකතුවක් මත ය. දිවා කාලයේ සිදුවන වෙනස්කම් බින්ලොග් එකකට ලියා ඇති අතර වත්මන් තත්වයේ සැණරුවක් වරින් වර නිර්මාණය වේ. ස්නැප්ෂොට් එකක් යනු අපගේ අරමුණු සඳහා ප්‍රශස්ත කළ දත්ත ව්‍යුහයන්ගේ එකතුවකි. එය ශීර්ෂයකින් (රූපයේ metaindex) සහ metafiles කට්ටලයකින් සමන්විත වේ. ශීර්ෂකය ස්ථිරවම RAM හි ගබඩා කර ඇති අතර ස්නැප්ෂොට් වෙතින් දත්ත සොයන්නේ කොතැනද යන්න දක්වයි. සෑම මෙටාෆයිල් එකකටම ආසන්න ස්ථානවල අවශ්‍ය විය හැකි දත්ත ඇතුළත් වේ-උදාහරණයක් ලෙස, තනි පරිශීලකයෙකුට අදාළ වේ. ඔබ ස්නැප්ෂොට් ශීර්ෂය භාවිතයෙන් දත්ත සමුදාය විමසන විට, අවශ්‍ය මෙටාෆයිල් කියවනු ලැබේ, පසුව ස්නැප්ෂොට් නිර්මාණය කිරීමෙන් පසු සිදු වූ බින්ලොග් හි වෙනස්කම් සැලකිල්ලට ගනී. මෙම ප්රවේශයේ ප්රතිලාභ ගැන ඔබට වැඩිදුර කියවිය හැකිය මෙහි.

ඒ අතරම, දෘඪ තැටියේම දත්ත වෙනස් වන්නේ දිනකට එක් වරක් පමණි - මොස්කව්හි රාත්රියේදී, බර අවම වන විට. මෙයට ස්තූතියි (තැටියේ ඇති ව්‍යුහය දවස පුරා නියත බව දැන සිටීම), අපට දෛශික ස්ථාවර ප්‍රමාණයේ අරා සමඟ ප්‍රතිස්ථාපනය කිරීමට දැරිය හැකිය - සහ මේ හේතුවෙන් මතකය ලබා ගන්න.

නව යෝජනා ක්‍රමය තුළ පණිවිඩයක් යැවීම මේ ආකාරයෙන් පෙනේ:

  1. PHP පසුපෙළ පණිවිඩයක් යැවීමට ඉල්ලීමක් සමඟ පරිශීලක එන්ජිම සම්බන්ධ කරයි.
  2. පරිශීලක-එන්ජින් අපේක්ෂිත චැට්-එන්ජින් අවස්ථාවට ඉල්ලීම ප්‍රොක්සි කරයි, එය පරිශීලක-එන්ජින් chat_local_id වෙත නැවත පැමිණේ - මෙම කතාබස් තුළ ඇති නව පණිවිඩයක අද්විතීය හඳුනාගැනීමක්. chat_engine පසුව චැට් එකේ සියලුම ලබන්නන් වෙත පණිවිඩය විකාශනය කරයි.
  3. පරිශීලක-එන්ජිම චැට්-එන්ජින් වෙතින් chat_local_id ලබා ගන්නා අතර user_local_id PHP වෙත ආපසු ලබා දෙයි - මෙම පරිශීලකයා සඳහා අද්විතීය පණිවිඩ හඳුනාගැනීමක්. මෙම හඳුනාගැනීම පසුව භාවිතා කරනු ලැබේ, උදාහරණයක් ලෙස, API හරහා පණිවිඩ සමඟ වැඩ කිරීමට.

VKontakte පණිවිඩ දත්ත සමුදාය මුල සිට නැවත ලියන්න සහ බේරෙන්න
නමුත් ඇත්ත වශයෙන්ම පණිවිඩ යැවීමට අමතරව, ඔබට තවත් වැදගත් කරුණු කිහිපයක් ක්රියාත්මක කිරීමට අවශ්ය වේ:

  • උප ලැයිස්තු යනු, උදාහරණයක් ලෙස, සංවාද ලැයිස්තුව විවෘත කරන විට ඔබ දකින නවතම පණිවිඩ වේ. නොකියවූ පණිවිඩ, ටැග් සහිත පණිවිඩ ("වැදගත්", "අයාචිත තැපැල්", ආදිය).
  • චැට්-එන්ජිම තුළ පණිවිඩ සම්පීඩනය කිරීම
  • පරිශීලක එන්ජිම තුළ පණිවිඩ හැඹිලිගත කිරීම
  • සොයන්න (සියලු සංවාද හරහා සහ විශේෂිත එකක් තුළ).
  • තත්‍ය කාලීන යාවත්කාලීන (Longpolling).
  • ජංගම සේවාලාභීන් මත හැඹිලිගත කිරීම ක්‍රියාත්මක කිරීමට ඉතිහාසය සුරැකීම.

සියලුම උප ලැයිස්තු ශීඝ්‍රයෙන් වෙනස් වන ව්‍යුහයන් වේ. ඔවුන් සමඟ වැඩ කිරීමට අපි භාවිතා කරමු ස්පේ ගස්. මෙම තේරීම පැහැදිලි කරනුයේ ගසේ මුදුනේ අපි සමහර විට ස්නැප්ෂොට් එකකින් සම්පූර්ණ පණිවිඩ කොටසක් ගබඩා කරන බැවිනි - නිදසුනක් ලෙස, රාත්‍රී නැවත සුචිගත කිරීමෙන් පසු, ගස එක් මුදුනකින් සමන්විත වන අතර එහි උප ලැයිස්තුවේ සියලුම පණිවිඩ අඩංගු වේ. Splay ගස සමබර කිරීම ගැන නොසිතා එවැනි ශීර්ෂයක් මැදට ඇතුළු කිරීම පහසු කරයි. මීට අමතරව, Splay අනවශ්‍ය දත්ත ගබඩා නොකරයි, එමඟින් අපට මතකය ඉතිරි වේ.

පණිවිඩ විශාල තොරතුරු ප්‍රමාණයක් ඇතුළත් වේ, බොහෝ දුරට පෙළ, සම්පීඩනය කිරීමට ප්‍රයෝජනවත් වේ. අපට එක් පුද්ගල පණිවිඩයක් පවා නිවැරදිව සංරක්ෂණය කළ හැකි වීම වැදගත් වේ. පණිවිඩ සම්පීඩනය කිරීමට භාවිතා කරයි හෆ්මන් ඇල්ගොරිතම අපගේම හූරිස්ටික් සමඟ - උදාහරණයක් ලෙස, පණිවිඩවල වචන “වචන නොවන” - අවකාශයන්, විරාම ලකුණු සමඟ විකල්ප වන බව අපි දනිමු, තවද රුසියානු භාෂාව සඳහා සංකේත භාවිතා කිරීමේ සමහර සුවිශේෂතා ද අපට මතකයි.

කතාබස් වලට වඩා බොහෝ පරිශීලකයින් අඩු බැවින්, අහඹු-ප්‍රවේශ තැටි ඉල්ලීම් චැට්-එන්ජිම තුළ සුරැකීමට, අපි පරිශීලක-එන්ජිම තුළ පණිවිඩ හැඹිලිගත කරමු.

මෙම පරිශීලකයාගේ කතාබස් අඩංගු සියලුම චැට්-එන්ජින් අවස්ථාවන් වෙත පරිශීලක එන්ජිමේ සිට විකර්ණ විමසුමක් ලෙස පණිවිඩ සෙවීම ක්‍රියාත්මක කෙරේ. ප්රතිඵල පරිශීලක-එන්ජිම තුළම ඒකාබද්ධ වේ.

හොඳයි, සියලු විස්තර සැලකිල්ලට ගෙන ඇත, ඉතිරිව ඇත්තේ නව යෝජනා ක්රමයකට මාරුවීමයි - සහ වඩාත් සුදුසු පරිශීලකයින් එය නොදැනුවත්ව.

දත්ත සංක්රමණය

එබැවින්, අපට පරිශීලකයා විසින් පණිවිඩ ගබඩා කරන පෙළ-එන්ජිමක් සහ බහු-චැට් කාමර සහ ඒවායේ පරිශීලකයින් පිළිබඳ දත්ත ගබඩා කරන සංවාද-සාමාජිකයින් සහ සාමාජික කතාබස් පොකුරු දෙකක් ඇත. මේකෙන් අලුත් user-engine එකට සහ chat-engine එකට යන්නේ කොහොමද?

පැරණි යෝජනා ක්‍රමයේ සාමාජික කතාබස් මූලික වශයෙන් ප්‍රශස්තකරණය සඳහා භාවිතා කරන ලදී. අපි ඉක්මනින් එයින් අවශ්‍ය දත්ත චැට්-සාමාජිකයින් වෙත මාරු කළ අතර පසුව එය තවදුරටත් සංක්‍රමණ ක්‍රියාවලියට සහභාගී නොවීය.

කතාබස් සාමාජිකයින් සඳහා පෝලිම. එයට අවස්ථා 100 ක් ඇතුළත් වන අතර චැට්-එන්ජින් 4 දහසක් ඇත. දත්ත මාරු කිරීම සඳහා, ඔබ එය අනුකූලතාවයට ගෙන යා යුතුය - මේ සඳහා, චැට්-සාමාජිකයින් එකම පිටපත් 4 දහසකට බෙදා ඇති අතර, පසුව චැට්-සාමාජිකයින්ගේ බින්ලොග් කියවීම චැට්-එන්ජිම තුළ සක්‍රීය කර ඇත.
VKontakte පණිවිඩ දත්ත සමුදාය මුල සිට නැවත ලියන්න සහ බේරෙන්න
දැන් chat-engine chat-members ගෙන් බහු කතාබස් ගැන දනී, නමුත් එය තවමත් මැදිහත්කරුවන් දෙදෙනෙකු සමඟ සංවාද ගැන කිසිවක් දන්නේ නැත. එවැනි සංවාද පරිශීලකයන් වෙත යොමුව පෙළ-එන්ජිම තුළ පිහිටා ඇත. මෙහිදී අපි දත්ත "හිසට-මුතු" ලබා ගත්තෙමු: සෑම චැට්-එන්ජිම අවස්ථාවක්ම සියලුම පෙළ-එන්ජින් අවස්ථාවන්ගෙන් එයට අවශ්‍ය සංවාදයක් තිබේදැයි විමසා ඇත.

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

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

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

ආනයනික පණිවිඩ ගබඩා කිරීම සඳහා අපි විශේෂ දත්ත ව්‍යුහයක් භාවිතා කරමු.

එය විශාලත්වයේ දෛශිකයක් නියෝජනය කරයි VKontakte පණිවිඩ දත්ත සමුදාය මුල සිට නැවත ලියන්න සහ බේරෙන්නහැමෝම කොහෙද VKontakte පණිවිඩ දත්ත සමුදාය මුල සිට නැවත ලියන්න සහ බේරෙන්න - මූලද්‍රව්‍යවල විශේෂ අනුපිළිවෙලක් සමඟ වෙනස් වන අතර අවරෝහණ අනුපිළිවෙලට අනුපිළිවෙලට ඇත. දර්ශක සහිත එක් එක් කොටසෙහි VKontakte පණිවිඩ දත්ත සමුදාය මුල සිට නැවත ලියන්න සහ බේරෙන්න මූලද්රව්ය වර්ග කර ඇත. එවැනි ව්යුහයක මූලද්රව්යයක් සෙවීමට කාලය ගතවේ VKontakte පණිවිඩ දත්ත සමුදාය මුල සිට නැවත ලියන්න සහ බේරෙන්න හරහා VKontakte පණිවිඩ දත්ත සමුදාය මුල සිට නැවත ලියන්න සහ බේරෙන්න ද්විමය සෙවුම්. මූලද්‍රව්‍යයක් එකතු කිරීම ක්‍රමක්ෂනය කර ඇත VKontakte පණිවිඩ දත්ත සමුදාය මුල සිට නැවත ලියන්න සහ බේරෙන්න.

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

දත්ත ලියා ඇත්තේ චැට්-සාමාජිකයින්ට සහ පරිශීලක එන්ජිමට (සහ පැරණි යෝජනා ක්‍රමයට අනුව සාමාන්‍ය ක්‍රියාකාරිත්වයේ දී මෙන් පෙළ-එන්ජිමට නොවේ). පරිශීලක-එන්ජින් චැට්-එන්ජින් වෙත ඉල්ලීම ප්‍රොක්සි කරයි - සහ මෙහි හැසිරීම මෙම කතාබස් දැනටමත් ඒකාබද්ධ කර තිබේද නැද්ද යන්න මත රඳා පවතී. කතාබස් තවමත් ඒකාබද්ධ කර නොමැති නම්, චැට්-එන්ජිම තමාටම පණිවිඩය ලියන්නේ නැත, සහ එහි සැකසුම් සිදු වන්නේ පෙළ-එන්ජිම තුළ පමණි. කතාබස් දැනටමත් chat-engine වෙත ඒකාබද්ධ කර ඇත්නම්, එය chat_local_id පරිශීලක-එන්ජිම වෙත ආපසු ලබා දෙන අතර සියලුම ලබන්නන් වෙත පණිවිඩය යවයි. පරිශීලක-එන්ජිම සියලුම දත්ත පෙළ-එන්ජිම වෙත ප්‍රොක්සි කරයි - එවිට යමක් සිදු වුවහොත්, පැරණි එන්ජිමේ පවතින සියලුම දත්ත තබාගෙන අපට සැමවිටම ආපසු හැරවිය හැක. text-engine නැවත user_local_id ලබා දෙයි, එය පරිශීලක-එන්ජිම ගබඩා කර පසුපෙළ වෙත ආපසු යයි.
VKontakte පණිවිඩ දත්ත සමුදාය මුල සිට නැවත ලියන්න සහ බේරෙන්න
ප්රතිඵලයක් වශයෙන්, සංක්රාන්ති ක්රියාවලිය මෙසේ පෙනේ: අපි හිස් පරිශීලක-එන්ජින් සහ චැට්-එන්ජින් පොකුරු සම්බන්ධ කරමු. chat-engine සම්පූර්ණ chat-members binlog කියවයි, පසුව ඉහත විස්තර කර ඇති යෝජනා ක්‍රමයට අනුව proxying ආරම්භ වේ. අපි පැරණි දත්ත මාරු කර සමමුහුර්ත කළ පොකුරු දෙකක් (පරණ සහ නව) ලබා ගනිමු. ඉතිරිව ඇත්තේ පාඨ-එන්ජිම සිට පරිශීලක-එන්ජිම වෙත කියවීම මාරු කිරීම සහ ප්‍රොක්සි කිරීම අක්‍රීය කිරීම පමණි.

ප්රතිඵල

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

තාර්කික වෙනස්කම් ඇත්තෙන්ම දැවැන්තය. තවද මෙය සෑම විටම විශාල කණ්ඩායමක් සහ අසංඛ්‍යාත කේත රේඛා මගින් වසර ගණනාවක් සංවර්ධනය කිරීම අදහස් නොකරන බව සටහන් කිරීමට කැමැත්තෙමි. චැට්-එන්ජින් සහ පරිශීලක-එන්ජින් සමඟ පණිවිඩ සම්පීඩනය සඳහා හෆ්මන්, ස්ප්ලේ ගස් සහ ආනයනය කරන ලද පණිවිඩ සඳහා ව්‍යුහය වැනි සියලුම අමතර කථා කේත පේළි 20 දහසකට වඩා අඩුය. ඒවා මාස 3 ක් තුළ සංවර්ධකයින් 10 දෙනෙකු විසින් ලියා ඇත (කෙසේ වෙතත්, එය මතක තබා ගැනීම වටී සියල්ල තුනකි සංවර්ධකයා - ලෝක ශූරයන් ක්රීඩා වැඩසටහන් වල).

එපමණක් නොව, සේවාදායක සංඛ්‍යාව දෙගුණ කිරීම වෙනුවට, අපි ඒවායේ සංඛ්‍යාව අඩකින් අඩු කළෙමු - දැන් පරිශීලක-එන්ජිම සහ චැට්-එන්ජිම භෞතික යන්ත්‍ර 500 ක සජීවී වන අතර නව යෝජනා ක්‍රමයට පැටවීමට විශාල ප්‍රධාන කාමරයක් ඇත. අපි උපකරණ සඳහා විශාල මුදලක් ඉතිරි කර ගත්තෙමු - මෙහෙයුම් වියදම් සඳහා වසරකට ඩොලර් මිලියන 5 ක් + ඩොලර් 750 දහසක් පමණ.

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

මෙම කතාව ඔබ ගැන නොවුනත්, අපි නිර්දේශ අගය කරන බව කරුණාවෙන් සලකන්න. ගැන මිතුරෙකුට කියන්න සංවර්ධක පුරප්පාඩු, සහ ඔහු පරිවාස කාලය සාර්ථකව සම්පූර්ණ කළහොත්, ඔබට රුබල් 100 ක ප්රසාද දීමනාවක් ලැබෙනු ඇත.

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

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