KDB+ дерекқоры: қаржыдан Формула 1-ге дейін

KDB+, компания өнімі KX тар шеңберлерде кеңінен танымал, уақыттық қатарларды және олардың негізінде аналитикалық есептеулерді сақтауға арналған, өте жылдам, бағаналы деректер базасы. Бастапқыда ол қаржы индустриясында өте танымал болды (және болып табылады) - оны барлық 10 ең жақсы инвестициялық банктер және көптеген танымал хедж-қорлар, биржалар және басқа ұйымдар пайдаланады. Жақында KX тұтынушылар базасын кеңейтуді шешті және қазір уақыт бойынша немесе басқа жолмен ұйымдастырылған деректердің үлкен көлемі бар басқа салаларда шешімдер ұсынады - телекоммуникация, биоинформатика, өндіріс және т.б. Олар сондай-ақ Формула 1-де Aston Martin Red Bull Racing командасының серіктесі болды, онда олар автокөлік датчиктерінен деректерді жинауға және өңдеуге және жел туннелі сынақтарын талдауға көмектеседі. Бұл мақалада мен KDB+-тің қандай мүмкіндіктері оны өте тиімді ететінін, компаниялар неге оған көп ақша жұмсауға дайын екенін және ақырында, неге бұл шын мәнінде дерекқор емес екенін айтқым келеді.
 
KDB+ дерекқоры: қаржыдан Формула 1-ге дейін
 
Бұл мақалада мен сізге KDB+ деген не, оның қандай мүмкіндіктері мен шектеулері бар және оның үлкен көлемдегі деректерді өңдеуді қалайтын компаниялар үшін қандай пайдасы бар екенін жалпы айтып беруге тырысамын. Мен KDB+ бағдарламасын іске асырудың егжей-тегжейіне немесе оның Q бағдарламалау тілінің егжей-тегжейіне тоқталмаймын.Бұл екі тақырып өте кең және бөлек мақалаларға лайық. Осы тақырыптар бойынша көптеген ақпаратты code.kx.com сайтынан табуға болады, соның ішінде Q - Q For Mortals туралы кітап (төмендегі сілтемені қараңыз).

Кейбір терминдер

  • Жадтағы мәліметтер қоры. Жылдам қол жеткізу үшін деректерді жедел жадта сақтайтын дерекқор. Мұндай деректер қорының артықшылықтары анық, бірақ кемшіліктері деректердің жоғалу мүмкіндігі және серверде көп жадтың болуы қажет.
  • Бағаналы мәліметтер базасы. Жазба бойынша жазба емес, деректер баған бойынша сақталатын дерекқор. Мұндай деректер қорының басты артықшылығы - бір бағандағы деректер дискіде және жадта бірге сақталады, бұл оған қол жеткізуді айтарлықтай жылдамдатады. Сұрауда пайдаланылмаған бағандарды жүктеудің қажеті жоқ. Негізгі кемшілігі - жазбаларды өзгерту және жою қиын.
  • Уақыт қатары. Күн немесе уақыт бағаны бар деректер. Әдетте, уақытты реттеу мұндай деректер үшін маңызды, осылайша қай жазба ағымдағы жазбаның алдында немесе кейін екенін оңай анықтауға немесе нәтижелері жазбалардың ретіне тәуелді функцияларды қолдануға болады. Классикалық дерекқорлар мүлдем басқа принцип бойынша құрастырылған – жазбалар жиынтығын жиынтық ретінде көрсету, мұнда жазбалардың реті, негізінен, анықталмаған.
  • Вектор. KDB+ контекстінде бұл бір атомдық типтегі элементтердің тізімі, мысалы, сандар. Басқаша айтқанда, элементтер массиві. Массивтер, тізімдерден айырмашылығы, векторлық процессор нұсқаулары арқылы жинақы түрде сақталуы және өңделуі мүмкін.

 

Тарихи негіз

KX 1993 жылы бұрын Morgan Stanley банкінде A+ тілінде жұмыс істеген Артур Уитнидің негізін қалады, APL - өте ерекше және бір уақытта қаржы әлемінде танымал тілдің мұрагері. Әрине, КХ-да Артур сол рухта жалғастырып, радикалды минимализм идеяларын басшылыққа ала отырып, векторлық-функционалдық К тілін жасады. 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+ бағдарламасында минимум дене қимылдарымен экстремалды тиімділік философиясын іске асырды. Тіл.Қ-ның үстіне Q деп аталатын анағұрлым ыңғайлы нұсқасы қосылды. Q сонымен қатар SQL-тің белгілі бір диалектісіне қолдау қосты - 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 процестері. Бағдарламалаушы теңгерімдеу, басымдықтарды анықтау, ақауларға төзімділік, қол жеткізу құқықтары, квоталар және негізінен оның жүрегі қалаған кез келген алгоритмді жүзеге асыруда толық еркіндікке ие. Мұндағы басты мәселе - мұның бәрін өзіңіз жүзеге асыруға тура келеді.
 
