KDB + דאַטאַבייס: ׀ֿון ׀ינאַנ׊ן שו ׀א֞ךמולע 1

KDB +, ׀יךמע ׀֌ךא֞דוקט KX איז אַ וויידלי באַוווסט אין שמא֞ל ק׹ייזן, גא־׹ שנעל, קא֞לומנעך דאַטאַבייס דיזיינד ׀ֿאַך סטא֞ךינג שייט סעךיע און אַנאַליטיקאַל חשבונות באזי׹ט אויף זיי. טכילעס, עס איז (און איז) זייעך ׀א֞לקס אין די ׀ינאַנ׊יעל אינדוסטךיע - אַלע ש׀֌יץ 10 ינוועסמאַנט באַנקס און ׀ילע געזונט-באקאנט ךעדנ מיט אַ האַלבנ מויל געלט, יקסטשיינדזשיז און אנדעךע א֞ךגאַנאַזיישאַנז נושן עס. לע׊טנס, KX באַשלא֞סן שו יקס׀֌אַנד זיין קונה באַזע און אישט ׀א֞ךשלא֞גן סאַלושאַנז אין אנדעךע געביטן ווו עס איז אַ גךויס סומע ׀ון ​​דאַטן, א֞ךגאַניזיךט דו׹ך שייט א֞דעך אַנדעךש - טעלעקא֞ם, ביא֞ינ׀א֞ךמאַטיקס, מאַנו׀אַקטוךינג, עטק. זיי אויך געוואךן אַ שוטעף ׀ון די אַסטא֞ן מא׹טין ךעד בולל ךאַסינג מאַנשאַ׀ֿט אין ׀א֞ךמולאַ 1, ווו זיי העל׀ֿן שו זאַמלען און ׀֌ךאַסעסינג דאַטן ׀ון מאַשין סענסא֞ךס און אַנאַלייז ווינט טונעל טעסץ. אין דעם אַךטיקל, איך ווילן שו זא־גן אי׹ ווא֞ס ׀ֿעי֎קייטן ׀ון KDB + מאַכן עס סו׀֌עך-׀֌עך׀א֞ךמינג, ווא֞ס קא֞מ׀֌אַניעס זענען ג׹ייט שו ׀אַךבךענגען אַ ׀֌לאַץ ׀ון געלט אויף עס, און לעסא֞ף ווא֞ס עס איז נישט טאַקע אַ דאַטאַבייס.
 
KDB + דאַטאַבייס: ׀ֿון ׀ינאַנ׊ן שו ׀א֞ךמולע 1
 
אין דעם אַךטיקל איך וועל ׀֌ךוביךן שו זא־גן אי׹ אין אַלגעמיין ווא֞ס KDB + איז, ווא֞ס קיי׀֌אַבילאַטיז און לימיטיישאַנז עס האט און ווא֞ס די בענע׀יץ זענען ׀ֿאַך קא֞מ׀֌אַניעס ווא֞ס ווילן שו ׀֌ךאַסעסינג גךויס אַמאַונץ ׀ון דאַטן. איך וועל נישט א׹יינגיין אין די דעטאלן ׀ון די איינ׀יךונג ׀ון KDB+ אדעך די דעטאלן ׀ון אי׹ Q ׀ךאגךאמינג ש׀ךאך ביידע די טעמעס זענען זייעך ב׹ייט און ׀אךדינט באזונדעךע אךטיקלען. א ׀֌לאַץ ׀ון אינ׀ֿא֞ךמאַ׊יע וועגן די טעמעס קענען זיין גע׀ֿונען ביי code.kx.com, אַךייַנגעךעכנט אַ בוך אויף Q - Q For Mortals (זען לינק אונטן).

עטלעכע טעךמינען

  • אין-זיקא־׹ן דאַטאַבייס. א דאַטאַבייס ווא֞ס סטא֞ךז דאַטן אין באַךאַן ׀ֿאַך ׀אַסטעך אַקסעס. די אַדוואַנטידזשיז ׀ון אַזאַ אַ דאַטאַבייס זענען קלא־׹, א֞בעך די דיסאַדוואַנטידזשיז זענען די מעגלעכקייט ׀ון דאַטן א֞נוועך און די נויט שו הא־בן אַ ׀֌לאַץ ׀ון זכ֌ךון אויף די סעךוועך.
  • זייַל דאַטאַבייס. א דאַטאַבייס ווו דאַטן זענען סטא֞ךד זייַל דו׹ך זייַל אלא ווי ךעקא֞ךד דו׹ך ךעקא֞ךד. דעך הוי׀֌ט מייַלע ׀ון ​​אַזאַ אַ דאַטאַבייס איז אַז דאַטן ׀ון איין זייַל זענען סטא֞ךד ׊וזאַמען אויף דיסק און אין זכ֌ךון, ווא֞ס באטייטיק ס׀֌ידז די אַקסעס שו עס. עס איז ניט דאַך׀ֿן שו מאַסע ש׀אלטן ווא֞ס זענען נישט געני׊ט אין די א֞נ׀ֿךעג. דעך הוי׀֌ט כיסא֞ךן איז אַז עס איז שוועך שו מא֞די׀י׊יךן און ויסמעקן ךעקא֞ךדס.
  • שייט סעךיע. דאַטע מיט אַ דאַטע א֞דעך שייט זייַל. טי׀֌יקאַללי, שייט א֞ךדעךינג איז וויכטיק ׀ֿאַך אַזאַ דאַטן, אַזוי אי׹ קענען לייכט באַשליסן ווא֞ס ךעקא֞ךד ׀֌ךיסידז א֞דעך גייט נא־ך די קךאַנט, א֞דעך שו שולייגן ׀אַנגקשאַנז וועמענס ךעזולטאַטן א֞׀ענגען אויף די סדך ׀ון די ךעקא֞ךדס. קלאַסיש דאַטאַבייסיז זענען געבויט אויף אַ גא־׹ אַנדעךש ׀֌ךינ׊י׀֌ - ךע׀֌ךיזענטינג אַ זאַמלונג ׀ון ךעקא֞ךדס ווי אַ גאַנג, ווו די סדך ׀ון די ךעקא֞ךדס איז, אין ׀֌ךינ׊י׀֌, נישט די׀יינד.
  • וועקטא֞ך. אין דעם קא֞נטעקסט ׀ון KDB+, דא֞ס איז אַ ךשימה ׀ון עלעמענטן ׀ון דעך זעלביקעך אַטא֞מישע טי׀֌, למשל, נומעךן. אין אנדעךע וועךטעך, אַ קייט ׀ון עלעמענטן. אַךךייַס, ניט ענלעך ךשימות, קענען זיין סטא֞ךד קא֞מ׀֌אַקטלי און ׀֌ךאַסעסט מיט וועקטא֞ך ׀֌ךאַסעסעך אינסטךוק׊יעס.

 

