KDB + baz done: soti nan finans nan fòmil 1

KDB +, pwodwi konpayi KX se yon lajman li te ye nan ti sèk etwat, trè vit, baz done kolon ki fèt pou estoke seri tan ak kalkil analyse ki baze sou yo. Okòmansman, li te (e li se) trè popilè nan endistri finansye a - tout 10 pi gwo bank envestisman ak anpil byen li te ye lizyè fon, echanj ak lòt òganizasyon sèvi ak li. Dènyèman, KX deside elaji baz kliyan li yo e kounye a, ofri solisyon nan lòt zòn kote gen yon gwo kantite done, òganize pa tan oswa otreman - telecom, bioinformatics, fabrikasyon, elatriye. Yo menm tou yo te vin yon patnè nan ekip Aston Martin Red Bull Racing nan Fòmil 1, kote yo ede kolekte ak trete done ki sòti nan detèktè machin yo ak analize tès van tinèl. Nan atik sa a, mwen vle di ou ki karakteristik KDB + fè li super-pèfòmans, poukisa konpayi yo vle depanse anpil lajan sou li, epi finalman, poukisa li pa reyèlman yon baz done.
 
KDB + baz done: soti nan finans nan fòmil 1
 
Nan atik sa a mwen pral eseye di w an jeneral kisa KDB+ ye, ki kapasite ak limit li genyen, ak ki benefis li genyen pou konpayi ki vle trete gwo kantite done. Mwen pa pral antre nan detay yo sou aplikasyon KDB+ oswa detay yo nan lang pwogramasyon Q li yo. Tou de sijè sa yo trè laj epi yo merite atik separe. Ou ka jwenn anpil enfòmasyon sou sijè sa yo nan code.kx.com, tankou yon liv sou Q - Q For Mortals (gade lyen ki anba a).

Kèk tèm

  • Baz done nan memwa. Yon baz done ki estoke done nan RAM pou aksè pi vit. Avantaj ki genyen nan yon baz done yo klè, men dezavantaj yo se posiblite pou pèt done ak bezwen pou gen anpil memwa sou sèvè a.
  • Baz done kolòn. Yon baz done kote done yo estoke kolòn pa kolòn olye ke dosye pa dosye. Avantaj prensipal la nan yon baz done sa a se ke done ki sòti nan yon kolòn yo estoke ansanm sou disk ak nan memwa, ki siyifikativman akselere aksè a li. Pa gen okenn bezwen chaje kolòn ki pa itilize nan rechèch la. Dezavantaj prensipal la se ke li difisil pou modifye ak efase dosye yo.
  • Seri tan. Done ki gen yon kolòn dat oswa lè. Tipikman, lòd tan enpòtan pou done sa yo, pou ou ka fasilman detèmine ki dosye ki anvan oswa ki swiv youn aktyèl la, oswa pou aplike fonksyon ki gen rezilta depann sou lòd dosye yo. Baz done klasik yo bati sou yon prensip konplètman diferan - ki reprezante yon koleksyon dosye kòm yon seri, kote lòd dosye yo, nan prensip, pa defini.
  • Vektè. Nan kontèks KDB +, sa a se yon lis eleman nan menm kalite atomik, pou egzanp, nimewo. Nan lòt mo, yon etalaj de eleman. Etalaj, kontrèman ak lis, yo ka estoke konpak ak trete lè l sèvi avèk enstriksyon vektè processeur.

 

Istorik enfòmasyon

KX te fonde an 1993 pa Arthur Whitney, ki te deja travay nan Morgan Stanley Bank sou lang A+, siksesè nan APL - yon lang trè orijinal ak nan yon moman popilè nan mond finansye a. Natirèlman, nan KX, Arthur te kontinye nan menm lespri a epi li te kreye lang vektè-fonksyonèl K, gide pa lide minimalist radikal. K pwogram yo sanble ak yon melanj de ponktiyasyon ak karaktè espesyal, siyifikasyon an nan siy ak fonksyon depann de kontèks la, epi chak operasyon pote pi plis siyifikasyon pase sa li fè nan lang pwogramasyon konvansyonèl yo. Akòz sa a, yon pwogram K pran yon espas minim—kèk liy ka ranplase paj tèks nan yon lang vèbal tankou Java—epi se yon aplikasyon super-konsantre nan algorithm la.
 
