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 тухай ном (доорх холбоосыг үзнэ үү).

Зарим нэр томъёо

  • Санах ойн мэдээллийн сан. Хурдан шуурхай хандахын тулд өгөгдлийг 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+-д хамгийн бага биеийн хөдөлгөөнтэй энэхүү хэт үр ашигтай философийг тусгасан (би нэрэнд байгаа К үсэг хаанаас гаралтай нь одоо тодорхой болсон гэж бодож байна) К-ийн дөрөв дэх хувилбарын орчуулагчаас өөр юу ч биш юм. Хэл. Хэрэглэгчдэд ээлтэй хувилбарыг Q-ийн дээд талд нэмсэн. Q нь мөн SQL-ийн тодорхой аялгуу - QSQL, орчуулагч - хүснэгтийг системийн өгөгдлийн төрөл болгон дэмжих, хүснэгттэй ажиллах хэрэгслүүдийг нэмсэн. санах ой болон диск дээр гэх мэт.
 
Хэрэглэгчийн үүднээс авч үзвэл KDB+ нь C# хэл дээрх хүснэгтүүд болон SQL-тэй төстэй LINQ маягийн илэрхийллүүдийг дэмждэг Q хэлний орчуулагч юм. Энэ нь KDB+ болон бусад мэдээллийн сангуудын хоорондох хамгийн чухал ялгаа бөгөөд гол өрсөлдөөний давуу тал бөгөөд үүнийг ихэнхдээ үл тоомсорлодог. Энэ бол өгөгдлийн сан + идэвхгүй туслах хэл биш, харин бүрэн хэмжээний хүчирхэг програмчлалын хэл + мэдээллийн сангийн функцүүдийн суурилуулсан дэмжлэг юм. Энэхүү ялгаа нь KDB+-ийн бүх давуу талыг жагсаахад шийдвэрлэх үүрэг гүйцэтгэнэ. Жишээлбэл…
 

хэмжээ

Орчин үеийн стандартаар KDB+ нь ердөө л микроскоп хэмжээтэй. Энэ нь шууд утгаараа нэг дэд мегабайтын гүйцэтгэгдэх файл ба системийн зарим функц бүхий жижиг текст файл юм. Бодит байдал дээр - нэг мегабайтаас бага бөгөөд энэ програмын хувьд компаниуд сервер дээрх нэг процессорын хувьд жилд хэдэн арван мянган доллар төлдөг.

  • Энэ хэмжээ нь Pi микрокомпьютерээс эхлээд терабайт санах ойтой сервер хүртэл KDB+-г ямар ч техник хангамж дээр гайхалтай мэдрэх боломжийг олгодог. Энэ нь функцэд ямар ч байдлаар нөлөөлөхгүй, үүнээс гадна Q нь шууд ажиллаж эхэлдэг бөгөөд энэ нь бусад зүйлсийн дунд скрипт хэл болгон ашиглах боломжийг олгодог.
  • Энэ хэмжээгээр Q орчуулагч нь процессорын кэшэд бүрэн багтах бөгөөд энэ нь програмын гүйцэтгэлийг хурдасгадаг.
  • Гүйцэтгэх файлын ийм хэмжээтэй бол Q процесс нь санах ойд өчүүхэн зай эзэлдэг тул та хэдэн зуун файлыг ажиллуулж болно. Түүнчлэн, шаардлагатай бол Q нь нэг процессын дотор хэдэн арван эсвэл хэдэн зуун гигабайт санах ойтой ажиллах боломжтой.

Үнэнч байдал

Q нь өргөн хүрээний хэрэглээнд тохиромжтой. Q процесс нь түүхэн мэдээллийн сангийн үүрэг гүйцэтгэж, терабайт мэдээлэлд хурдан нэвтрэх боломжийг олгоно. Жишээлбэл, бид олон арван түүхэн мэдээллийн сантай бөгөөд тэдгээрийн заримд нь шахагдаагүй нэг өдрийн өгөгдөл нь 100 гигабайтаас илүү эзэлдэг. Гэсэн хэдий ч боломжийн хязгаарлалтын дагуу мэдээллийн санд асуулга араваас хэдэн зуун миллисекундэд дуусна. Ерөнхийдөө бид хэрэглэгчийн хүсэлтийн бүх нийтийн завсарлагатай байдаг - 30 секунд - энэ нь маш ховор ажилладаг.
 
Q нь санах ойн мэдээллийн сан байж болно. Санах ойн хүснэгтэд шинэ өгөгдөл маш хурдан нэмэгддэг тул хэрэглэгчийн хүсэлтийг хязгаарлах хүчин зүйл болдог. Хүснэгт дэх өгөгдлийг баганад хадгалдаг бөгөөд энэ нь багана дээрх аливаа үйлдэл нь процессорын кэшийг бүрэн хүчин чадлаараа ашиглах болно гэсэн үг юм. Үүнээс гадна KX процессорын вектор зааварчилгаагаар арифметик гэх мэт бүх үндсэн үйлдлүүдийг хийж, хурдыг нь нэмэгдүүлэхийг хичээсэн. Q нь өгөгдлийн сангийн хувьд ердийн бус ажлуудыг гүйцэтгэх боломжтой - жишээлбэл, урсгалын өгөгдлийг боловсруулж, "бодит цаг хугацаанд" тооцоолох (даалгавраас хамааран хэдэн арван миллисекундээс хэдэн секундын сааталтай) санхүүгийн хэрэглүүрийг өөр өөр хугацаанд нэгтгэх янз бүрийн функцуудыг гүйцэтгэх боломжтой. завсарлага эсвэл зах зээлд төгс гүйлгээний нөлөөллийн загварыг бий болгож, дууссаны дараа бараг тэр даруй профайлыг хийх. Ийм ажлуудад ихэвчлэн гол саатал нь Q биш, харин өөр өөр эх сурвалжаас өгөгдлийг синхрончлох хэрэгцээ байдаг. Өгөгдөл, тэдгээрийг боловсруулдаг функцууд нь нэг процесст багтаж, боловсруулалт нь хэд хэдэн QSQL илэрхийлэл, нэгдлүүдийг гүйцэтгэх хүртэл буурч, тайлбарлагдаагүй боловч хоёртын кодоор гүйцэтгэдэг тул өндөр хурдтай болсон.
 