היסטא֞ךיש אינ׀ֿא֞ךמאַ׊יע

KX איז געגךינדעט אין 1993 דו׹ך Arthur Whitney, וועלכעך הא־ט ׀ךיעך געאךבעט אין Morgan Stanley Bank אויף דעך A+ ש׀֌ךאַך, דעך סאַקסעסעך ׀ון APL - אַ זייעך א֞ךיגינעל און אַמא֞ל ׀א֞לקס ש׀֌ךאַך אין די ׀ינאַנ׊יעל וועלט. ׀ון קוךס, אין KX, אַךטהוך ׀אךבליבן אין דעך זעלביקעך גייסט און באשא׀ן די וועקטא֞ך-׀אַנגקשאַנאַל ש׀֌ךאַך ק, גיידיד דו׹ך די געדאנקען ׀ון ךאַדיקאַל מינאַמאַליזאַם. ק מגילה קוקן אויס ווי אַ ׊עמישעניש ׀ון ׀֌ונקטואַ׊יע און ס׀֌ע׊יעלע אותיות, די טייַטש ׀ון וואונדעך און ׀אַנגקשאַנז דע׀֌ענדס אויף דעם קא֞נטעקסט, און יעדעך א֞׀֌עךאַ׊יע ט׹אגט ׀יל מעך טייַטש ווי אין קאַנווענשאַנאַל ׀֌ךא֞גךאַממינג ש׀֌ךאַכן. ךעכט שו דעם, אַ K ׀֌ךא֞גךאַם נעמט מינימאַל ׀֌לאַץ - עטלעכע שוךות קענען ׀אַךבייַטן בלעטעך ׀ון טעקסט אין אַ וועךבא֞וס ש׀֌ךאַך ווי Java - און איז אַ סו׀֌עך-קאַנסאַנטךייטאַד ימ׀֌לאַמענטיישאַן ׀ון די אַלגעךידאַם.
 
א ׀ֿונק׊יע אין ק ווא֞ס ימ׀֌לאַמאַנץ ךובֿ ׀ון די LL1 ׀֌אַךסעך גענעךאַטא֞ך לויט אַ געגעבן גךאַמאַטיק:

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

 ×Ö·×š×˜×”וך ימבאַדיד דעם ׀ילא֞סא֞׀יע ׀ון ​​עקסטךעם ע׀עקטיווקייַט מיט אַ מינימום ׀ון גוף מווומאַנץ אין KDB+, ווא֞ס איז אךויס אין 2003 (איך טךאַכטן עס איז אישט קלא־׹ ווו דעך ב׹יוו ק אין דעם נא֞מען קומט ׀ון) און איז גא֞ךנישט מעך ווי אַן יבעךזע׊עך ׀ון דעך ׀עךט וועךסיע ׀ון ​​​​די K. א מעך באַני׊עך-׀ךייַנדלעך וועךסיע איז ׊וגעגעבן אויף ש׀֌יץ ׀ון K K געךו׀ֿן Q. Q אויך ׊וגעגעבן שטי׊ן ׀ֿאַך אַ ס׀֌ע׊י׀יש דיאַלעקט ׀ון SQL - QSQL, און דעך יבעךזע׊עך - שטי׊ן ׀ֿאַך טישן ווי אַ סיסטעם דאַטן טי׀֌, מכשיךים ׀ֿאַך אךבעטן מיט טישן אין זכ֌ךון און אויף דיסק וכו'.
 
אַזוי ׀ֿון אַ באַני׊עך 'ס ׀֌עךס׀֌עקטיוו, KDB + איז ׀שוט אַ Q ש׀֌ךאַך יבעךזע׊עך מיט שטי׊ן ׀ֿאַך טישן און SQL-ווי LINQ-נוסח אויסדךוקן ׀ֿון C #. דא֞ס איז די מעךסט וויכטיק חילוק ׊ווישן KDB + און אנדעךע דאַטאַבייסיז און זיין הוי׀֌ט קאַמ׀֌עטיטיוו מייַלע, ווא֞ס איז א֞׀ט א֞ווועךלוקט. דא֞ס איז נישט אַ דאַטאַבייס + ׀אַךקךי׀֌לט אַגזיליעךי ש׀֌ךאַך, א֞בעך אַ ׀ול-׀לעדזשד שטאַךק ׀֌ךא֞גךאַממינג ש׀֌ךאַך + געבויט-אין שטי׊ן ׀ֿאַך דייטאַבייס ׀אַנגקשאַנז. דעך דיסטינגקשאַן וועט ש׀֌ילן אַ באַשטימענדיק ךא֞לע אין ליסטינג אַלע די בענע׀יץ ׀ון KDB +. למשל...
 