Yon fonksyon nan K ki aplike pi fò nan dèlko analizeur LL1 selon yon gramè bay:

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),"]";""]]}  

 Arthur enkòpore filozofi sa a nan efikasite ekstrèm ak yon minimòm de mouvman kò nan KDB +, ki te parèt an 2003 (mwen panse ke li klè kounye a ki kote lèt K a nan non an soti) epi li pa gen anyen plis pase yon entèprèt nan katriyèm vèsyon an nan K a. Yo te ajoute yon vèsyon ki pi fasil pou itilize anlè K K ki rele Q. Q te ajoute tou sipò pou yon dyalèk espesifik SQL - QSQL, ak entèprèt la - sipò pou tab kòm yon kalite done sistèm, zouti pou travay ak tab. nan memwa ak sou disk, elatriye.
 
Se konsa, nan pèspektiv yon itilizatè, KDB + se tou senpleman yon entèprèt lang Q ak sipò pou tab ak ekspresyon SQL ki tankou LINQ-style soti nan C#. Sa a se diferans ki pi enpòtan ant KDB + ak lòt baz done ak prensipal avantaj konpetitif li yo, ki souvan neglije. Sa a se pa yon baz done + lang oksilyè ki andikape, men se yon langaj pwogramasyon ki pwisan + bati-an sipò pou fonksyon baz done. Distenksyon sa a pral jwe yon wòl desizif nan lis tout benefis ki genyen nan KDB +. Pa egzanp…
 

gwosè

Dapre estanda modèn, KDB + se tou senpleman mikwoskopik nan gwosè. Li literalman yon sèl sub-megaocte ègzèkutabl dosye ak yon ti dosye tèks ak kèk fonksyon sistèm. An reyalite - mwens pase yon megabyte, ak pou pwogram sa a konpayi peye dè dizèn de milye de dola nan yon ane pou yon sèl processeur sou sèvè a.

  • Gwosè sa a pèmèt KDB + santi bon sou nenpòt pyès ki nan konpitè - soti nan yon mikwo-òdinatè Pi rive nan sèvè ki gen terabyte memwa. Sa a pa afekte fonksyonalite a nan okenn fason; Anplis, Q kòmanse imedyatman, ki pèmèt li dwe itilize, pami lòt bagay, kòm yon lang scripting.
  • Nan gwosè sa a, entèprèt Q a antre nèt nan kachèt processeur a, ki akselere ekzekisyon pwogram lan.
  • Avèk gwosè sa a nan dosye ègzèkutabl la, pwosesis Q a pran espas neglijab nan memwa; ou ka kouri dè santèn de yo. Anplis, si sa nesesè, Q ka opere ak dè dizèn oswa dè santèn de jigokte memwa nan yon sèl pwosesis.

Varyasyon

Q se gwo pou yon pakèt aplikasyon. Pwosesis Q ka aji kòm yon baz done istorik epi bay aksè rapid nan terabyte enfòmasyon. Pou egzanp, nou gen plizyè douzèn baz done istorik, nan kèk nan yo ki yon sèl jou san konprese nan done pran plis pase 100 jigokte. Sepandan, anba restriksyon rezonab, yon rechèch nan baz done a pral ranpli nan dè dizèn a dè santèn de milisgond. An jeneral, nou gen yon tan inivèsèl pou demann itilizatè - 30 segonn - epi li travay trè raman.
 
