قاعدة بيانات KDB +: من المالية إلى الصيغة 1

KDB + ، منتج KX ، هو دائرة ضيقة معروفة على نطاق واسع ، سريعة للغاية ، قاعدة بيانات عمود مصممة لتخزين السلاسل الزمنية والحسابات التحليلية بناءً عليها. في البداية ، تمتعت (وتتمتع) بشعبية كبيرة في صناعة التمويل - يتم استخدامه من قبل جميع البنوك الاستثمارية العشرة الأولى والعديد من صناديق التحوط المعروفة ، والبورصات وغيرها من المنظمات. في الآونة الأخيرة ، قررت KX توسيع قاعدة عملائها وتقدم الآن حلولًا في مجالات أخرى حيث توجد كمية كبيرة من البيانات مرتبة حسب الوقت أو بطريقة أخرى - الاتصالات ، المعلوماتية الحيوية ، الإنتاج ، إلخ. على وجه الخصوص ، أصبحوا شريكًا لفريق Aston Martin Red Bull Racing في Formula 1 ، حيث يساعدون في جمع ومعالجة البيانات من أجهزة استشعار السيارة وتحليل الاختبارات في نفق الرياح. في هذه المقالة ، أود أن أخبرك بميزات KDB + التي تجعلها فائقة الإنتاجية ، ولماذا الشركات مستعدة لإنفاق أموال كبيرة عليها ، وأخيراً ، لماذا لا تكون هذه قاعدة بيانات حقًا.



في هذه المقالة سأحاول أن أقول بشكل عام ما هو KDB + ، وما هي الميزات والقيود التي يتمتع بها ، وما هي فائدته للشركات التي ترغب في معالجة كميات كبيرة من البيانات. لن أخوض في تفاصيل تطبيق KDB + وتفاصيل لغة برمجة Q. كلا الموضوعين واسعان للغاية ويستحقان مقالات منفصلة. يمكن العثور على الكثير من المعلومات حول هذه المواضيع على code.kx.com ، بما في ذلك كتاب عن Q - Q For Mortals (انظر الرابط أدناه).

بعض المصطلحات


  • في قاعدة البيانات في الذاكرة. قاعدة بيانات تخزن البيانات في ذاكرة الوصول العشوائي للوصول بشكل أسرع. مزايا قاعدة البيانات هذه مفهومة ، وعيوبها هي إمكانية فقدان البيانات ، والحاجة إلى وجود ذاكرة كبيرة على الخادم.
  • قاعدة بيانات العمود. قاعدة بيانات حيث يتم تخزين البيانات في سلسلة ، وليس تسجيل بواسطة سجل. الميزة الرئيسية لقاعدة البيانات هذه هي أن البيانات من عمود واحد يتم تخزينها معًا على القرص وفي الذاكرة ، مما يسرع بشكل كبير من الوصول إليها. ليست هناك حاجة لتحميل الأعمدة غير المستخدمة في الطلب. العيب الرئيسي هو أنه من الصعب تعديل وحذف السجلات.
  • سلسلة زمنية. البيانات مع عمود مثل التاريخ أو الوقت. كقاعدة عامة ، يعد الترتيب في الوقت المناسب أمرًا مهمًا لمثل هذه البيانات ، بحيث يمكنك بسهولة تحديد السجل الذي يسبق السجل الحالي أو يتبعه ، أو لتطبيق الوظائف التي تعتمد نتائجه على ترتيب السجلات. قواعد البيانات الكلاسيكية مبنية على مبدأ مختلف تمامًا - تمثل مجموعة من السجلات كمجموعة ، حيث لا يتم تحديد ترتيب السجلات من حيث المبدأ.
  • النواقل. في السياق ، KDB + هي قائمة بالعناصر من نفس النوع الذري ، على سبيل المثال ، الأرقام. وبعبارة أخرى ، مجموعة من العناصر. المصفوفات ، على عكس القوائم ، يمكن تخزينها بشكل مضغوط ومعالجتها باستخدام إرشادات معالج المتجه.

الخلفية التاريخية