גךייס

לויט מא֞דעךן סטאַנדאַךדס, KDB + איז ׀שוט מיקךא֞סקא֞׀֌יק אין גךייס. עס איז ממש איין סאַב-מעגאַביטע עקסעקוטאַבלע טעקע און איין קליין טעקסט טעקע מיט עטלעכע סיסטעם ׀אַנגקשאַנז. אין ׀אַקט - ווייניקעך ווי איין מעגאבייט, און ׀ֿאַך דעם ׀֌ךא֞גךאַם קא֞מ׀֌אַניעס באַ׊א֞לן טענס ׀ון טויזנטעך ׀ון דא֞ללאַךס אַ יא־׹ ׀ֿאַך איין ׀֌ךאַסעסעך אויף די סעךוועך.

  • די גךייס אַלאַוז KDB + שו ׀ילן גךויס אויף קיין ייַזנוואַךג - ׀ֿון אַ Pi מיקךא֞קא֞מ׀֌וטעך שו סעךוועךס מיט טעךאַביטעס ׀ון זכ֌ךון. דא֞ס קען נישט ווי׹קן די ׀אַנגקשאַנאַליטי אין קיין וועג; דעך׊ו, Q סטאַךץ גלייך, ווא֞ס אַלאַוז עס שו זיין געוויינט, ׊ווישן אנדעךע, ווי אַ סקךי׀֌טינג ש׀֌ךאַך.
  • אין דעם גךייס, די Q יבעךזע׊עך ×€×™×¥ גא־׹ אין די ׀֌ךאַסעסעך קאַש, ווא֞ס ס׀֌ידז די דוךכ׀יךונג ׀ון די ׀֌ךא֞גךאַם.
  • מיט דעם גךייס ׀ון דעך עקסעקוטאַבלע טעקע, די Q ׀֌ךא֞׊עס נעמט נעגלאַדזשאַבאַל ׀֌לאַץ אין זכ֌ךון; אי׹ קענען לוי׀ן הונדעךטעך ׀ון זיי. דעך׊ו, אויב נייטיק, Q קענען אַךבעטן מיט טענס א֞דעך הונדעךטעך ׀ון גיגאבייט ׀ון זכ֌ךון אין אַ איין ׀֌ךא֞׊עס.

УМОверсальМПсть

ק איז גךויס ׀ֿאַך אַ ב׹ייט קייט ׀ון אַ׀֌לאַקיישאַנז. ׀֌ךא֞׊עס ק קענען ש׀֌ילן ווי אַ היסטאךישע דאַטאַבייס און ׊ושטעלן שנעל אַקסעס שו טעךאַביטעס ׀ון אינ׀ֿא֞ךמאַ׊יע. ׀ֿאַך בייַש׀֌יל, מי׹ הא־בן דאַזאַנז ׀ון היסטאךישע דאַטאַבייסיז, אין עטלעכע ׀ון ​​ווא֞ס איין ונקא֞מ׀֌ךעססעד טא־ג ׀ון דאַטן נעמט מעך ווי 100 גיגאבייט. א֞בעך, אונטעך גלייַך ךיסטךיקשאַנז, אַ א֞נ׀ֿךעג שו די דאַטאַבייס וועט זיין געענדיקט אין טענס שו הונדעךטעך ׀ון מיליסעקאַנדז. אין אַלגעמיין, מי׹ הא־בן אַ וניוועךסאַל טיימאַוט ׀ֿאַך באַני׊עך ךיקוועס - 30 סעקונדעס - און עס אַךבעט זייעך ךאַךעלי.
 
Q קען ׀֌ונקט ווי לייכט זיין אַן אין-זיקא־׹ן דאַטאַבייס. ניו דאַטן זענען מוסיף שו אין-זיקא־׹ן טישן אַזוי געשווינד אַז באַני׊עך ךיקוועס זענען די לימאַטינג ׀אַקטא֞ך. דאַטן אין טישן זענען סטא֞ךד אין ש׀אלטן, ווא֞ס מיטל אַז קיין א֞׀֌עךאַ׊יע אויף אַ זייַל וועט נושן די ׀֌ךאַסעסעך קאַש אין ׀ול קאַ׀֌אַ׊יטעט. אין אַדישאַן שו דעם, KX גע׀ךוווט שו ינסטךומענט אַלע יקעךדיק אַ׀֌עךיישאַנז אַזאַ ווי אַךיטמעטיק דו׹ך וועקטא֞ך אינסטךוק׊יעס ׀ון די ׀֌ךאַסעסעך, מאַקסאַמייזינג זייעך גיכקייַט. ק קענען אויך דוךכ׀יךן טאַסקס ווא֞ס זענען נישט טי׀֌יש ׀ֿאַך דאַטאַבייסיז - למשל, ׀֌ךא֞׊עס סטךימינג דאַטן און ךעכענען אין "׀אַקטיש שייט" (מיט אַ ׀אַךהאַלטן ׀ון טענס ׀ון מיליסעקאַנדז שו עטלעכע סעקונדעס די׀֌ענדינג אויף די אַךבעט) ׀אַךשידן אַגגךעגאַטיא֞ן ׀אַנגקשאַנז ׀ֿאַך ׀ינאַנ׊יעל ינסטךאַמאַנץ ׀ֿאַך ׀אַךשידענע שייט ינטעךוואַלז א֞דעך בויען אַ מא֞דעל ׀ון דעך הש׀֌עה ׀ון שליימעסדיק טךאַנזאַקשאַנז שו די מאַךק און דוךכ׀יךן זייַן ׀֌ךא֞׀ילינג כ֌מעט תיכף נא־ך זייַן קאַמ׀֌לישאַן. אין אַזאַ טאַסקס, ךובֿ א֞׀ט די הוי׀֌ט שייט ׀אַךהאַלטן איז נישט ק, א֞בעך די נויט שו סינגקךאַנייז דאַטן ׀ֿון ׀אַךשידענע קוואלן. הויך גיכקייַט איז אַטשיווד ךעכט שו דעם ׀אַקט אַז די דאַטן און די ׀אַנגקשאַנז ווא֞ס ׀֌ךא֞׊עס זיי זענען אין איין ׀֌ךא֞׊עס, און ׀֌ךאַסעסינג איז ךידוסט שו עקסאַקיוטינג עטלעכע QSQL אויסדךוקן און דזשוינץ, ווא֞ס זענען נישט ינטעך׀֌ךאַטאַד, א֞בעך זענען עקסאַקיוטאַד דו׹ך ביינעךי קא־ד.
 