Q ta ka menm fasilman yon baz done nan memwa. Nouvo done yo ajoute nan tab nan memwa tèlman vit ke demann itilizatè yo se faktè ki limite. Done nan tab yo estoke nan kolòn, ki vle di nenpòt operasyon sou yon kolòn pral sèvi ak kachèt processeur a nan tout kapasite li. Anplis de sa, KX te eseye aplike tout operasyon debaz tankou aritmetik atravè enstriksyon vektè nan processeur a, maksimize vitès yo. Q kapab tou fè travay ki pa tipik pou baz done - pou egzanp, trete done difizyon ak kalkile nan "tan reyèl" (ak yon reta soti nan dè dizèn de milisgond ak plizyè segonn depann sou travay la) divès kalite fonksyon agrégasyon pou enstriman finansye pou diferan tan. entèval oswa bati yon modèl nan enfliyans nan tranzaksyon pafè nan mache a ak pote soti nan pwofil li yo prèske imedyatman apre fini li yo. Nan travay sa yo, pi souvan reta prensipal la se pa Q, men bezwen nan senkronize done ki soti nan diferan sous. Se gwo vitès reyalize akòz lefèt ke done yo ak fonksyon yo ki trete yo nan yon sèl pwosesis, ak pwosesis redwi a egzekite ekspresyon QSQL plizyè ak rantre, ki pa entèprete, men egzekite nan kòd binè.
 
Finalman, ou ka ekri nenpòt pwosesis sèvis nan Q. Pou egzanp, Gateway pwosesis ki otomatikman distribye demann itilizatè yo nan baz done ki nesesè yo ak sèvè yo. Pwogramè a gen libète konplè pou aplike nenpòt algorithm pou balanse, priyorite, tolerans fòt, dwa aksè, kota ak fondamantalman nenpòt lòt bagay kè l 'dezi. Pwoblèm prensipal la isit la se ke ou pral oblije aplike tout bagay sa yo tèt ou.
 
Kòm yon egzanp, mwen pral lis ki kalite pwosesis nou genyen. Yo tout yo aktivman itilize epi travay ansanm, konbine plizyè douzèn baz done diferan nan yon sèl, trete done ki soti nan plizyè sous ak sèvi dè santèn de itilizatè ak aplikasyon.

  • Konektè (feedhandler) nan sous done. Pwosesis sa yo anjeneral itilize bibliyotèk ekstèn ki chaje nan Q. Koòdone C nan Q a trè senp epi li pèmèt ou fasil kreye fonksyon prokurasyon pou nenpòt bibliyotèk C/C++. Q se ase vit pou okipe, pou egzanp, trete yon inondasyon mesaj FIX ki soti nan tout echanj stock Ewopeyen an ansanm.
  • Distribitè done (tickerplant), ki sèvi kòm yon lyen entèmedyè ant konektè ak konsomatè yo. An menm tan an, yo ekri done fèk ap rantre nan yon jounal binè espesyal, bay solidite pou konsomatè yo kont pèt koneksyon oswa rekòmanse.
  • Nan memwa baz done (rdb). Baz done sa yo bay aksè ki pi rapid posib nan done anvan tout koreksyon, fre lè yo estoke li nan memwa. Tipikman, yo akimile done nan tab pandan jounen an epi reset yo nan mitan lannwit.
  • Persiste baz done (pdb). Baz done sa yo asire ke done jodi a yo estoke nan yon baz done istorik. Kòm yon règ, kontrèman ak rdb, yo pa estoke done nan memwa, men sèvi ak yon kachèt espesyal sou disk pandan jounen an epi kopye done yo a minwi nan baz done istorik la.
  • Baz done istorik (hdb). Baz done sa yo bay aksè a done pou jou, mwa ak ane anvan yo. Gwosè yo (nan jou) limite sèlman pa gwosè a nan kondui di yo. Done yo ka lokalize nenpòt kote, an patikilye sou diferan disk pou pi vit aksè. Li posib pou konprese done lè l sèvi avèk plizyè algoritm yo chwazi nan. Se estrikti nan baz done a byen dokimante ak senp, done yo estoke kolòn pa kolòn nan dosye regilye, pou yo ka trete, ki gen ladan pa vle di nan sistèm nan fonksyone.
  • Baz done ak enfòmasyon total. Yo estoke agrégasyon divès kalite, anjeneral ak, gwoupe pa non enstriman ak entèval tan. Baz done ki nan memwa mete ajou eta yo ak chak mesaj k ap fèk ap rantre, epi baz done istorik yo estoke done pre-konpile pou akselere aksè a done istorik yo.
  • Finalman pwosesis pòtay yosèvis aplikasyon ak itilizatè yo. Q pèmèt ou aplike pwosesis konplètman asynchrone nan mesaj fèk ap rantre, distribye yo atravè baz done, tcheke dwa aksè, elatriye. Remake byen ke mesaj yo pa limite epi pi souvan yo pa ekspresyon SQL, menm jan se ka a nan lòt baz done. Pi souvan, ekspresyon SQL kache nan yon fonksyon espesyal epi li konstwi baze sou paramèt itilizatè a mande - tan konvèti, filtre, done nòmalize (pa egzanp, pri stock la egalize si yo te peye dividann), elatriye.