Мысал ретінде мен бізде қандай процестер бар екенін тізімдеймін. Олардың барлығы белсенді түрде пайдаланылады және бірге жұмыс істейді, ондаған әртүрлі дерекқорларды біріктіреді, бірнеше көздерден деректерді өңдейді және жүздеген пайдаланушылар мен қолданбаларға қызмет көрсетеді.

  • Деректер көздеріне қосқыштар (бергіш). Бұл процестер әдетте Q ішіне жүктелетін сыртқы кітапханаларды пайдаланады. Q ішіндегі C интерфейсі өте қарапайым және кез келген C/C++ кітапханасы үшін прокси функцияларын оңай жасауға мүмкіндік береді. Q бір уақытта барлық еуропалық қор биржаларынан FIX хабарламаларының тасқынын өңдеуге жеткілікті жылдам.
  • Деректер таратушылар (тикер зауыты), қосқыштар мен тұтынушылар арасындағы аралық буын қызметін атқарады. Сонымен бірге олар кіріс деректерді арнайы екілік журналға жазады, бұл тұтынушылардың қосылым жоғалуынан немесе қайта іске қосылуынан сенімділігін қамтамасыз етеді.
  • Жадтағы мәліметтер қоры (rdb). Бұл дерекқорлар жадта сақтау арқылы өңделмеген, жаңа деректерге ең жылдам қол жеткізуді қамтамасыз етеді. Әдетте, олар күндізгі уақытта кестелерде деректерді жинақтайды және түнде оларды қалпына келтіреді.
  • Persist дерекқоры (pdb). Бұл дерекқорлар бүгінгі деректердің тарихи дерекқорда сақталуын қамтамасыз етеді. Әдетте, rdb-ден айырмашылығы, олар деректерді жадта сақтамайды, бірақ күндізгі уақытта дискідегі арнайы кэшті пайдаланады және деректерді түн ортасында тарихи деректер базасына көшіреді.
  • Тарихи деректер қоры (hdb). Бұл деректер базасы өткен күндер, айлар және жылдардағы деректерге қол жеткізуді қамтамасыз етеді. Олардың мөлшері (күнмен) тек қатты дискілердің өлшемімен шектеледі. Деректерді кез келген жерде, атап айтқанда қол жеткізуді жылдамдату үшін әртүрлі дискілерде орналастыруға болады. Таңдау үшін бірнеше алгоритмдерді пайдаланып деректерді қысуға болады. Мәліметтер қорының құрылымы жақсы құжатталған және қарапайым, деректер кәдімгі файлдарда бағандар бойынша сақталады, сондықтан оларды өңдеуге болады, соның ішінде операциялық жүйенің көмегімен.
  • Жиынтық ақпараты бар мәліметтер базасы. Олар әдетте құрал атауы және уақыт аралығы бойынша топтастырылған әртүрлі агрегаттарды сақтайды. Жадтағы дерекқорлар әрбір кіріс хабарламасымен олардың күйін жаңартады, ал тарихи дерекқорлар тарихи деректерге қол жеткізуді жылдамдату үшін алдын ала есептелген деректерді сақтайды.
  • Соңында, шлюз процестеріқолданбалар мен пайдаланушыларға қызмет көрсету. Q кіріс хабарламаларды толығымен асинхронды өңдеуді жүзеге асыруға, оларды мәліметтер базасы бойынша таратуға, қол жеткізу құқықтарын тексеруге және т.б. Хабарламалардың шектелмейтінін және көбінесе басқа дерекқорлардағыдай SQL өрнектері емес екенін ескеріңіз. Көбінесе SQL өрнегі арнайы функцияда жасырылады және пайдаланушы сұраған параметрлер негізінде құрастырылады - уақыт түрлендіріледі, сүзіледі, деректер қалыпқа келтіріледі (мысалы, дивидендтер төленген жағдайда акция бағасы теңестіріледі) және т.б.

Бір деректер түріне арналған типтік архитектура:

KDB+ дерекқоры: қаржыдан Формула 1-ге дейін

Жылдамдық