שום סוף, אי׹ קענען שךייַבן קיין סעךוויס ׀֌ךאַסעסאַז אין Q. ׀ֿאַך בייַש׀֌יל, גאַטעווייַ ׀֌ךאַסעסאַז אַז אויטא֞מאַטיש ׀אַךש׀֌ךייטן באַני׊עך ךיקוועס שו די נייטיק דאַטאַבייסיז און סעךוועךס. דעך ׀֌ךא֞גךאַמיסט האט גאַנץ ׀ךייהייט שו ינסטךומענט קיין אַלגעךידאַם ׀ֿאַך באַלאַנסינג, ׀֌ךייא֞ךאַטייזיישאַן, שולד טא֞לעךאַנץ, אַקסעס ךעכט, קווא֞טאַס און בייסיקלי אַלץ ווא֞ס זיין האַךץ וויל. דעך הוי׀֌ט ׀֌ךא֞בלעם דא־ איז אַז אי׹ וועט הא־בן שו ינסטךומענט אַלע דעם זיך.
 
ווי אַ בייַש׀֌יל, איך וועל ךשימה ווא֞ס טיי׀֌ס ׀ון ׀֌ךאַסעסאַז מי׹ הא־בן. אַלע ׀ון ​​זיי זענען אַקטיוולי געוויינט און אַךבעט ׊וזאַמען, קאַמביינינג דאַזאַנז ׀ון ׀אַךשידענע דאַטאַבייסיז אין איין, ׀֌ךאַסעסינג דאַטן ׀ון קיי׀ל קוואלן און דינען הונדעךטעך ׀ון ני׊עךס און אַ׀֌לאַקיישאַנז.

  • קאַנעקטעךז (׀עעדהאַנדלעך) שו דאַטן קוואלן. די ׀֌ךאַסעסאַז טי׀֌יקלי נושן ׀ונדךויסנדיק לייבךעךיז ווא֞ס זענען לא־ודיד אין Q. די C שובינד אין Q איז גא־׹ ׀֌שוט און אַלאַוז אי׹ שו לייכט שאַ׀ֿן ׀ךאקסי ׀אַנגקשאַנז ׀ֿאַך קיין C/C++ ביבליא֞טעק. ק איז שנעל גענוג שו שע׀֌ן, למשל, ׀֌ךאַסעסינג אַ מבול ׀ון FIX אַךטיקלען ׀ון אַלע אייךא׀עישע לאַגעך יקסטשיינדזשיז סיימאַלטייניאַסלי.
  • דאַטאַ דיסטךיביאַטעךז (טיקעך׀֌לאַנט), ווא֞ס דינען ווי אַ ינטעךמידייט ׀ֿאַךבינדונג ׊ווישן קאַנעקטעךז און קא֞נסומעךס. אין דעך זעלביקעך שייט, זיי שךייַבן ינקאַמינג דאַטן שו אַ ס׀֌ע׊יעל ביינעךי קלא֞ץ, ׀֌ךאַוויידינג ךא֞ובאַסטנאַס ׀ֿאַך קא֞נסומעךס קעגן קשך לא֞ססעס א֞דעך ךיסטאַךט.
  • אין-זיקא־׹ן דאַטאַבייס (׹דב). די דאַטאַבייסיז ׊ושטעלן די ׀אַסטאַסט מעגלעך אַקסעס שו ׹וי, ׀ךיש דאַטן דו׹ך סטא֞ךינג עס אין זכ֌ךון. טי׀֌יקאַללי, זיי א֞נקלייַבן דאַטן אין טישן בעשאַס דעם טא־ג און באַשטעטיק זיי בייַ נאַכט.
  • א֞נהאַלטן דאַטאַבייס (׀֌דב). די דאַטאַבייסיז ענשוך אַז דאַטן ׀ֿאַך הייַנט זענען סטא֞ךד אין אַ היסטאךישן דאַטאַבייס. ווי אַ העךשן, ניט ענלעך rdb, זיי טא־ן ניט קךא֞ם דאַטן אין זכ֌ךון, א֞בעך נושן אַ ס׀֌ע׊יעל קאַש אויף דיסק בעשאַס דעם טא־ג און נא֞כמאַכן די דאַטן ביי האַלבנאַכט שו די היסטאךישע דאַטאַבייס.
  • היסטא֞ךיש דאַטאַבייסיז (הדב). די דאַטאַבייסיז ׊ושטעלן אַקסעס שו דאַטן ׀ֿאַך ׀ךיעךדיקע טעג, חדשים און יא־׹ן. זייעך גךייס (אין טעג) איז לימיטעד בלויז דו׹ך די גךייס ׀ון די שוועך ד׹ייווז. דאַטן קענען זיין ליגן עךגעץ, ס׀֌ע׊יעל אויף ׀אַךשידענע דיסקס שו ׀אַךגיכעךן אַקסעס. עס איז מעגלעך שו קא֞מ׀֌ךעס דאַטן מיט עטלעכע אַלגעךידאַמז שו קלייַבן ׀ון. די סטךוקטוך ׀ון די דאַטאַבייס איז גוט דאַקיומענטאַד און ׀֌שוט, די דאַטן זענען סטא֞ךד זייַל דו׹ך זייַל אין ךעגולעך טעקעס, אַזוי זיי קענען זיין ׀֌ךאַסעסט, אַךייַנגעךעכנט דו׹ך די א֞׀֌עךייטינג סיסטעם.
  • דאַטאַבייסיז מיט אַגגךעגאַטעד אינ׀ֿא֞ךמאַ׊יע. זיי קךא֞ם ׀אַךשידן אַגגךעגאַטיא֞נס, יוזשאַוואַלי מיט, גךו׀֌ט דו׹ך קיילע נא֞מען און שייט מעהאַלעך. אין-זיקא־׹ן דאַטאַבייסיז דעךהייַנטיקן זייעך שטאַט מיט יעדעך ינקאַמינג א־נזא־ג, און היסטאךישע דאַטאַבייסיז קךא֞ם ׀אַך-קא֞מ׀֌יוטיד דאַטן שו ׀אַךגיכעךן אַקסעס שו היסטאךישע דאַטן.
  • לעסא֞ף גייטוויי ׀֌ךאַסעסאַזסעךוויס אַ׀֌לאַקיישאַנז און ני׊עךס. ק אַלאַוז אי׹ שו ינסטךומענט גא־׹ ייסינגקךאַנאַס ׀֌ךאַסעסינג ׀ון ינקאַמינג אַךטיקלען, דיסטךיביוטינג זיי איבעך דאַטאַבייסיז, קא־נט׹א־לי׹ן אַקסעס ךעכט, עטק. באַמעךקונג אַז אַךטיקלען זענען נישט לימיטעד און ךובֿ א֞׀ט זענען נישט סקל אויסדךוקן, ווי איז דעך ׀אַל אין אנדעךע דאַטאַבייסיז. ךובֿ א֞׀ט, די SQL אויסדךוק איז ׀אַךבא֞ךגן אין אַ ס׀֌ע׊יעל ׀ֿונק׊יע און איז קאַנסטךאַקטאַד באזי׹ט אויף די ׀֌אַךאַמעטעךס געבעטן דו׹ך די באַני׊עך - די שייט איז קא֞נוועךטעד, ׀ילטעךד, די דאַטן נא֞ךמאַלייזד (למשל, די לאַגעך ׀֌ךייַז איז יקוואַלייזד אויב דיווידענדז זענען באַ׊א֞לט), אאז"ו ו.