Achitekti tipik pou yon sèl kalite done:

KDB + baz done: soti nan finans nan fòmil 1

Speed

Malgre ke Q se yon lang entèprete, li se tou yon lang vektè. Sa vle di ke anpil fonksyon entegre, patikilyèman aritmetik, pran agiman nenpòt fòm - nimewo, vektè, matris, lis - epi pwogramè a espere aplike pwogram nan kòm operasyon etalaj. Nan yon lang konsa, si ou ajoute de vektè nan yon milyon eleman, li pa enpòtan ankò ke lang nan entèprete; adisyon a pral fèt pa yon fonksyon binè super-optimize. Depi lyon an nan tan an nan pwogram Q yo te depanse nan operasyon ak tab ki sèvi ak fonksyon sa yo vektè debaz, pwodiksyon an se yon vitès opere trè desan, ki pèmèt nou trete yon gwo kantite done menm nan yon sèl pwosesis. Sa a se menm jan ak bibliyotèk matematik nan Python - byenke Python tèt li se yon lang trè dousman, li gen anpil bibliyotèk ekselan tankou numpy ki pèmèt ou trete done nimerik nan vitès la nan yon lang konpile (nan chemen an, numpy se ideolojikman pre Q. ).
 
Anplis de sa, KX te pran yon apwòch anpil atansyon nan konsepsyon tab ak optimize travay avèk yo. Premyèman, yo sipòte plizyè kalite endèks, ki sipòte pa fonksyon entegre epi yo ka aplike pa sèlman nan kolòn tab, men tou, nan nenpòt vektè - gwoupman, klasman, atribi inik ak gwoupman espesyal pou baz done istorik. Se endèks la aplike tou senpleman epi li otomatikman ajiste lè ajoute eleman nan kolòn / vektè a. Endèks yo ka egalman avèk siksè aplike nan kolòn tab tou de nan memwa ak sou disk. Lè w ap egzekite yon rechèch QSQL, endèks yo itilize otomatikman si sa posib. Dezyèmman, travay ak done istorik fèt atravè mekanis pou montre OS dosye (memwa kat). Gwo tab yo pa janm chaje nan memwa; olye de sa, kolòn ki nesesè yo trase dirèkteman nan memwa epi sèlman yon pati nan yo aktyèlman chaje (endèks tou ede isit la) ki nesesè. Li pa fè okenn diferans pou pwogramè a si done yo nan memwa oswa ou pa; mekanis pou travay ak mmap konplètman kache nan pwofondè Q.
 