Q интерпретацияланатын тіл болғанымен, ол сонымен қатар векторлық тіл болып табылады. Бұл көптеген кіріктірілген функциялар, әсіресе арифметикалық функциялар кез келген түрдегі аргументтерді қабылдайтынын білдіреді - сандар, векторлар, матрицалар, тізімдер - және бағдарламашы бағдарламаны массив операциялары ретінде жүзеге асырады деп күтілуде. Мұндай тілде миллион элементтің екі векторын қоссаңыз, тілдің түсіндірілуі енді маңызды емес, қосу өте оңтайландырылған екілік функция арқылы орындалады. Q бағдарламаларындағы уақыттың басым бөлігі осы негізгі векторланған функцияларды пайдаланатын кестелермен операцияларға жұмсалатындықтан, нәтиже өте лайықты жұмыс жылдамдығы болып табылады, бұл бізге бір процесте деректердің үлкен көлемін өңдеуге мүмкіндік береді. Бұл Python тіліндегі математикалық кітапханаларға ұқсас – Python тілі өте баяу тіл болғанымен, оның құрастырылған тілдің жылдамдығымен сандық деректерді өңдеуге мүмкіндік беретін numpy сияқты көптеген тамаша кітапханалары бар (айтпақшы, numpy идеологиялық жағынан Q-ға жақын. ).
 
Сонымен қатар, KX кестелерді жобалауға және олармен жұмысты оңтайландыруға өте мұқият қарады. Біріншіден, кірістірілген функциялармен қамтамасыз етілген және тек кесте бағандарына ғана емес, сонымен қатар кез келген векторларға – топтастыру, сұрыптау, бірегейлік атрибуты және тарихи дерекқорлар үшін арнайы топтастыруға да қолдануға болатын индекстердің бірнеше түріне қолдау көрсетіледі. Индекс қарапайым қолданылады және бағанға/векторға элементтерді қосқанда автоматты түрде реттеледі. Индекстерді жадта да, дискіде де кесте бағандарына бірдей сәтті қолдануға болады. QSQL сұрауын орындау кезінде мүмкін болса, индекстер автоматты түрде пайдаланылады. Екіншіден, тарихи деректермен жұмыс ОЖ файлдарын көрсету механизмі (жад картасы) арқылы жүзеге асырылады. Үлкен кестелер ешқашан жадқа жүктелмейді; оның орнына қажетті бағандар тікелей жадқа салыстырылады және олардың қажетті бөлігі ғана жүктеледі (индекстер де осында көмектеседі). Бағдарламалаушы үшін деректердің жадта болуы немесе жоқтығы маңызды емес, mmap-пен жұмыс істеу механизмі Q тереңдігінде толығымен жасырылған.
 
KDB+ реляциялық деректер базасы емес; кестелерде еркін деректер болуы мүмкін, ал кестедегі жолдардың реті жаңа элементтер қосылған кезде өзгермейді және сұрауларды жазу кезінде пайдаланылуы мүмкін және пайдаланылуы керек. Бұл мүмкіндік уақыттық қатарлармен (алмасу деректері, телеметрия, оқиғалар журналдары) жұмыс істеу үшін шұғыл қажет, өйткені егер деректер уақыт бойынша сұрыпталған болса, пайдаланушы бірінші немесе соңғы жолды немесе N табу үшін SQL трюктерін пайдаланудың қажеті жоқ. кестедегі жолдар, N-ші жолдан кейінгі жолды анықтау және т.б. Кестені біріктіру одан әрі жеңілдетілді, мысалы, 16000 миллион элементтен тұратын кестедегі 500 XNUMX VOD.L (Vodafone) транзакциялары үшін соңғы бағаны табу дискіде шамамен бір секундты және жадта ондаған миллисекундтарды алады.
 
Уақытты біріктірудің мысалы - тырнақша кестесі жадқа сәйкестендіріледі, сондықтан VOD.L-ді көрсетудің қажеті жоқ, мұнда сим бағанындағы индекс және деректер уақыт бойынша сұрыпталған факті жасырын түрде қолданылады. 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 тілінде үстеу деп аталады) және ешқашан векторлық операцияларды атомдық операциялармен ауыстыру арқылы ақша үнемдеуге тырыспаңыз. Мысалы, массивтегі элементтің N-ші пайда болу индексін табу үшін мынаны жазу керек:

1. (where element=vector)[N]  

бірақ бұл C/Java стандарттары бойынша өте тиімсіз болып көрінеді (= логикалық вектор жасайды, онда ондағы элементтердің шынайы индекстерін қайтарады). Бірақ бұл белгілеу өрнектің мағынасын айқынырақ етеді және сіз баяу атомдық операциялардың орнына жылдам векторлық операцияларды пайдаланасыз. Векторлық тілдің басқа тілден концептуалды айырмашылығы бағдарламалаудың императивті және функционалдық тәсілдері арасындағы айырмашылықпен салыстыруға болады және сіз бұған дайын болуыңыз керек.
 