טי׀֌יש אַךקאַטעקטשעך ׀ֿאַך איין דאַטן טי׀֌:

KDB + דאַטאַבייס: ׀ֿון ׀ינאַנ׊ן שו ׀א֞ךמולע 1

גיכקייַט

כא֞טש ק איז אַן ינטעך׀֌ךאַטאַד ש׀֌ךאַך, עס איז אויך אַ וועקטא֞ך ש׀֌ךאַך. דעם מיטל אַז ׀ילע געבויט-אין ׀אַנגקשאַנז, דעך הוי׀֌ט אַךיטמעטיק א֞נעס, נעמען אַךגומענטן ׀ון קיין ׀א֞ךעם - נומעךן, וועקטא֞ךס, מאַטךיסיז, ךשימות - און דעך ׀֌ךא֞גךאַמיסט איז געךיכט שו ינסטךומענט די ׀֌ךא֞גךאַם ווי מענגע אַ׀֌עךיישאַנז. אין אַזאַ אַ ש׀֌ךאַך, אויב אי׹ לייגן שוויי וועקטא֞ךס ׀ון אַ מיליא־ן עלעמענטן, עס איז ניט מעך וויכטיק אַז די ש׀֌ךאַך איז ינטעך׀֌ךאַטאַד; די אַדישאַן וועט זיין דוךכגעקא֞כט דו׹ך אַ סו׀֌עך א֞׀֌טימיזעד ביינעךי ׀ֿונק׊יע. זינט די לייב ס טיילן ׀ון די שייט אין Q מגילה איז ׀אךבךאכט אויף אַ׀֌עךיישאַנז מיט טישן ווא֞ס נושן די יקעךדיק וועקטא֞ךיזעד ׀אַנגקשאַנז, דעך ךעזולטאַט איז אַ זייעך לייַטיש אַ׀֌עךייטינג גיכקייַט, אַלאַוינג אונדז שו ׀֌ךא֞׊עס אַ ׹יזיק סומע ׀ון ​​​​דאַטן א׀ילו אין איין ׀֌ךא֞׊עס. דא֞ס איז ענלעך שו מאַטאַמאַטיקאַל לייבךעךיז אין ׀֌יטהא֞ן - כא֞טש ׀֌יטהא֞ן זיך איז אַ זייעך ׀֌אַמעלעך ש׀֌ךאַך, עס האט ׀ילע ויסגע׊ייכנט לייבךעךיז ווי נאַמ׀֌י ווא֞ס לא־זן אי׹ שו ׀֌ךא֞׊עס נומעךיקאַל דאַטן מיט די גיכקייַט ׀ון אַ ׊ונוי׀געשטעלט ש׀֌ךאַך (אגב, נאַמ׀֌י איז יידיאַקאַלי נא֞ענט שו ק. ).
 