KDB+ se pa yon baz done relasyon; tab yo ka genyen done abitrè, pandan y ap lòd ranje nan tablo a pa chanje lè yo ajoute nouvo eleman epi yo ka epi yo ta dwe itilize lè w ap ekri demann. Karakteristik sa a nesesè ijan pou travay ak seri tan (done ki soti nan echanj, telemetri, mòso bwa evènman), paske si done yo klase pa tan, Lè sa a, itilizatè a pa bezwen sèvi ak okenn ke trik nouvèl SQL jwenn premye oswa dènye ranje oswa N. ranje nan tablo a, detèmine ki liy ki swiv liy Nyèm lan, elatriye. Tablo rantre yo senplifye menm pi lwen, pou egzanp, jwenn dènye quote pou 16000 tranzaksyon VOD.L (Vodafone) nan yon tablo 500 milyon eleman pran apeprè yon segonn sou disk ak dè dizèn de milisgond nan memwa.
 
Yon egzanp yon tan rantre - tab quote la trase nan memwa, kidonk pa gen okenn nesesite pou presize VOD.L nan kote, endèks la sou kolòn sym la ak lefèt ke done yo klase pa tan yo implicitement itilize. Prèske tout rantre nan Q yo se fonksyon regilye, yo pa fè pati yon ekspresyon chwazi:

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

Finalman, li vo anyen ke enjenyè yo nan KX, kòmanse ak Arthur Whitney tèt li, yo vrèman obsede ak efikasite epi yo ale nan gwo longè pou jwenn pi plis nan karakteristik estanda Q a ak optimize modèl yo itilizasyon ki pi komen.
 

Total

KDB+ se popilè nan mitan biznis sitou akòz adaptabilite eksepsyonèl li yo - li sèvi egalman byen kòm yon baz done nan memwa, kòm yon baz done pou estoke teraocte nan done istorik, ak kòm yon platfòm pou analiz done. Akòz lefèt ke pwosesis done rive dirèkteman nan baz done a, gwo vitès nan travay ak ekonomi resous yo reyalize. Yon langaj pwogramasyon konplè ki entegre ak fonksyon baz done pèmèt ou aplike tout pil pwosesis ki nesesè yo sou yon platfòm - soti nan resevwa done pou trete demann itilizatè yo.
 

Pou plis enfòmasyon,

Limit

Yon dezavantaj enpòtan nan KDB + / Q se papòt la antre segondè. Lang lan gen yon sentaks etranj, kèk fonksyon yo twò chaje (valè, pou egzanp, gen apeprè 11 ka itilize). Sa ki pi enpòtan, li mande pou yon apwòch radikalman diferan pou ekri pwogram yo. Nan yon lang vektè, ou dwe toujou panse an tèm de transfòmasyon etalaj, aplike tout bouk atravè plizyè variants nan fonksyon kat/redwi (ki rele advèb nan Q), epi pa janm eseye ekonomize lajan lè w ranplase operasyon vektè yo ak operasyon atomik yo. Pou egzanp, pou jwenn endèks Nyèm ensidans yon eleman nan yon etalaj, ou ta dwe ekri:

1. (where element=vector)[N]  

byenke sa a sanble fò anpil efikas pa estanda C/Java (= kreye yon vektè boolean, kote retounen endèks yo vre nan eleman ki nan li). Men, notasyon sa a fè siyifikasyon ekspresyon an pi klè epi ou itilize operasyon vektè rapid olye pou yo ralanti operasyon atomik yo. Diferans konsèp ant yon lang vektè ak lòt moun konparab ak diferans ki genyen ant apwòch enperatif ak fonksyonèl nan pwogramasyon, epi ou bezwen prepare pou sa.
 
Gen kèk itilizatè ki pa kontan tou ak QSQL. Pwen an se ke li sèlman sanble ak SQL reyèl. An reyalite, li se jis yon entèprèt nan ekspresyon ki tankou SQL ki pa sipòte optimize rechèch. Itilizatè a dwe ekri demann optimal tèt li, ak nan Q, ki anpil yo pa pare pou. Nan lòt men an, nan kou, ou ka toujou ekri rechèch la pi bon tèt ou, olye ke repoze sou yon optimize bwat nwa.
 