تأسست KX في عام 1993 من قبل آرثر ويتني ، الذي عمل سابقًا في بنك مورجان ستانلي على A + ، خليفة APL ، وهي لغة أصلية وشعبية للغاية في العالم المالي. بطبيعة الحال ، في KX ، واصل آرثر في نفس الروح وخلق لغة ناقلات وظيفية K ، تسترشد أفكار الحد الأدنى الراديكالية. تبدو برامج K وكأنها مجموعة من علامات الترقيم الفوضوية والحروف الخاصة ، ويعني معنى الحروف والوظائف السياق ، وكل عملية تحمل معنى أكبر بكثير من لغات البرمجة المعتادة. لهذا السبب ، يشغل برنامج K مساحة لا تقل عن الحد الأدنى - حيث يمكن أن تحل عدة أسطر محل صفحات نصية بلغة مطوّلة مثل Java - وهو عبارة عن تطبيق ذو تركيز كبير للخوارزمية.

دالة على K تقوم بتنفيذ معظم مولد محلل 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;"(",]}({$[".sC"~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 K دعا Q. Q أيضا دعم لهجة SQL معينة ، QSQL ، وفي المترجم ، ودعم الجداول كنوع بيانات النظام ، وأدوات للعمل مع الجداول في الذاكرة وعلى القرص ، الخ

وبالتالي ، من وجهة نظر المستخدم ، KDB + هو مجرد مترجم Q مع دعم للجداول وتعبيرات LINQ تشبه SQL من C #. هذا هو الفرق الأكثر أهمية بين KDB + وقواعد البيانات الأخرى وميزته التنافسية الرئيسية ، والتي غالباً ما يتم تجاهله. هذه ليست قاعدة بيانات + لغة مساعدة معطلة ، ولكن لغة برمجة قوية كاملة + دعم مدمج لوظائف قاعدة البيانات. سيلعب هذا الاختلاف دورًا حاسمًا في إدراج جميع مزايا KDB +. على سبيل المثال ...

حجم


وفقًا للمعايير الحديثة ، يعتبر KDB + مجرد حجم مجهري. هذا هو حرفيًا ملف تنفيذي واحد أصغر من ملف ميغا بايت واحد وملف نصي صغير مع بعض وظائف النظام. في الواقع - تدفع أقل من ميجابايت واحد لهذا البرنامج ، عشرات الآلاف من الدولارات سنويًا لمعالج واحد على الخادم.

  • يتيح هذا الحجم لـ KDB + الشعور بالراحة على أي جهاز - بدءًا من كمبيوتر Pi الصغير وحتى الخوادم التي تحتوي على تيرابايت من الذاكرة. هذا لا يؤثر على الوظيفة بأي شكل من الأشكال ؛ علاوة على ذلك ، يبدأ Q على الفور ، مما يسمح باستخدامه بما في ذلك كلغة برمجة.
  • بهذا الحجم ، يتم وضع مترجم Q بشكل كامل في ذاكرة التخزين المؤقت للمعالج ، مما يزيد من سرعة تنفيذ البرامج.
  • باستخدام هذا الحجم من الملف القابل للتنفيذ ، تشغل عملية Q مساحة ضئيلة من الذاكرة ؛ يمكنك تشغيلها بالمئات. في الوقت نفسه ، إذا لزم الأمر ، يمكن أن تعمل Q مع عشرات أو مئات غيغا بايت من الذاكرة في عملية واحدة.

براعة


Q مثالية لمجموعة متنوعة من المهام. يمكن أن تكون عملية Q كقاعدة بيانات تاريخية وتوفر وصولاً سريعًا إلى تيرابايت من المعلومات. على سبيل المثال ، لدينا العشرات من قواعد البيانات التاريخية ، حيث يستغرق يوم واحد من البيانات غير المضغوطة أكثر من 100 غيغابايت. ومع ذلك ، مع قيود معقولة ، سيتم تنفيذ استعلام قاعدة البيانات في عشرات إلى مئات الميلي ثانية. بشكل عام ، لدينا مهلة عالمية لطلبات المستخدم - 30 ثانية - ونادراً ما يعمل.

بنفس السهولة ، يمكن أن تكون Q قاعدة بيانات في الذاكرة. تعد إضافة بيانات جديدة إلى الجداول في الذاكرة سريعة جدًا بحيث تكون استعلامات المستخدم عاملاً مقيدًا. يتم تخزين البيانات في الجداول في أعمدة ، مما يعني أن أي عملية في العمود ستستخدم ذاكرة التخزين المؤقت للمعالج بكامل طاقتها. بالإضافة إلى ذلك ، حاول KX تنفيذ جميع العمليات الأساسية مثل الحساب من خلال تعليمات معالج المتجه ، مما يزيد من سرعتها. يمكن لـ Q أداء المهام التي لا تتميز بقواعد البيانات - على سبيل المثال ، معالجة بيانات التدفق وحسابها في "الوقت الحقيقي" (مع تأخير لعشرات الميلي ثانية إلى عدة ثوان اعتمادًا على المهمة) وظائف تجميعية متنوعة للأدوات المالية لفترات زمنية مختلفة أو إنشاء نموذج لتأثير الكمال المعاملات إلى السوق وتنفيذ التنميط على الفور تقريبا بعد الانتهاء منه. في مثل هذه المشاكل ، غالبًا ما يكون التأخير الزمني الرئيسي هو Q ، ولكن الحاجة إلى مزامنة البيانات من مصادر مختلفة. يتم تحقيق السرعة العالية نظرًا لحقيقة أن البيانات والوظائف التي تقوم بمعالجتها في نفس العملية ، ويتم تقليل المعالجة إلى تنفيذ العديد من تعبيرات QSQL ووصلاتها التي لم يتم تفسيرها ، ولكن يتم تنفيذها في التعليمات البرمجية الثنائية.

أخيرًا ، يمكن أيضًا كتابة أي عمليات خدمة في Q. على سبيل المثال ، عمليات البوابة التي تقوم تلقائيًا بتوزيع طلبات المستخدمين على قواعد البيانات والخوادم الضرورية. يتمتع المبرمج بحرية كاملة في تنفيذ أي خوارزمية لتحقيق التوازن ، وتحديد الأولويات ، والتسامح مع الخطأ ، وحقوق الوصول ، والحصص ، وبصورة عامة ما يشاء قلبك. المشكلة الرئيسية هنا هي أنه يجب عليك تنفيذ كل هذا بنفسك.

على سبيل المثال ، سأدرج أنواع العمليات التي لدينا. يتم استخدامها جميعًا بنشاط وتعمل معًا ، حيث تجمع بين عشرات قواعد البيانات المختلفة ومعالجة البيانات من العديد من المصادر وتخدم مئات المستخدمين والتطبيقات.

  • الموصلات (وحدة التغذية) لمصادر البيانات. تستخدم هذه العمليات عادة المكتبات الخارجية التي يتم تحميلها في Q. واجهة C في Q بسيطة للغاية وتتيح لك بسهولة إنشاء وظائف الوكيل لأي مكتبة C / C ++. Q سريعة بما يكفي للتعامل ، على سبيل المثال ، معالجة تدفق رسائل FIX من جميع البورصات الأوروبية في وقت واحد.
  • موزعو Tickerplant ، والتي تعمل كحلقة وصل بين الموصلات والمستهلكين. في الوقت نفسه ، يكتبون البيانات الواردة في سجل ثنائي خاص ، مما يوفر مقاومة للمستهلكين لفقد الاتصال أو إعادة التشغيل.
  • في قاعدة البيانات في الذاكرة (RDB). توفر قواعد البيانات هذه أسرع وصول إلى البيانات الخام الطازجة ، وتخزينها في الذاكرة. وكقاعدة عامة ، يقومون بتجميع البيانات في الجداول أثناء النهار والصفر في الليل.
  • استمرار قاعدة البيانات (pdb). توفر قواعد البيانات هذه تخزين البيانات اليوم في قاعدة البيانات التاريخية. كقاعدة عامة ، على عكس rdb ، لا يقومون بتخزين البيانات في الذاكرة ، لكنهم يستخدمون ذاكرة تخزين مؤقت خاصة على القرص ليوم واحد ويقومون بنسخ البيانات في منتصف الليل إلى قاعدة البيانات التاريخية.
  • القواعد التاريخية (hdb). توفر قواعد البيانات هذه الوصول إلى البيانات للأيام والشهور والسنوات السابقة. حجمها (بالأيام) محدود فقط بحجم محركات الأقراص الثابتة. يمكن تحديد موقع البيانات في أي مكان ، خاصة على الأقراص المختلفة للوصول بشكل أسرع. من الممكن ضغط البيانات باستخدام عدة خوارزميات للاختيار من بينها. بنية قاعدة البيانات موثقة جيدًا وبسيطة ، ويتم تخزين البيانات على أساس كل وحدة في ملفات عادية ، بحيث يمكن معالجتها ، بما في ذلك استخدام نظام التشغيل.
  • قواعد البيانات مع المعلومات المجمعة. يتم تخزين المجموعات المختلفة ، عادةً ، مع تجميعها حسب اسم الأداة والفاصل الزمني. تعمل قواعد البيانات في الذاكرة على تحديث حالتها مع كل رسالة واردة ، وتخزين البيانات التاريخية البيانات المحسوبة مسبقًا لتسريع الوصول إلى البيانات التاريخية.
  • أخيرًا ، تعالج البوابة خدمة التطبيقات والمستخدمين. يتيح لك Q تنفيذ المعالجة غير المتزامنة تمامًا للرسائل الواردة ، وتوزيعها بين قواعد البيانات ، والتحقق من حقوق الوصول ، وما إلى ذلك. وألاحظ أن الرسائل لا تقتصر على معظمها وليست عبارات SQL ، كما هو الحال في قواعد البيانات الأخرى. غالبًا ما يتم إخفاء تعبير SQL في وظيفة خاصة ويتم إنشاؤه استنادًا إلى المعلمات التي يطلبها المستخدم - يتم تحويل الوقت وتصفيته وتطبيع البيانات (على سبيل المثال ، يتم معادلة سعر الأسهم إذا تم دفع أرباح الأسهم) ، إلخ.

العمارة النموذجية لنوع بيانات واحد:



سرعة


على الرغم من أن Q لغة مترجمة ، إلا أنها في الوقت نفسه لغة متجهة. هذا يعني أن العديد من الوظائف المضمنة ، ولا سيما الحساب ، تقبل الوسائط من أي شكل - الأرقام والمتجهات والمصفوفات والقوائم ومن المتوقع أن يقوم البرنامج بتنفيذ البرنامج كعمليات على المصفوفات. في مثل هذه اللغة ، إذا أضفت متجهين في مليون عنصر ، لم يعد من المهم أن يتم تفسير اللغة ، سيتم تنفيذ الإضافة بواسطة وظيفة ثنائية فائقة المحاكاة. نظرًا لأن نصيب الأسد من الوقت في برامج Q يتم إنفاقه على العمليات مع الجداول باستخدام هذه الوظائف المتجهية الأساسية ، لدينا سرعة إخراج مناسبة للغاية تسمح لنا بمعالجة كمية هائلة من البيانات حتى في عملية واحدة. هذا مشابه لمكتبات الرياضيات في python - على الرغم من أن python بحد ذاته لغة بطيئة للغاية ، إلا أنه يحتوي على العديد من المكتبات الرنانة العظيمة التي تسمح لك بمعالجة البيانات العددية بسرعة لغة مترجمة (بالمناسبة ، numpy قريبة أيديولوجيًا من Q).

بالإضافة إلى ذلك ، اقترب KX بعناية فائقة من تصميم الجداول وتحسين العمل معهم. أولاً ، يتم دعم عدة أنواع من الفهارس ، والتي تدعمها وظائف مضمنة ويمكن تطبيقها ليس فقط على أعمدة الجدول ، ولكن أيضًا على أي متجهات - التجميع والفرز وسمات التفرد والتجمع الخاص لقواعد البيانات التاريخية. يتم تثبيت الفهرس بشكل أولي ويتم ضبطه تلقائيًا عند إضافة عناصر إلى العمود / المتجه. يمكن أن تتداخل الفهارس بشكل جيد مع أعمدة الجدول في الذاكرة وعلى القرص. عند تنفيذ استعلام QSQL ، يتم استخدام الفهارس تلقائيًا ، إن أمكن. ثانياً ، يتم العمل مع البيانات التاريخية من خلال آلية تعيين ملفات نظام التشغيل (خريطة الذاكرة). لا يتم تحميل الجداول الكبيرة أبدًا في الذاكرة ، بدلاً من ذلك ، يتم تعيين الأعمدة الضرورية مباشرةً على الذاكرة ويتم تحميل هذا الجزء منها فعليًا (تساعد الفهارس هنا أيضًا). لا يوجد فرق للمبرمج سواء كانت البيانات في الذاكرة أم لا ، فإن آلية العمل مع mmap مخفية تمامًا في أحشاء Q.

KDB + ليست قاعدة بيانات علائقية ، يمكن أن تحتوي الجداول على بيانات اعتباطية ، بينما لا يتغير ترتيب الصفوف في الجدول عند إضافة عناصر جديدة ويمكن وينبغي استخدامه عند كتابة الاستعلامات. هناك حاجة ماسة إلى هذه الميزة للعمل مع السلاسل الزمنية (البيانات من التبادلات ، والقياس عن بعد ، وسجلات الأحداث) ، لأنه إذا تم فرز البيانات حسب الوقت ، فلن يحتاج المستخدم إلى استخدام أي حيل SQL للعثور على الصف الأول أو الأخير أو صفوف N في الجدول ، حدد السطر الذي يتبع السطر Nth ، إلخ. صلات الجداول أكثر بساطة ، على سبيل المثال ، البحث عن 16000 معاملة. VOD.L (Vodafone) الاقتباس الأخير في جدول مكون من 500 مليون عنصر يستغرق حوالي ثانية على القرص وعشرات الميلي ثانية في الذاكرة.

مثال على الصلة الزمنية هو تعيين جدول الأسعار على الذاكرة ، لذلك ليست هناك حاجة لتحديد VOD.L حيث يتم استخدام الفهرس في عمود sym ضمنيًا وحقيقة أن البيانات يتم فرزها حسب الوقت. جميع الصلات تقريباً في Q هي وظائف عادية ، وليست جزءًا من جملة select:

 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) ، ولا تحاول أبدًا توفير المال عن طريق استبدال عمليات المتجهات بالعمليات الذرية. على سبيل المثال ، للعثور على فهرس التواجد Nth لعنصر في صفيف ، اكتب:

 1. (where element=vector)[N] 

على الرغم من أن هذا يبدو غير فعال بشكل كبير وفقًا لمعايير C / Java (= يخلق متجهًا منطقيًا ، حيث يُرجع مؤشرات العناصر الحقيقية فيه). لكن مثل هذا السجل يجعل معنى التعبير أكثر قابلية للفهم وتستخدم عمليات متجهة سريعة بدلاً من العمليات الذرية البطيئة. الفرق المفاهيمي بين لغة المتجه والباقي يمكن مقارنته بالفرق بين المقاربات الحتمية والوظيفية للبرمجة ، ويجب أن تكون مستعدًا لذلك.

بعض المستخدمين غير راضين عن QSQL. والحقيقة هي أنه يبدو فقط مثل SQL الحقيقي. في الواقع ، إنه مجرد مترجم للتعبيرات المشابهة لـ SQL والتي لا تدعم تحسين الاستعلام. يجب على المستخدم نفسه كتابة الاستعلامات المثلى ، وعلى Q ، والتي لا يكون الكثير منها جاهزًا. من ناحية أخرى ، بالطبع ، يمكنك دائمًا كتابة استعلامك الأمثل بنفسك ، وعدم الاعتماد على مُحسِّن الصندوق الأسود.

كإضافة ، يتوفر كتاب عن Q - Q For Mortals مجانًا على موقع الشركة على الويب ، وهناك أيضًا العديد من المواد المفيدة الأخرى.

ناقص كبير آخر هو تكلفة الترخيص. هذا هو عشرات الآلاف من الدولارات سنويا لوحدة المعالجة المركزية واحدة. يمكن للشركات الكبيرة فقط تحمل هذه النفقات. في الآونة الأخيرة ، جعلت KX سياسة الترخيص أكثر مرونة وتوفر القدرة على الدفع فقط لوقت الاستخدام أو استئجار KDB + في غيوم جوجل وأمازون. تقدم KX أيضًا تنزيل إصدار مجاني لأغراض غير تجارية (إصدار 32 بت أو 64 بت عند الطلب).

المنافسين


هناك عدد لا بأس به من قواعد البيانات المتخصصة المبنية على مبادئ مماثلة - عمودي ، في الذاكرة ، تركز على كميات كبيرة جدًا من البيانات. المشكلة هي أن هذه هي قواعد البيانات المتخصصة. والمثال الرئيسي هو Clickhouse. تشبه قاعدة البيانات هذه مبدأ KDB + الخاص بتخزين البيانات على القرص وإنشاء الفهرس ؛ فهي تنفذ بعض الاستعلامات بشكل أسرع من KDB + ، على الرغم من أنها ليست كبيرة. ولكن حتى لو كانت قاعدة بيانات Clickhouse أكثر تخصصًا من KDB + - تحليلات الويب مقارنة بسلسلة زمنية تعسفية (هذا الاختلاف مهم للغاية - بسبب ذلك ، على سبيل المثال ، لا توجد طريقة لاستخدام ترتيب السجلات في Clickhouse). ولكن الأهم من ذلك ، أن Clickhouse لا تملك عالمية KDB + ، وهي لغة تسمح بمعالجة البيانات مباشرة في قاعدة البيانات ، بدلاً من تحميلها سابقًا في تطبيق منفصل ، وإنشاء تعبيرات SQL تعسفية ، وتطبيق وظائف تعسفية في استعلام ، وإنشاء عمليات لا تتعلق بتنفيذ وظائف قاعدة البيانات التاريخية . لذلك ، من الصعب مقارنة KDB + مع قواعد البيانات الأخرى ، فقد تكون أفضل في حالات الاستخدام المنفصلة أو ببساطة أفضل إذا كنا نتحدث عن مهام قواعد البيانات الكلاسيكية ، لكنني لا أعرف أداة أخرى فعالة وعالمية بنفس القدر لمعالجة البيانات المؤقتة.

بيثون التكامل


لجعل KDB + أكثر سهولة بالنسبة للأشخاص الجدد على التكنولوجيا ، أنشأت KX مكتبات للتكامل الوثيق مع Python في عملية واحدة. يمكنك إما استدعاء أي وظيفة بيثون من Q ، أو العكس - استدعاء أي وظيفة Q من بيثون (خاصة تعبيرات QSQL). تقوم المكتبات بتحويل البيانات إذا كان ذلك ضروريًا (من أجل الكفاءة ليس دائمًا) من تنسيق لغة إلى تنسيق لغة أخرى. نتيجة لذلك ، يعيش Q و Python في تعايش وثيق للغاية بحيث يتم مسح الحدود بينهما. نتيجة لذلك ، يتمتع المبرمج ، من ناحية ، بإمكانية الوصول الكامل إلى العديد من مكتبات Python المفيدة ، من ناحية أخرى ، يحصل على قاعدة سريعة للعمل مع البيانات الضخمة المدمجة في 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/
كتاب Q For Mortals (باللغة الإنجليزية) - https://code.kx.com/q4m3/
مقالات حول موضوع تطبيقات KDB + / Q من موظفي kx - https://code.kx.com/v2/wp/

Source: https://habr.com/ru/post/ar446412/


All Articles