KDB+ දත්ත සමුදාය: මුල්‍යයේ සිට සූත්‍රය 1 දක්වා

KDB+, සමාගම් නිෂ්පාදනය KX කාල ශ්‍රේණි සහ ඒවා මත පදනම් වූ විශ්ලේෂණාත්මක ගණනය කිරීම් ගබඩා කිරීම සඳහා නිර්මාණය කර ඇති අතිශය වේගවත්, තීරු දත්ත සමුදාය පටු කවයන් තුළ බහුලව ප්‍රසිද්ධ වේ. මුලදී, එය මූල්‍ය කර්මාන්තයේ ඉතා ජනප්‍රිය විය (සහ) - සියලුම ඉහළම 10 ආයෝජන බැංකු සහ බොහෝ ප්‍රසිද්ධ හෙජ් අරමුදල්, හුවමාරු සහ වෙනත් සංවිධාන එය භාවිතා කරයි. මෑතකදී, KX සිය පාරිභෝගික පදනම පුළුල් කිරීමට තීරණය කළ අතර දැන් කාලය හෝ වෙනත් ආකාරයකින් සංවිධානය කරන ලද දත්ත විශාල ප්‍රමාණයක් ඇති වෙනත් ප්‍රදේශවල විසඳුම් ලබා දීමට තීරණය කළේය - ටෙලිකොම්, ජෛව තොරතුරු, නිෂ්පාදන, ආදිය. ඔවුන් ෆෝමියුලා 1 හි Aston Martin Red Bull Racing කණ්ඩායමේ හවුල්කරුවෙකු බවටද පත් විය, එහිදී ඔවුන් මෝටර් රථ සංවේදක වලින් දත්ත රැස් කිරීමට සහ සැකසීමට සහ සුළං උමං පරීක්ෂණ විශ්ලේෂණය කිරීමට උපකාරී වේ. මෙම ලිපියෙන්, මට ඔබට කියන්නට අවශ්‍ය වන්නේ KDB+ හි එය සුපිරි ක්‍රියාකාරීත්වයට පත් කරන විශේෂාංග මොනවාද, සමාගම් ඒ සඳහා විශාල මුදලක් වැය කිරීමට කැමති ඇයි සහ අවසාන වශයෙන්, එය සැබවින්ම දත්ත සමුදායක් නොවන්නේ මන්ද යන්නයි.
 
KDB+ දත්ත සමුදාය: මුල්‍යයේ සිට සූත්‍රය 1 දක්වා
 
මෙම ලිපියෙන් මම KDB+ යනු කුමක්ද, එහි ඇති හැකියාවන් සහ සීමාවන් මොනවාද සහ විශාල දත්ත ප්‍රමාණයක් සැකසීමට අවශ්‍ය සමාගම් සඳහා එහි ප්‍රතිලාභ මොනවාදැයි ඔබට පොදුවේ පැවසීමට උත්සාහ කරමි. මම KDB+ ක්‍රියාවට නැංවීමේ විස්තර හෝ එහි Q ක්‍රමලේඛන භාෂාවේ විස්තර වෙත නොයමි.මෙම මාතෘකා දෙකම ඉතා පුළුල් වන අතර වෙන වෙනම ලිපි ලැබිය යුතුය. මෙම මාතෘකා පිළිබඳ බොහෝ තොරතුරු code.kx.com හි සොයා ගත හැකි අතර, Q - Q Mortals සඳහා පොතක් ද ඇතුළුව (පහත සබැඳිය බලන්න).

සමහර නියමයන්

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

 

ඓතිහාසික පසුබිම

KX 1993 දී ආරම්භ කරන ලද්දේ APL හි අනුප්‍රාප්තිකයා වන මෝගන් ස්ටැන්ලි බැංකුවේ මීට පෙර A+ භාෂාවෙන් සේවය කළ ආතර් විට්නි විසිනි. ඇත්ත වශයෙන්ම, KX හි, ආතර් එම ආත්මයේම දිගටම කරගෙන ගොස් රැඩිකල් අවමවාදයේ අදහස් මගින් මෙහෙයවනු ලබන K දෛශික-ක්‍රියාකාරී භාෂාව නිර්මාණය කළේය. K වැඩසටහන් විරාම ලකුණු සහ විශේෂ අක්ෂරවල පටලැවිල්ලක් මෙන් පෙනේ, සංඥා සහ ශ්‍රිතවල අර්ථය සන්දර්භය මත රඳා පවතී, සහ සෑම මෙහෙයුමක්ම සාම්ප්‍රදායික ක්‍රමලේඛන භාෂාවලට වඩා බොහෝ අර්ථයක් දරයි. මේ නිසා, K වැඩසටහනක් අවම ඉඩක් ගනී - Java වැනි වාචික භාෂාවකින් පෙළ පිටු කිහිපයක් පේළි වලට ප්‍රතිස්ථාපනය කළ හැකිය - එය ඇල්ගොරිතමයේ සුපිරි-සාන්ද්‍රිත ක්‍රියාත්මක කිරීමකි.
 