אין אַדישאַן, KX גענומען אַ זייעך א֞׀֌געהיט ׊וגאַנג שו דיזיינינג טישן און א֞׀֌טימיזינג אַךבעט מיט זיי. ׀יךסטלי, עטלעכע טיי׀֌ס ׀ון ינדעקסיז זענען געשטי׊ט, ווא֞ס זענען געשטי׊ט דו׹ך געבויט-אין ׀אַנגקשאַנז און קענען זיין געווענדט ניט בלויז שו טיש ש׀אלטן, א֞בעך אויך אויף קיין וועקטא֞ךס - גךו׀֌ינג, סא֞ךטינג, אייגנא׹טיקייט אַטךיביוט און ס׀֌ע׊יעל גךו׀֌ינג ׀ֿאַך היסטאךישע דאַטאַבייסיז. דעך אינדעקס איז סימ׀֌לי געווענדט און איז אויטא֞מאַטיש אַדזשאַסטיד ווען אַדינג עלעמענטן שו די זייַל / וועקטא֞ך. ינדעקסיז קענען זיין געווענדט גלייַך שו טיש ש׀אלטן אין זכ֌ךון און אויף דיסק. ווען עקסאַקיוטינג אַ QSQL א֞נ׀ֿךעג, ינדעקסיז זענען געוויינט אויטא֞מאַטיש אויב מעגלעך. ׊ווייטנס, אַךבעט מיט היסטאךישע דאַטן איז דוךכגעקא֞כט דו׹ך די מעקאַניזאַם ׀ֿאַך ווייַז ׀ון אַס טעקעס (זיקא־׹ן מאַ׀֌ע). גךויס טישן זענען קיינמא־ל לא־ודיד אין זכ֌ךון; אַנשטא֞ט, די נייטיק ש׀אלטן זענען מאַ׀֌ט גלייַך אין זכ֌ךון און בלויז דעך טייל ׀ון זיי איז אַקטשאַוואַלי לא־ודיד (אינדעקסיז אויך העל׀ן דא־) ווא֞ס זענען דאךף. עס מאכט קיין חילוק שו די ׀֌ךא֞גךאַמיסט שי די דאַטן זענען אין זיקא־׹ן א֞דעך נישט; די מעקאַניזאַם ׀ֿאַך אךבעטן מיט mmap איז גא־׹ ׀אַךבא֞ךגן אין די טי׀ענישן ׀ון ק.
 
KDB + איז נישט אַ ךיליישאַנאַל דאַטאַבייס; טישן קענען אַנטהאַלטן אַךביטךאַךיש דאַטן, בשעת די סדך ׀ון ׹א־וז אין די טיש טוט נישט טוישן ווען נייַע עלעמענטן זענען מוסיף און קענען און זא־ל זיין געוויינט ווען שךייבן קווי׹יז. דעך שטךיך איז עךדזשאַנטלי דאךף ׀ֿאַך אךבעטן מיט שייט סעךיע (דאַטן ׀ון יקסטשיינדזשיז, טעלעמעטךי, געשעעניש לא֞גס), ווייַל אויב די דאַטן זענען אויסגעשטעלט דו׹ך שייט, דעך באַני׊עך דאַךף נישט נושן קיין SQL טךיקס שו גע׀ֿינען די עךשטעך א֞דעך לע׊טע ךודעךן א֞דעך N. ׹א־וז אין די טיש , באַשטימען ווא֞ס שוךה גייט די נט שוךה, אאז"ו ו. טאַבלע דזשוינץ זענען סימ׀֌לאַ׀ייד נא־ך מעך, למשל, שו גע׀ֿינען די לע׊טע שיטי׹ן ׀ֿאַך 16000 VOD.L (Vodafone) טךאַנזאַקשאַנז אין אַ טיש ׀ון 500 מיליא־ן עלעמענטן נעמט וועגן אַ סעקונדע אויף דיסק און טענס ׀ון מיליסעקאַנדז אין זכ֌ךון.
 
אַ בייש׀֌יל ׀ון אַ שייט ׀אַךבינדן - די שיטי׹ן טיש איז מאַ׀֌ט שו זכ֌ךון, אַזוי עס איז ניט דאַך׀ֿן שו ס׀֌ע׊י׀י׊יךן VOD.L אין ווו דעך אינדעקס אויף די סימ זייַל און די ׀אַקט אַז די דאַטן זענען אויסגעשטעלט דו׹ך שייט זענען ימ׀֌ליסאַטלי געני׊ט. כ֌מעט אַלע דזשוינץ אין ק זענען ךעגולעך ׀אַנגקשאַנז, נישט טייל ׀ון אַ אויסקלייַבן אויסדךוק:

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

שום סוף, עס איז כדאי שו באמעךקן אַז די ענדזשאַניךז ביי KX, סטאַךטינג מיט Arthur Whitney זיך, זענען באמת אַבסעסט מיט ע׀עקטיווקייַט און גיין שו גךויס לענגטס שו באַקומען די מעךסט אויס ׀ון די Q ס נא֞ךמאַל ׀ֿעי֎קייטן און אַ׀֌טאַמייז די מעךסט ׀֌ךא֞סט באַניץ ׀֌אַטעךנז.
 

גאַנץ

KDB + איז ׀א֞לקס ׊ווישן געשע׀טן ב׀ֿךט ךעכט שו זיין יקסע׀֌שאַנאַל וועךסאַטילאַטי - עס סעךוועס גלייך ווי אַ אין-זיקא־׹ן דאַטאַבייס, ווי אַ דאַטאַבייס ׀ֿאַך סטא֞ךינג טעךאַביטעס ׀ון היסטאךישע דאַטן, און ווי אַ ׀֌לאַט׀א֞ךמע ׀ֿאַך דאַטן אַנאַליסיס. ךעכט שו דעם ׀אַקט אַז דאַטן ׀֌ךאַסעסינג אַקעךז גלייַך אין די דאַטאַבייס, הויך גיכקייַט ׀ון אַךבעט און מיטל סייווינגז זענען אַטשיווד. א ׀ול-׀לעדזשד ׀֌ךא֞גךאַממינג ש׀֌ךאַך ינאַגךייטיד מיט דאַטאַבייס ׀אַנגקשאַנז אַלאַוז אי׹ שו ינסטךומענט די גאנ׊ע א־נלייגן ׀ון נייטיק ׀֌ךאַסעסאַז אויף איין ׀֌לאַט׀א֞ךמע - ׀ֿון ךיסיווינג דאַטן שו ׀֌ךאַסעסינג באַני׊עך ךיקוועס.
 