Kòm yon plis, yon liv sou Q - Q For Mortals disponib gratis nan sit entènèt konpayi an, Genyen tou yon anpil nan lòt materyèl itil kolekte la.
 
Yon lòt gwo dezavantaj se pri lisans lan. Sa se dè dizèn de milye de dola pa ane pa CPU. Se sèlman gwo konpayi ki kapab peye depans sa yo. Dènyèman, KX te fè politik lisans li yo pi fleksib epi li bay opòtinite pou peye sèlman pou tan an itilize oswa lwe KDB + nan Google ak Amazon nwaj yo. KX ofri tou pou telechaje vèsyon gratis pou rezon ki pa komèsyal (32 bit vèsyon oswa 64 bit sou demann).
 

Konpetitè

Gen kèk baz done espesyalize ki bati sou prensip ki sanble - kolòn, nan memwa, konsantre sou gwo kantite done. Pwoblèm lan se ke sa yo se baz done espesyalize. Yon egzanp frapan se Clickhouse. Baz done sa a gen yon prensip ki sanble anpil ak KDB + pou estoke done sou disk ak bati yon endèks; li fè kèk demann pi vit pase KDB +, byenke pa anpil. Men, menm kòm yon baz done, Clickhouse se pi espesyalize pase KDB + - analiz entènèt vs seri tan abitrè (diferans sa a trè enpòtan - paske nan li, pou egzanp, nan Clickhouse li pa posib yo sèvi ak lòd la nan dosye). Men, sa ki pi enpòtan, Clickhouse pa gen adaptabilite nan KDB +, yon lang ki ta pèmèt trete done dirèkteman nan baz done a, olye ke chaje li an premye nan yon aplikasyon separe, bati ekspresyon abitrè SQL, aplike fonksyon abitrè nan yon rechèch, kreye pwosesis. pa gen rapò ak ekzekisyon fonksyon baz done istorik. Se poutèt sa, li difisil pou konpare KDB + ak lòt baz done; yo ka pi bon nan sèten ka itilize oswa tou senpleman pi bon lè li rive travay baz done klasik, men mwen pa konnen nan yon lòt zouti egalman efikas ak versatile pou trete done tanporè.
 

Entegrasyon Python

Pou fè KDB+ pi fasil pou itilize pou moun ki pa abitye ak teknoloji a, KX te kreye bibliyotèk pou entegre byen ak Python nan yon sèl pwosesis. Ou ka swa rele nenpòt fonksyon Python soti nan Q, oswa vis vèrsa - rele nenpòt fonksyon Q soti nan Python (an patikilye, ekspresyon QSQL). Bibliyotèk konvèti, si sa nesesè (pa toujou pou dedomajman pou efikasite), done ki soti nan fòma yon lang nan fòma yon lòt. Kòm yon rezilta, Q ak Python ap viv nan yon senbyotik sere ke limit ki genyen ant yo twoub. Kòm yon rezilta, pwogramè a, sou yon bò, gen aksè konplè a anpil bibliyotèk Python itil, nan lòt men an, li resevwa yon baz rapid pou travay ak gwo done entegre nan Python, ki itil espesyalman pou moun ki enplike nan aprantisaj machin. oswa modèl.
 
Travay ak Q nan Python:

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')  

Referans

Sit la nan konpayi an - https://kx.com/
Sit entènèt pou devlopè - https://code.kx.com/v2/
Liv Q pou mòtèl (an angle) - https://code.kx.com/q4m3/
Atik sou aplikasyon KDB+/Q nan men anplwaye kx - https://code.kx.com/v2/wp/

Sous: www.habr.com

Add nouvo kòmantè