දී ඇති ව්‍යාකරණ අනුව බොහෝ LL1 විග්‍රහ උත්පාදක ක්‍රියාත්මක කරන K හි ශ්‍රිතයක්:

1. pp:{q:{(x;p3(),y)};r:$[-11=@x;$x;11=@x;q[`N;$*x];10=abs@@x;q[`N;x]  
2.   ($)~*x;(`P;p3 x 1);(1=#x)&11=@*x;pp[{(1#x;$[2=#x;;,:]1_x)}@*x]  
3.      (?)~*x;(`Q;pp[x 1]);(*)~*x;(`M;pp[x 1]);(+)~*x;(`MP;pp[x 1]);(!)~*x;(`Y;p3 x 1)  
4.      (2=#x)&(@x 1)in 100 101 107 7 -7h;($[(@x 1)in 100 101 107h;`Ff;`Fi];p3 x 1;pp[*x])  
5.      (|)~*x;`S,(pp'1_x);2=#x;`C,{@[@[x;-1+#x;{x,")"}];0;"(",]}({$[".s.C"~4#x;6_-2_x;x]}'pp'x);'`pp];  
6.   $[@r;r;($[1<#r;".s.";""],$*r),$[1<#r;"[",(";"/:1_r),"]";""]]}  

 ආතර් 2003 දී දර්ශනය වූ KDB+ හි අවම ශරීර චලනයන් සමඟ මෙම අතිශය කාර්යක්ෂමතාවයේ දර්ශනය මූර්තිමත් කළේය (මම හිතන්නේ නමේ K අකුර පැමිණියේ කොහෙන්ද යන්න දැන් පැහැදිලිය) සහ එය K හි සිව්වන අනුවාදයේ පරිවර්තකයෙකුට වඩා වැඩි දෙයක් නොවේ. භාෂාව, K K මත Q නමින් වඩාත් පරිශීලක-හිතකාමී අනුවාදයක් එක් කර ඇත. Q ද SQL - QSQL හි නිශ්චිත උපභාෂාවක් සඳහා සහය එක් කරන ලදී - QSQL, සහ පරිවර්තකය - පද්ධති දත්ත වර්ගයක් ලෙස වගු සඳහා සහය, වගු සමඟ වැඩ කිරීමේ මෙවලම් මතකයේ සහ තැටියේ, ආදිය.
 
එබැවින් පරිශීලකයාගේ දෘෂ්ටිකෝණයෙන්, KDB+ යනු C# වෙතින් වගු සහ SQL වැනි LINQ ආකාරයේ ප්‍රකාශන සඳහා සහය දක්වන Q භාෂා පරිවර්තකයකි. KDB+ සහ අනෙකුත් දත්ත සමුදායන් අතර ඇති වැදගත්ම වෙනස මෙය වන අතර බොහෝ විට නොසලකා හරින එහි ප්‍රධාන තරඟකාරී වාසියයි. මෙය දත්ත සමුදාය + අක්‍රීය සහායක භාෂාවක් නොව, සම්පූර්ණ ප්‍රබල ක්‍රමලේඛන භාෂාවක් + දත්ත සමුදා ක්‍රියාකාරකම් සඳහා ගොඩනඟන ලද සහායකි. KDB+ හි සියලුම ප්‍රතිලාභ ලැයිස්තුගත කිරීමේදී මෙම වෙනස තීරණාත්මක කාර්යභාරයක් ඉටු කරනු ඇත. උදාහරණ වශයෙන්…
 

විශාලත්වය

නවීන ප්‍රමිතීන්ට අනුව, KDB+ ප්‍රමාණයෙන් සරලව අන්වීක්ෂීය වේ. එය වචනාර්ථයෙන් එක් උප මෙගාබයිට් ක්‍රියාත්මක කළ හැකි ගොනුවක් සහ සමහර පද්ධති ක්‍රියාකාරකම් සහිත කුඩා පෙළ ගොනුවකි. යථාර්ථයේ දී - මෙගාබයිට් එකකට වඩා අඩු වන අතර, මෙම වැඩසටහන සඳහා සමාගම් සේවාදායකයේ එක් ප්රොසෙසරයක් සඳහා වසරකට ඩොලර් දස දහස් ගණනක් ගෙවයි.

  • මෙම ප්‍රමාණය KDB+ ඕනෑම දෘඪාංගයක් මත - Pi මයික්‍රොකොම්පියුටරයේ සිට ටෙරාබයිට් මතකය සහිත සේවාදායකයන් දක්වා විශිෂ්ට ලෙස දැනීමට ඉඩ සලසයි. මෙය ක්‍රියාකාරීත්වයට කිසිදු ආකාරයකින් බලපාන්නේ නැත; එපමනක් නොව, Q ක්ෂණිකව ආරම්භ වන අතර, එය වෙනත් දේ අතර, ස්ක්‍රිප්ටින් භාෂාවක් ලෙස භාවිතා කිරීමට ඉඩ සලසයි.
  • මෙම ප්‍රමාණයෙන්, Q පරිවර්තකය සම්පූර්ණයෙන්ම ප්‍රොසෙසර හැඹිලියට ගැලපේ, එය වැඩසටහන් ක්‍රියාත්මක කිරීම වේගවත් කරයි.
  • ක්‍රියාත්මක කළ හැකි ගොනුවේ මෙම ප්‍රමාණය සමඟ, Q ක්‍රියාවලිය මතකයේ නොසැලකිය හැකි ඉඩක් ගනී; ඔබට ඒවා සිය ගණනක් ධාවනය කළ හැකිය. තව ද, අවශ්‍ය නම්, Q හට එක් ක්‍රියාවලියක් තුළ දස හෝ ගිගාබයිට් සිය ගණනක මතකයක් සමඟ ක්‍රියා කළ හැක.

බහුකාර්යතාව

Q පුළුල් පරාසයක යෙදුම් සඳහා විශිෂ්ටයි. Q ක්‍රියාවලියට ඓතිහාසික දත්ත ගබඩාවක් ලෙස ක්‍රියා කළ හැකි අතර ටෙරාබයිට් ගණනක තොරතුරු වෙත ඉක්මන් ප්‍රවේශයක් සැපයිය හැක. උදාහරණයක් ලෙස, අපට ඓතිහාසික දත්ත සමුදායන් දුසිම් ගණනක් ඇත, ඒවායින් සමහරක් එක් සම්පීඩිත නොකළ දත්ත ගිගාබයිට් 100කට වඩා වැඩි ප්‍රමාණයක් ගනී. කෙසේ වෙතත්, සාධාරණ සීමාවන් යටතේ, දත්ත සමුදාය වෙත විමසුමක් මිලි තත්පර දස සිට සියගණනකින් සම්පූර්ණ වනු ඇත. සාමාන්‍යයෙන්, පරිශීලක ඉල්ලීම් සඳහා අපට විශ්වීය කල් ඉකුත්වීමක් ඇත - තත්පර 30 - එය ඉතා කලාතුරකින් ක්‍රියා කරයි.
 
Q පහසුවෙන් මතකයේ ඇති දත්ත ගබඩාවක් විය හැකිය. පරිශීලක ඉල්ලීම් සීමාකාරී සාධකය වන තරමට ඉක්මනින් මතකයේ ඇති වගු වෙත නව දත්ත එකතු වේ. වගු වල දත්ත තීරු වල ගබඩා කර ඇත, එනම් තීරුවක ඕනෑම මෙහෙයුමක් සම්පූර්ණ ධාරිතාවයෙන් ප්‍රොසෙසර හැඹිලිය භාවිතා කරයි. මීට අමතරව, KX විසින් ප්‍රොසෙසරයේ දෛශික උපදෙස් හරහා අංක ගණිතය වැනි සියලුම මූලික මෙහෙයුම් ක්‍රියාත්මක කිරීමට උත්සාහ කළ අතර, ඒවායේ වේගය උපරිම කර ඇත. Q හට දත්ත සමුදායන් සඳහා සාමාන්‍ය නොවන කාර්යයන් සිදු කළ හැකිය - නිදසුනක් ලෙස, ප්‍රවාහ දත්ත සැකසීම සහ "සැබෑ කාලය" තුළ ගණනය කිරීම (කාර්යය අනුව මිලි තත්පර දස සිට තත්පර කිහිපයක් දක්වා ප්‍රමාදයකින්) විවිධ වේලාවන් සඳහා මූල්‍ය උපකරණ සඳහා විවිධ එකතු කිරීමේ කාර්යයන් කාල පරතරයන් හෝ වෙළඳපොළට පරිපූර්ණ ගනුදෙනු වල බලපෑම පිළිබඳ ආකෘතියක් ගොඩනඟා එය අවසන් වූ වහාම පාහේ එහි පැතිකඩ සිදු කරන්න. එවැනි කාර්යයන් වලදී, බොහෝ විට ප්රධාන කාල ප්රමාදය Q නොවේ, නමුත් විවිධ මූලාශ්රවලින් දත්ත සමමුහුර්ත කිරීමට අවශ්ය වේ. දත්ත සහ ඒවා සකසන ශ්‍රිත එක් ක්‍රියාවලියක පැවතීම නිසා අධි වේගයක් ලබා ගත හැකි අතර, QSQL ප්‍රකාශන කිහිපයක් ක්‍රියාත්මක කිරීම දක්වා සැකසීම අඩු වී ඇති අතර ඒවා අර්ථකථනය නොකරන නමුත් ද්විමය කේතය මගින් ක්‍රියාත්මක වේ.
 
අවසාන වශයෙන්, ඔබට Q හි ඕනෑම සේවා ක්‍රියාවලියක් ලිවිය හැකිය. උදාහරණයක් ලෙස, අවශ්‍ය දත්ත සමුදායන් සහ සේවාදායකයන් වෙත ස්වයංක්‍රීයව පරිශීලක ඉල්ලීම් බෙදාහරින Gateway ක්‍රියාවලි. සමතුලිත කිරීම, ප්‍රමුඛත්වය දීම, වැරදි ඉවසීම, ප්‍රවේශ අයිතිවාසිකම්, කෝටා සහ මූලික වශයෙන් ඔහුගේ හදවත කැමති ඕනෑම දෙයක් සඳහා ඕනෑම ඇල්ගොරිතමයක් ක්‍රියාත්මක කිරීමට ක්‍රමලේඛකයාට පූර්ණ නිදහස තිබේ. මෙහි ඇති ප්‍රධාන ගැටළුව නම් මේ සියල්ල ඔබ විසින්ම ක්‍රියාත්මක කිරීමට සිදුවනු ඇත.
 
උදාහරණයක් ලෙස, අප සතුව ඇති ක්‍රියාවලි වර්ග මොනවාදැයි මම ලැයිස්තුගත කරමි. ඒවා සියල්ලම සක්‍රියව භාවිතා කරන අතර එකට ක්‍රියා කරයි, විවිධ දත්ත සමුදා දුසිම් ගණනක් එකකට ඒකාබද්ධ කරයි, බහු ප්‍රභවයන්ගෙන් දත්ත සැකසීම සහ සිය ගණනක් පරිශීලකයින් සහ යෙදුම් සඳහා සේවය කරයි.

  • දත්ත මූලාශ්‍ර වෙත සම්බන්ධක (feedhandler). මෙම ක්‍රියාවලීන් සාමාන්‍යයෙන් Q වෙත පටවනු ලබන බාහිර පුස්තකාල භාවිතා කරයි. Q හි C අතුරුමුහුණත අතිශයින්ම සරල වන අතර ඕනෑම C/C++ පුස්තකාලයක් සඳහා පහසුවෙන් ප්‍රොක්සි ශ්‍රිතයන් නිර්මාණය කිරීමට ඔබට ඉඩ සලසයි. Q හැසිරවීමට තරම් වේගවත් වේ, උදාහරණයක් ලෙස, සියලුම යුරෝපීය කොටස් හුවමාරු වලින් එකවර FIX පණිවිඩ ගංවතුරක් සැකසීම.
  • දත්ත බෙදාහරින්නන් (tickerplant), සම්බන්ධක සහ පාරිභෝගිකයින් අතර අතරමැදි සම්බන්ධකයක් ලෙස සේවය කරයි. ඒ අතරම, ඔවුන් පැමිණෙන දත්ත විශේෂ ද්විමය ලඝු-සටහනකට ලියන අතර, සම්බන්ධතා නැතිවීම් හෝ නැවත ආරම්භ කිරීමට එරෙහිව පාරිභෝගිකයින්ට ශක්තිමත් බවක් ලබා දෙයි.
  • මතකයේ ඇති දත්ත ගබඩාව (rdb). මෙම දත්ත සමුදායන් මතකයේ ගබඩා කිරීමෙන් අමු, නැවුම් දත්ත වෙත හැකි ඉක්මනින් ප්‍රවේශය සපයයි. සාමාන්‍යයෙන්, ඔවුන් දිවා කාලයේදී වගු වල දත්ත රැස් කර රාත්‍රියේදී ඒවා නැවත සකසයි.
  • අඛණ්ඩ දත්ත සමුදාය (pdb). මෙම දත්ත සමුදායන් අද සඳහා දත්ත ඓතිහාසික දත්ත ගබඩාවක ගබඩා කර ඇති බව සහතික කරයි. රීතියක් ලෙස, rdb මෙන් නොව, ඔවුන් මතකයේ දත්ත ගබඩා නොකරයි, නමුත් දිවා කාලයේ තැටියේ විශේෂ හැඹිලියක් භාවිතා කරන අතර මධ්යම රාත්රියේ දත්ත ඓතිහාසික දත්ත ගබඩාවට පිටපත් කරන්න.
  • ඓතිහාසික දත්ත සමුදායන් (hdb). මෙම දත්ත සමුදායන් පෙර දින, මාස සහ වසර සඳහා දත්ත වෙත ප්‍රවේශය සපයයි. ඔවුන්ගේ ප්රමාණය (දින තුළ) දෘඪ තැටි ප්රමාණයෙන් පමණක් සීමා වේ. ප්රවේශය වේගවත් කිරීම සඳහා විශේෂයෙන් විවිධ තැටි මත දත්ත ඕනෑම තැනක ස්ථානගත කළ හැක. තෝරා ගැනීමට ඇල්ගොරිතම කිහිපයක් භාවිතයෙන් දත්ත සම්පීඩනය කළ හැකිය. දත්ත සමුදායේ ව්‍යුහය හොඳින් ලේඛනගත කර ඇති අතර සරල ය, දත්ත සාමාන්‍ය ලිපිගොනු වල තීරුවෙන් තීරුවකින් ගබඩා කර ඇත, එබැවින් ඒවා මෙහෙයුම් පද්ධතිය ඇතුළුව සැකසීමට හැකිය.
  • එකතු කරන ලද තොරතුරු සහිත දත්ත සමුදායන්. ඔවුන් විවිධ එකතු කිරීම් ගබඩා කරයි, සාමාන්‍යයෙන්, උපකරණ නාමය සහ කාල පරතරය අනුව කාණ්ඩගත කර ඇත. මතකයේ ඇති දත්ත සමුදායන් පැමිණෙන සෑම පණිවිඩයක් සමඟම ඔවුන්ගේ තත්වය යාවත්කාලීන කරන අතර ඓතිහාසික දත්ත සමුදායන් ඓතිහාසික දත්ත වෙත ප්‍රවේශය වේගවත් කිරීම සඳහා පූර්ව-පරිගණක දත්ත ගබඩා කරයි.
  • අවසාන වශයෙන් ද්වාර ක්රියාවලීන්සේවා යෙදුම් සහ පරිශීලකයන්. Q ඔබට පැමිණෙන පණිවිඩ සම්පූර්ණයෙන්ම අසමමුහුර්තව සැකසීම, දත්ත සමුදායන් හරහා බෙදා හැරීම, ප්රවේශ අයිතිවාසිකම් පරීක්ෂා කිරීම ආදිය ක්රියාත්මක කිරීමට ඉඩ සලසයි. අනෙකුත් දත්ත සමුදායන්හිදී මෙන් පණිවිඩ සීමිත නොවන අතර බොහෝ විට SQL ප්‍රකාශන නොවන බව සලකන්න. බොහෝ විට, SQL ප්‍රකාශනය විශේෂ ශ්‍රිතයක සඟවා ඇති අතර පරිශීලකයා විසින් ඉල්ලා සිටින පරාමිතීන් මත පදනම්ව ගොඩනගා ඇත - කාලය පරිවර්තනය කිරීම, පෙරීම, දත්ත සාමාන්‍යකරණය කිරීම (උදාහරණයක් ලෙස, ලාභාංශ ගෙවූයේ නම් කොටස් මිල සමාන වේ) යනාදිය.

එක් දත්ත වර්ගයක් සඳහා සාමාන්‍ය ගෘහ නිර්මාණ ශිල්පය:

KDB+ දත්ත සමුදාය: මුල්‍යයේ සිට සූත්‍රය 1 දක්වා

වේගය

Q යනු අර්ථකථන භාෂාවක් වුවද එය දෛශික භාෂාවකි. මෙයින් අදහස් කරන්නේ බොහෝ ගොඩනඟන ලද කාර්යයන්, විශේෂයෙන් අංක ගණිතමය ඒවා, අංක, දෛශික, න්‍යාස, ලැයිස්තු - ඕනෑම ආකාරයක තර්ක ලබා ගන්නා අතර ක්‍රමලේඛකයා විසින් අරා මෙහෙයුම් ලෙස වැඩසටහන ක්‍රියාත්මක කිරීමට බලාපොරොත්තු වන බවයි. එවැනි භාෂාවක, ඔබ මූලද්‍රව්‍ය මිලියනයක දෛශික දෙකක් එකතු කරන්නේ නම්, භාෂාව අර්ථකථනය කිරීම තවදුරටත් වැදගත් නොවේ; එකතු කිරීම සුපිරි ප්‍රශස්ත ද්විමය ශ්‍රිතයක් මඟින් සිදු කෙරේ. Q වැඩසටහන් වල කාලයෙන් සිංහ කොටස වැය වන්නේ මෙම මූලික දෛශික ශ්‍රිත භාවිතා කරන වගු සහිත මෙහෙයුම් සඳහා වන බැවින්, ප්‍රතිදානය ඉතා යහපත් මෙහෙයුම් වේගයක් වන අතර, එක් ක්‍රියාවලියකදී පවා විශාල දත්ත ප්‍රමාණයක් සැකසීමට අපට ඉඩ සලසයි. මෙය Python හි ගණිතමය පුස්තකාල වලට සමාන වේ - Python ඉතා මන්දගාමී භාෂාවක් වුවද, එය numpy වැනි විශිෂ්ට පුස්තකාල රාශියක් ඇති අතර එමඟින් සම්පාදනය කරන ලද භාෂාවක වේගයෙන් සංඛ්‍යාත්මක දත්ත සැකසීමට ඔබට ඉඩ සලසයි (මාර්ගය වන විට, numpy දෘෂ්ටිවාදාත්මකව Q ට සමීප වේ. )
 
මීට අමතරව, KX විසින් වගු සැලසුම් කිරීම සහ ඒවා සමඟ වැඩ ප්රශස්ත කිරීම සඳහා ඉතා ප්රවේශමෙන් ප්රවේශ විය. පළමුව, දර්ශක වර්ග කිහිපයකට සහය දක්වයි, ඒවා ගොඩනඟන ලද කාර්යයන් මගින් සහාය දක්වන අතර වගු තීරු වලට පමණක් නොව ඕනෑම දෛශිකයකට ද යෙදිය හැකිය - කණ්ඩායම් කිරීම, වර්ග කිරීම, අද්විතීය ගුණාංග සහ ඓතිහාසික දත්ත සමුදායන් සඳහා විශේෂ කණ්ඩායම් කිරීම. දර්ශකය සරලව යොදන අතර තීරුව/දෛශිකයට මූලද්‍රව්‍ය එකතු කරන විට ස්වයංක්‍රීයව සකසනු ලැබේ. මතකයේ සහ තැටියේ ඇති වගු තීරු සඳහා දර්ශක සමානව සාර්ථකව යෙදිය හැක. QSQL විමසුමක් ක්‍රියාත්මක කරන විට, හැකි නම් දර්ශක ස්වයංක්‍රීයව භාවිතා වේ. දෙවනුව, ඓතිහාසික දත්ත සමඟ වැඩ කිරීම OS ගොනු (මතක සිතියම) ප්රදර්ශනය කිරීමේ යාන්ත්රණය හරහා සිදු කෙරේ. විශාල වගු කිසි විටෙක මතකයට පටවනු නොලැබේ; ඒ වෙනුවට, අවශ්‍ය තීරු සෘජුවම මතකයට සිතියම්ගත කර ඇති අතර ඒවායින් සැබවින්ම පටවනු ලබන්නේ (දර්ශක ද මෙහි උපකාර වන) එම කොටස පමණි. දත්ත මතකයේ තිබේද නැද්ද යන්න ක්‍රමලේඛකයාට වෙනසක් නොකරයි; mmap සමඟ වැඩ කිරීමේ යාන්ත්‍රණය Q හි ගැඹුරේ සම්පූර්ණයෙන්ම සැඟවී ඇත.
 
KDB+ යනු සම්බන්ධතා දත්ත ගබඩාවක් නොවේ; වගු වල අත්තනෝමතික දත්ත අඩංගු විය හැකි අතර, නව මූලද්‍රව්‍ය එකතු කරන විට වගුවේ පේළි අනුපිළිවෙල වෙනස් නොවන අතර විමසුම් ලිවීමේදී භාවිතා කළ හැක. කාල ශ්‍රේණි (හුවමාරු, ටෙලිමෙට්‍රි, සිද්ධි ලඝු) සමඟ වැඩ කිරීම සඳහා මෙම විශේෂාංගය ඉක්මනින් අවශ්‍ය වේ. වගුවේ පේළි , Nth රේඛාව අනුගමනය කරන්නේ කුමන පේළියද යන්න තීරණය කරන්න. වගු එකතු කිරීම් තවත් සරල කර ඇත, උදාහරණයක් ලෙස, මූලද්‍රව්‍ය මිලියන 16000 ක වගුවක VOD.L (Vodafone) ගණුදෙණු 500 ක් සඳහා අවසාන උද්ධෘතය සොයා ගැනීමට තැටියේ තත්පරයක් සහ මතකයේ මිලි තත්පර දහයක් පමණ ගත වේ.
 
කාල එකතුවක උදාහරණයක් - උද්ධෘත වගුව මතකයට සිතියම්ගත කර ඇත, එබැවින් VOD.L සඳහන් කිරීම අවශ්‍ය නොවේ, එහිදී, sym තීරුවේ දර්ශකය සහ දත්ත කාලය අනුව වර්ග කර ඇති බව ව්‍යංගයෙන් භාවිතා වේ. Q හි සියලුම සම්බන්ධ කිරීම් පාහේ සාමාන්‍ය ශ්‍රිතයන් වන අතර, තෝරාගත් ප්‍රකාශනයක කොටසක් නොවේ:

1. aj[`sym`time;select from trade where date=2019.03.26, sym=`VOD.L;select from quote where date=2019.03.26]  

අවසාන වශයෙන්, ආතර් විට්නිගෙන් පටන්ගෙන KX හි ඉංජිනේරුවන් සැබවින්ම කාර්යක්ෂමතාවයෙන් උමතු වී සිටින අතර Q හි සම්මත විශේෂාංගවලින් උපරිම ප්‍රයෝජන ලබා ගැනීමට සහ වඩාත් පොදු භාවිත රටා ප්‍රශස්ත කිරීමට විශාල වෙහෙසක් ගන්නා බව සඳහන් කිරීම වටී.
 

ප්රතිඵලය

KDB+ ව්‍යාපාර අතර ප්‍රධාන වශයෙන් ජනප්‍රිය වන්නේ එහි ඇති සුවිශේෂී බහුකාර්යතාව නිසා ය - එය මතකයේ ඇති දත්ත ගබඩාවක් ලෙසත්, ඓතිහාසික දත්ත ටෙරාබයිට් ගණනක් ගබඩා කිරීමේ දත්ත ගබඩාවක් ලෙසත්, දත්ත විශ්ලේෂණය සඳහා වේදිකාවක් ලෙසත් එකසේ සේවය කරයි. දත්ත සැකසුම් සෘජුවම දත්ත සමුදාය තුළ සිදු වන නිසා, කාර්යයේ ඉහළ වේගය සහ සම්පත් ඉතිරිකිරීම් සාක්ෂාත් කරගනු ලැබේ. දත්ත සමුදා ක්‍රියාකාරකම් සමඟ ඒකාබද්ධ වූ සම්පූර්ණ ක්‍රමලේඛන භාෂාවක් මඟින් අවශ්‍ය ක්‍රියාවලි වල සම්පූර්ණ තොගයම එක් වේදිකාවක් මත ක්‍රියාත්මක කිරීමට ඔබට ඉඩ සලසයි - දත්ත ලැබීමේ සිට පරිශීලක ඉල්ලීම් සැකසීම දක්වා.
 

වැඩි විස්තර සඳහා,

අඩුපාඩු

KDB+/Q හි සැලකිය යුතු අවාසියක් නම් ඉහළ ඇතුල්වීමේ සීමාවයි. භාෂාවට අමුතු වාක්‍ය ඛණ්ඩයක් ඇත, සමහර කාර්යයන් අධික ලෙස පටවා ඇත (අගය, උදාහරණයක් ලෙස, භාවිත අවස්ථා 11 ක් පමණ ඇත). වැදගත්ම දෙය නම්, වැඩසටහන් ලිවීම සඳහා රැඩිකල් ලෙස වෙනස් ප්රවේශයක් අවශ්ය වේ. දෛශික භාෂාවකින්, ඔබ සැම විටම අරා පරිවර්තන සම්බන්ධයෙන් සිතිය යුතුය, සිතියමේ/අඩු කිරීමේ ශ්‍රිතවල ප්‍රභේද කිහිපයක් හරහා සියලුම ලූප ක්‍රියාත්මක කළ යුතුය (ඒවා Q හි adverbs ලෙස හැඳින්වේ), සහ දෛශික මෙහෙයුම් පරමාණුක ඒවා සමඟ ප්‍රතිස්ථාපනය කිරීමෙන් මුදල් ඉතිරි කිරීමට කිසි විටෙකත් උත්සාහ නොකරන්න. උදාහරණයක් ලෙස, අරාවක මූලද්‍රව්‍යයක Nth සිදුවීමේ දර්ශකය සොයා ගැනීමට, ඔබ ලිවිය යුතුය:

1. (where element=vector)[N]  

මෙය C/Java ප්‍රමිතීන්ට අනුව ඉතා අකාර්යක්ෂම ලෙස පෙනුනද (= බූලියන් දෛශිකයක් නිර්මාණය කරයි, එහිදී එහි ඇති මූලද්‍රව්‍යවල සත්‍ය දර්ශක ලබා දෙයි). නමුත් මෙම අංකනය මගින් ප්‍රකාශනයේ අර්ථය වඩාත් පැහැදිලි වන අතර ඔබ මන්දගාමී පරමාණුක ක්‍රියා වෙනුවට වේගවත් දෛශික මෙහෙයුම් භාවිතා කරයි. දෛශික භාෂාවක් සහ අනෙකුත් අය අතර සංකල්පීය වෙනස ක්‍රමලේඛනය සඳහා අනිවාර්ය සහ ක්‍රියාකාරී ප්‍රවේශයන් අතර වෙනස සමඟ සැසඳිය හැකි අතර ඔබ මේ සඳහා සූදානම් විය යුතුය.
 
සමහර පරිශීලකයන් QSQL ගැනද නොසතුටින් සිටිති. කාරණය වන්නේ එය සැබෑ SQL ලෙස පමණක් පෙනේ. යථාර්ථය නම්, එය විමසුම් ප්‍රශස්තකරණයට සහාය නොදක්වන SQL වැනි ප්‍රකාශනවල පරිවර්තකයක් පමණි. පරිශීලකයා විසින්ම ප්‍රශස්ත විමසුම් ලිවිය යුතු අතර, බොහෝ දෙනා සූදානම් නැති Q හි. අනෙක් අතට, ඇත්ත වශයෙන්ම, කළු පෙට්ටි ප්‍රශස්තකාරකයක් මත විශ්වාසය තැබීමට වඩා ඔබට සැමවිටම ප්‍රශස්ත විමසුම ලිවිය හැකිය.
 
ප්ලස් එකක් ලෙස, Q - Q For Mortals පිළිබඳ පොතක් නොමිලේ ලබා ගත හැකිය සමාගමේ වෙබ් අඩවිය, එහි එකතු කරන ලද අනෙකුත් ප්රයෝජනවත් ද්රව්ය ද තිබේ.
 
තවත් විශාල අවාසියක් වන්නේ බලපත්රයේ පිරිවැයයි. එය CPU එකකට වසරකට ඩොලර් දස දහස් ගණනකි. එවැනි වියදම් දැරිය හැක්කේ විශාල සමාගම්වලට පමණි. මෑතකදී, KX සිය බලපත්‍ර ප්‍රතිපත්තිය වඩාත් නම්‍යශීලී කර ඇති අතර Google සහ Amazon clouds හි KDB+ භාවිතා කරන කාලය හෝ කුලියට ගැනීම සඳහා පමණක් ගෙවීමට අවස්ථාව සලසා දෙයි. KX බාගත කිරීම සඳහා ද ඉදිරිපත් කරයි වාණිජ නොවන අරමුණු සඳහා නිදහස් අනුවාදය (බිට් 32 අනුවාදය හෝ ඉල්ලීම මත බිට් 64).
 

තරඟකරුවන්

සමාන මූලධර්ම මත ගොඩනගා ඇති විශේෂිත දත්ත සමුදායන් කිහිපයක් තිබේ - තීරු, මතකය, ඉතා විශාල දත්ත ප්‍රමාණයක් කෙරෙහි අවධානය යොමු කර ඇත. ගැටළුව වන්නේ මේවා විශේෂිත දත්ත සමුදායන් වීමයි. කැපී පෙනෙන උදාහරණයක් වන්නේ Clickhouse ය. මෙම දත්ත සමුදාය තැටියේ දත්ත ගබඩා කිරීම සහ දර්ශකයක් තැනීම සඳහා KDB+ ට බොහෝ සමාන මූලධර්මයක් ඇත; එය සැලකිය යුතු ලෙස නොවුනත් KDB+ ට වඩා වේගයෙන් සමහර විමසුම් සිදු කරයි. නමුත් දත්ත සමුදායක් ලෙස වුවද, Clickhouse යනු KDB+ - web analytics vs අත්තනෝමතික කාල ශ්‍රේණියට වඩා විශේෂිත වේ (මෙම වෙනස ඉතා වැදගත් වේ - එය නිසා, උදාහරණයක් ලෙස, Clickhouse හි වාර්තා ඇණවුම් කිරීම භාවිතා කළ නොහැක). එහෙත්, වඩාත්ම වැදගත් දෙය නම්, ක්ලික්හවුස් සතුව KDB+ හි බහුකාර්යතාවක් නොමැති අතර, එය මුලින්ම වෙනම යෙදුමකට පැටවීම, අත්තනෝමතික SQL ප්‍රකාශන ගොඩනැගීම, විමසුමක අත්තනෝමතික කාර්යයන් යෙදීම, ක්‍රියාවලි නිර්මාණය කිරීම වෙනුවට දත්ත සමුදාය තුළ කෙලින්ම දත්ත සැකසීමට ඉඩ සලසන භාෂාවකි. ඓතිහාසික දත්ත සමුදා කාර්යයන් ක්රියාත්මක කිරීම සම්බන්ධ නොවේ . එබැවින්, KDB+ වෙනත් දත්ත සමුදායන් සමඟ සංසන්දනය කිරීම දුෂ්කර ය; ඒවා ඇතැම් භාවිත අවස්ථා වලදී වඩා හොඳ හෝ සම්භාව්‍ය දත්ත සමුදා කාර්යයන් සම්බන්ධයෙන් වඩා හොඳ විය හැකි නමුත්, තාවකාලික දත්ත සැකසීම සඳහා තවත් සමාන ඵලදායී සහ බහුකාර්ය මෙවලමක් ගැන මම නොදනිමි.
 

පයිතන් අනුකලනය

KDB+ තාක්ෂණය පිළිබඳව නුහුරු පුද්ගලයන් සඳහා භාවිතා කිරීම පහසු කිරීම සඳහා, KX විසින් තනි ක්‍රියාවලියක් තුළ Python සමඟ දැඩි ලෙස ඒකාබද්ධ වීමට පුස්තකාල නිර්මාණය කරන ලදී. ඔබට Q වෙතින් ඕනෑම Python ශ්‍රිතයක් ඇමතීමට හැකිය, නැතහොත් අනෙක් අතට - Python වෙතින් ඕනෑම Q ශ්‍රිතයක් අමතන්න (විශේෂයෙන්, QSQL ප්‍රකාශන). පුස්තකාල අවශ්‍ය නම් (සෑම විටම කාර්යක්‍ෂමතාවය සඳහා නොවේ), දත්ත එක් භාෂාවක ආකෘතියේ සිට තවත් භාෂාවක ආකෘතියට පරිවර්තනය කරයි. එහි ප්‍රතිඵලයක් වශයෙන්, Q සහ Python ඔවුන් අතර මායිම් බොඳ වන තරමට සමීප සහජීවනයක ජීවත් වේ. එහි ප්‍රතිඵලයක් වශයෙන්, එක් අතකින්, ක්‍රමලේඛකයාට ප්‍රයෝජනවත් පයිතන් පුස්තකාල රාශියකට පූර්ණ ප්‍රවේශය ඇත, අනෙක් අතට, පයිතන් සමඟ ඒකාබද්ධ කර ඇති විශාල දත්ත සමඟ වැඩ කිරීම සඳහා ඔහුට වේගවත් පදනමක් ලැබේ, එය යන්ත්‍ර ඉගෙනීමේ යෙදී සිටින අයට විශේෂයෙන් ප්‍රයෝජනවත් වේ. හෝ ආකෘති නිර්මාණය.
 
පයිතන් හි Q සමඟ වැඩ කිරීම:

1. >>> q()  
2.q)trade:([]date:();sym:();qty:())  
3. q)  
4. >>> q.insert('trade', (date(2006,10,6), 'IBM', 200))  
5. k(',0')  
6. >>> q.insert('trade', (date(2006,10,6), 'MSFT', 100))  
7. k(',1')  

යොමු

සමාගමේ වෙබ් අඩවිය - https://kx.com/
සංවර්ධකයින් සඳහා වෙබ් අඩවිය - https://code.kx.com/v2/
මනුෂ්‍යයන් සඳහා Q පොත (ඉංග්‍රීසියෙන්) - https://code.kx.com/q4m3/
kx සේවකයින්ගෙන් KDB+/Q යෙදුම් පිළිබඳ ලිපි - https://code.kx.com/v2/wp/

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

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