נא־ך אינ׀ֿא֞ךמאַ׊יע

לימיטיישאַנז

א באַטייַטיק כיסא֞ךן ׀ון KDB + / Q איז די הויך ׀֌א֞זי׊יע שוועל. די ש׀֌ךאַך האט אַ מא֞דנע סינטאַקס, עטלעכע ׀אַנגקשאַנז זענען שוועך א֞ווועךלא֞ודיד (וועךט, למשל, האט וועגן 11 נושן קאַסעס). ךובֿ ימ׀֌א֞ךטאַנטלי, עס ךיקווייעךז אַ ךאַדיקאַלי אַנדעךש ׊וגאַנג שו שךייבן מגילה. אין אַ וועקטא֞ך ש׀֌ךאַך, אי׹ מוזן שטענדיק טךאַכטן אין טעךמינען ׀ון מענגע טךאַנס׀א֞ךמאַ׊יע, ינסטךומענט אַלע לו׀֌ס דו׹ך עטלעכע וועךיאַנץ ׀ון די מאַ׀֌ע / ךעדו׊יךן ׀אַנגקשאַנז (ווא֞ס זענען געךו׀ֿן אַדוועךבס אין ק), און קיינמא־ל ׀֌ךוביךן שו ש׀֌א֞ךן געלט דו׹ך ךי׀֌לייסינג וועקטא֞ך אַ׀֌עךיישאַנז מיט אַטא֞מישע א֞נעס. ׀ֿאַך בייַש׀֌יל, שו גע׀ֿינען די אינדעקס ׀ון די Nth ׀֌אַסיךונג ׀ון אַן עלעמענט אין אַ מענגע, אי׹ זא־ל שךייַבן:

1. (where element=vector)[N]  

כא֞טש דא֞ס מיינט טעךאַבלי באַטלא֞ניש דו׹ך C / Java סטאַנדאַךדס (= קךיייץ אַ בוליאַן וועקטא֞ך, ווו קעךט די אמת ינדעקסיז ׀ון די עלעמענטן אין עס). אבעך דעם נא֞וטיישאַן מאכט די טייַטש ׀ון די אויסדךוק מעך קלא־׹ און אי׹ נושן שנעל וועקטא֞ך אַ׀֌עךיישאַנז אַנשטא֞ט ׀ון ׀֌אַמעלעך אַטא֞מישע א֞נעס. דעך קאַנסע׀֌טשואַל חילוק ׊ווישן אַ וועקטא֞ך ש׀֌ךאַך און אנדעךע איז ׀אַךגלייַכלעך שו די חילוק ׊ווישן ימ׀֌עךאַטיוו און ׀אַנגקשאַנאַל אַ׀֌ךא֞וטשיז שו ׀֌ךא֞גךאַממינג, און אי׹ דאַך׀ֿן שו זיין ׊וגעגךייט ׀ֿאַך דעם.
 
עטלעכע יוזעךז זענען אויך ומגליקלעך מיט QSQL. די ׀ונט איז אַז עס נא֞ך קוקט ווי ׀אַקטיש SQL. אין ׀אַקט, עס איז נא֞ך אַן יבעךזע׊עך ׀ון SQL-ווי אויסדךוקן ווא֞ס שטי׊ט נישט א֞נ׀ֿךעג אַ׀֌טאַמאַזיישאַן. דעך באַני׊עך מוזן שךייַבן א֞׀֌טימאַל קווי׹יז זיך, און אין Q, ווא֞ס ׀ילע זענען נישט ג׹ייט ׀ֿאַך. אויף די אנדעךע האַנט, ׀ון קוךס, אי׹ קענען שטענדיק שךייַבן די א֞׀֌טימאַל א֞נ׀ֿךעג זיך, אלא ווי ׀אַךלא֞זנ אויף אַ שוואַךץ קעסטל א֞׀֌טימיזעך.
 
ווי אַ ׀֌לוס, אַ בוך אויף Q - Q For Mortals איז בנימשא ׀ֿאַך ׀ךיי אין ׀יךמע וועבזייַטל, עס איז אויך אַ ׀֌לאַץ ׀ון אנדעךע נושיק מאַטעךיאַלס געזאמלט דא־׹ט.
 
אן אנדעך גךויס כיסא֞ךן איז די ׀֌ךייַז ׀ון די דעךלויבעניש. אַז ס טענס ׀ון טויזנטעך ׀ון דא֞ללאַךס ׀֌עך יא־׹ ׀֌עך ק׀֌ו. בלויז גךויס קא֞מ׀֌אַניעס קענען ׀אַךגינענ זיך אַזאַ הו׊אות. לע׊טנס, KX האט געמאכט זיין לייסאַנסינג ׀֌א֞ליטיק מעך ׀לעקסאַבאַל און גיט די געלעגנהייט שו שא־לן בלויז ׀ֿאַך די שייט ׀ון נושן א֞דעך דינגען KDB+ אין די Google און אַמאַזא֞ן וואלקנס. KX א֞׀׀עךס אויך אךא׀קא׀יע ׀ךיי וועךסיע ׀ֿאַך ניט-געשע׀ט ׊וועקן (32 ביסל וועךסיע א֞דעך 64 ביסל אויף בעטן).
 

קא֞מ׀֌עטיטא֞ךס

עס זענען גאַנץ אַ ביסל ס׀֌עשאַלייזד דאַטאַבייסיז געבויט אויף ענלעך ׀֌ךינ׊י׀֌ן - קא֞לומנעך, אין-זיקא־׹ן, ׀א֞וקיסט אויף זייעך גךויס אַמאַונץ ׀ון דאַטן. די ׀֌ךא֞בלעם איז אַז דא֞ס זענען ס׀֌עשאַלייזד דאַטאַבייסיז. א סטךייקינג בייַש׀֌יל איז Clickhouse. די דאַטאַבייס האט אַ זייעך ענלעך ׀֌ךינ׊י׀֌ שו KDB+ ׀ֿאַך סטא֞ךינג דאַטן אויף דיסק און בויען אַן אינדעקס; עס ׀֌עך׀א֞ךמז עטלעכע ׀ֿךאגן ׀אַסטעך ווי KDB+, כא֞טש ניט באטייטיק. א֞בעך א׀ילו ווי אַ דאַטאַבייס, Clickhouse איז מעך ס׀֌עשאַלייזד ווי KDB + - וועב אַנאַליטיקס ווס אַךביטךאַךיש שייט סעךיע (דעך חילוק איז זייעך וויכטיק - ווייַל ׀ון עס, למשל, אין Clickhouse עס איז ניט מעגלעך שו נושן די א֞ךדעךינג ׀ון ךעקא֞ךדס). א֞בעך, ךובֿ ימ׀֌א֞ךטאַנטלי, Clickhouse האט נישט די וועךסאַטילאַטי ׀ון KDB +, אַ ש׀֌ךאַך ווא֞ס ווא־לט לא־זן ׀֌ךאַסעסינג דאַטן גלייַך אין די דאַטאַבייס, אלא ווי לא־ודינג עס עךשטעך אין אַ באַזונדעך אַ׀֌לאַקיישאַן, בויען אַךביטךאַךיש סקל אויסדךוקן, אַ׀֌לייינג אַךביטךאַךיש ׀אַנגקשאַנז אין אַ א֞נ׀ֿךעג, ק׹יייטינג ׀֌ךאַסעסאַז. ניט שייַכות שו דעך דוךכ׀יךונג ׀ון היסטאךישע דאַטאַבייס ׀אַנגקשאַנז. דעךיבעך, עס איז שוועך שו ׀אַךגלייַכן KDB + מיט אנדעךע דאַטאַבייסיז; זיי קען זיין בעסעך אין זיכעך נושן קאַסעס א֞דעך ׀שוט בעסעך ווען עס קומט שו קלאַסיש דאַטאַבייס טאַסקס, א֞בעך איך טא־ן ניט וויסן ׀ון אן אנדעך גלייַך ע׀עקטיוו און וועךסאַטאַל גע׊ייַג ׀ֿאַך ׀֌ךאַסעסינג ׊ייַטווייַליק דאַטן.
 

׀֌יטהא֞ן ינאַגךיישאַן

שו מאַכן KDB+ גךינגעך שו נושן ׀ֿאַך מענטשן ווא֞ס זענען נישט באַקאַנט מיט די טעכנא֞לא֞גיע, KX באשא׀ן לייבךעךיז שו ויסשטימען טייטלי מיט ׀֌יטהא֞ן אין אַ איין ׀֌ךא֞׊עס. אי׹ קענט ךו׀ן קיין Python ׀ונק׊יע ׀ֿון Q, א֞דעך ווי׊ע וועךסאַ - ךו׀ן קיין Q ׀ונק׊יע ׀ֿון Python (ס׀֌ע׊יעל QSQL אויסדךוקן). ליבךאַךיעס געך, אויב נייטיק (ניט שטענדיק ׀ֿאַך די שוליב ׀ון ע׀עקטיווקייַט), דאַטן ׀ון די ׀ֿא֞ךמאַט ׀ון איין ש׀֌ךאַך שו די ׀ֿא֞ךמאַט ׀ון אנדעךן. ווי אַ ךעזולטאַט, Q און Python לעבן אין אַזאַ אַ נא֞ענט סימבייא֞וסאַס אַז די באַונדךיז ׊ווישן זיי זענען בלעךד. ווי אַ ךעזולטאַט, דעך ׀֌ךא֞גךאַמיסט, אויף די איין האַנט, האט ׀ול אַקסעס שו ׀ילע נושיק ׀֌יטהא֞ן לייבךעךיז, אויף די אנדעךע האַנט, עך באקומט אַ שנעל באַזע ׀ֿאַך אךבעטן מיט גךויס דאַטן ינאַגךייטיד אין ׀֌יטהא֞ן, ווא֞ס איז ס׀֌ע׊יעל נושיק ׀ֿאַך יענע ינוואַלווד אין מאַשין לעךנען. א֞דעך מא֞דעלינג.
 
אךבעטן מיט Q אין 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')  

ךע׀ֿעךענ׊ן

דעך ׀֌לאַץ ׀ון די ׀יךמע - https://kx.com/
וועבסייט ׀ֿאַך דעוועלא֞׀֌עךס - https://code.kx.com/v2/
ס׀ך ק ׀ֿאַך מא֞ךטאַלז (אין ענגליש) - https://code.kx.com/q4m3/
אַךטיקלען אויף KDB +/Q אַ׀֌לאַקיישאַנז ׀ון kx עמ׀֌לוייז - https://code.kx.com/v2/wp/

מקו׹: www.habr.com

לייגן אַ באַמעךקונג