Кейбір пайдаланушылар QSQL-ге де риза емес. Мәселе мынада, ол тек нақты SQL-ге ұқсайды. Шындығында бұл сұрауды оңтайландыруды қолдамайтын SQL тәрізді өрнектердің аудармашысы ғана. Пайдаланушы оңтайлы сұрауларды өзі және көпшілігі дайын емес Q тілінде жазуы керек. Екінші жағынан, әрине, қара жәшік оптимизаторына сенбей, оңтайлы сұрауды өзіңіз жаза аласыз.
 
Плюс ретінде Q - Q For Mortals кітабын тегін алуға болады компанияның сайты, сонымен қатар онда жиналған басқа да көптеген пайдалы материалдар бар.
 
Тағы бір үлкен кемшілік – лицензияның құны. Бұл бір процессорға жылына ондаған мың долларды құрайды. Мұндай шығындарды тек ірі компаниялар ғана көтере алады. Жақында KX лицензиялау саясатын икемді етіп жасады және Google және Amazon бұлттарында KDB+ жалға алу немесе пайдалану уақыты үшін ғана төлеу мүмкіндігін береді. KX сонымен қатар жүктеп алуды ұсынады коммерциялық емес мақсаттарға арналған тегін нұсқасы (32 биттік нұсқа немесе сұраныс бойынша 64 бит).
 

Бәсекелестер

Ұқсас принциптерге негізделген бірнеше мамандандырылған дерекқорлар бар - бағаналы, жадтағы, деректердің өте үлкен көлеміне бағытталған. Мәселе мынада, бұл арнайы мәліметтер базасы. Керемет мысал - Clickhouse. Бұл дерекқордың дискіде деректерді сақтау және индекс құру үшін KDB+ принципіне өте ұқсас принципі бар; ол айтарлықтай болмаса да, кейбір сұрауларды KDB+ қарағанда жылдамырақ орындайды. Бірақ дерекқор ретінде де Clickhouse KDB+ - веб-аналитикаға және кез келген уақыт қатарларына қарағанда мамандандырылған (бұл айырмашылық өте маңызды - осыған байланысты, мысалы, Clickhouse-да жазбаларды ретке келтіруді пайдалану мүмкін емес). Бірақ, ең бастысы, Clickhouse-да KDB+ тілінің әмбебаптығы жоқ, ол деректерді алдымен бөлек қолданбаға жүктеуге, еркін SQL өрнектерін құруға, сұрауда ерікті функцияларды қолдануға, процестерді құруға емес, тікелей дерекқорда өңдеуге мүмкіндік беретін тіл. тарихи деректер базасының функцияларын орындауға байланысты емес. Сондықтан, KDB+ басқа дерекқорлармен салыстыру қиын; олар белгілі бір пайдалану жағдайларында жақсырақ болуы мүмкін немесе классикалық дерекқор тапсырмаларына қатысты жақсырақ болуы мүмкін, бірақ мен уақытша деректерді өңдеуге арналған басқа бірдей тиімді және әмбебап құралды білмеймін.
 

Python интеграциясы

KDB+ технологиясын білмейтін адамдар үшін пайдалануды жеңілдету үшін KX бір процесс ішінде Python-мен тығыз біріктіру үшін кітапханалар жасады. Кез келген Python функциясын Q-дан шақыруға болады немесе керісінше - Python-дан кез келген Q функциясын шақыруға болады (атап айтқанда, QSQL өрнектері). Кітапханалар қажет болған жағдайда (әрдайым тиімділік үшін емес) деректерді бір тілдің форматынан екіншісінің форматына түрлендіреді. Нәтижесінде Q және Python жақын симбиозда өмір сүреді, олардың арасындағы шекаралар бұлыңғыр болады. Нәтижесінде, бағдарламашы, бір жағынан, көптеген пайдалы Python кітапханаларына толық қол жеткізе алады, екінші жағынан, ол Python-ға біріктірілген үлкен деректермен жұмыс істеу үшін жылдам база алады, бұл әсіресе машиналық оқытумен айналысатындар үшін пайдалы. немесе модельдеу.
 
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 For Mortals кітабы (ағылшын тілінде) - https://code.kx.com/q4m3/
kx қызметкерлерінен KDB+/Q қолданбалары туралы мақалалар - https://code.kx.com/v2/wp/

Ақпарат көзі: www.habr.com

пікір қалдыру