Эцэст нь та Q дээр ямар ч үйлчилгээний процесс бичиж болно. Жишээлбэл, Gateway нь хэрэглэгчийн хүсэлтийг шаардлагатай мэдээллийн сан, серверт автоматаар түгээдэг процесс юм. Программист тэнцвэржүүлэх, эрэмбэлэх, алдааг тэсвэрлэх чадвар, нэвтрэх эрх, квот болон үндсэндээ зүрх сэтгэлийнхээ хүссэн бүх алгоритмыг хэрэгжүүлэх бүрэн эрх чөлөөтэй. Энд байгаа гол асуудал бол энэ бүхнийг та өөрөө хэрэгжүүлэх хэрэгтэй болно.
 
Жишээ болгон, би ямар төрлийн процессуудыг жагсаах болно. Тэд бүгд идэвхтэй ашиглагдаж, хамтран ажиллаж, олон арван өөр мэдээллийн санг нэг дор нэгтгэж, олон эх сурвалжаас авсан өгөгдлийг боловсруулж, олон зуун хэрэглэгчид болон програмуудад үйлчилдэг.

  • Өгөгдлийн эх үүсвэрт холбогч (тэжээгч). Эдгээр процессууд нь Q-д ачаалагдсан гадаад сангуудыг ашигладаг. Q дахь C интерфейс нь маш энгийн бөгөөд ямар ч C/C++ номын санд прокси функцүүдийг хялбархан үүсгэх боломжийг олгодог. Q нь Европын бүх хөрөнгийн биржээс ирсэн FIX мессежийг нэгэн зэрэг боловсруулахад хангалттай хурдан юм.
  • Мэдээллийн дистрибьютер (тикер үйлдвэр), тэдгээр нь холбогч ба хэрэглэгчдийн хоорондох завсрын холбоос болж үйлчилдэг. Үүний зэрэгцээ тэд ирж буй өгөгдлийг тусгай хоёртын бүртгэлд бичиж, хэрэглэгчдэд холболтын алдагдал эсвэл дахин эхлүүлэхээс найдвартай байдлыг хангадаг.
  • Санах ойн мэдээллийн сан (rdb). Эдгээр мэдээллийн сангууд нь санах ойд хадгалах замаар түүхий, шинэ мэдээлэлд хамгийн хурдан хандах боломжийг олгодог. Ихэвчлэн тэд өдрийн цагаар өгөгдлийг хүснэгтэд хуримтлуулж, шөнийн цагаар дахин тохируулдаг.
  • Байнгын мэдээллийн сан (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 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 хэл дээрх adverbs гэж нэрлэдэг) ба вектор үйлдлийг атомын үйлдлээр солих замаар мөнгө хэмнэхийг хэзээ ч бүү оролдоорой. Жишээлбэл, массив дахь элементийн N дахь тохиолдлын индексийг олохын тулд та дараахийг бичих хэрэгтэй.

1. (where element=vector)[N]  

Хэдийгээр энэ нь C/Java стандартын дагуу үнэхээр үр ашиггүй мэт санагдаж байна (= логикийн вектор үүсгэдэг бөгөөд энд байгаа элементүүдийн жинхэнэ индексийг буцаадаг). Гэхдээ энэ тэмдэглэгээ нь илэрхийллийн утгыг илүү тодорхой болгож, удаан атомын оронд хурдан вектор үйлдлүүдийг ашигладаг. Вектор хэл болон бусад хэл дээрх ойлголтын ялгаа нь програмчлалын императив болон функциональ хандлагын хоорондох ялгаатай харьцуулж болох бөгөөд та үүнд бэлэн байх хэрэгтэй.
 
Зарим хэрэглэгчид QSQL-д сэтгэл хангалуун бус байдаг. Гол нь энэ нь зөвхөн жинхэнэ SQL шиг харагддаг. Бодит байдал дээр энэ нь асуулгын оновчлолыг дэмждэггүй SQL-тэй төстэй илэрхийллүүдийн орчуулагч юм. Хэрэглэгч өөрөө оновчтой асуултуудыг бичих ёстой бөгөөд ихэнх нь бэлэн биш байдаг Q дээр. Нөгөөтэйгүүр, мэдээжийн хэрэг та хар хайрцагны оновчлогч дээр найдахын оронд хамгийн оновчтой асуулгыг өөрөө бичиж болно.
 
Үүнээс гадна Q - Q For Mortals номыг эндээс үнэ төлбөргүй авах боломжтой компанийн вэбсайт, бас өөр олон хэрэгтэй материал тэнд цуглуулсан.
 
Өөр нэг том сул тал бол лицензийн зардал юм. Энэ нь CPU-д жилд хэдэн арван мянган доллар зарцуулдаг гэсэн үг. Зөвхөн томоохон компаниуд ийм зардлыг төлж чадна. Саяхан 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 ном (англи хэл дээр) - https://code.kx.com/q4m3/
kx-ийн ажилчдын KDB+/Q програмын талаархи нийтлэлүүд - https://code.kx.com/v2/wp/

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх