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 میں آرتھر وٹنی نے رکھی تھی، جس نے پہلے مورگن اسٹینلے بینک میں A+ زبان پر کام کیا تھا، جو APL کا جانشین تھا - ایک بہت ہی اصل اور مالیاتی دنیا میں ایک وقت میں مقبول زبان۔ بلاشبہ، KX میں، آرتھر نے اسی جذبے کے ساتھ جاری رکھا اور ویکٹر فنکشنل زبان K بنائی، جس کی رہنمائی ریڈیکل minimalism کے نظریات سے ہوئی۔ K پروگرام اوقاف اور خصوصی حروف کے جھنجھٹ کی طرح نظر آتے ہیں، علامات اور افعال کے معنی سیاق و سباق پر منحصر ہوتے ہیں، اور ہر آپریشن روایتی پروگرامنگ زبانوں سے کہیں زیادہ معنی رکھتا ہے۔ اس کی وجہ سے، ایک K پروگرام کم سے کم جگہ لیتا ہے — چند سطریں جاوا جیسی لفظی زبان میں متن کے صفحات کی جگہ لے سکتی ہیں — اور یہ الگورتھم کا ایک انتہائی مرتکز نفاذ ہے۔
 
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;"(",]}({$[".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 K کے اوپر ایک اور صارف دوست ورژن شامل کیا گیا ہے جسے Q کہا جاتا ہے۔ Q نے SQL کی ایک مخصوص بولی کے لیے سپورٹ بھی شامل کیا - QSQL، اور ترجمان - ٹیبلز کے لیے سسٹم ڈیٹا کی قسم، ٹیبل کے ساتھ کام کرنے کے لیے ٹولز۔ میموری میں اور ڈسک پر وغیرہ
 
لہذا صارف کے نقطہ نظر سے، KDB+ صرف ایک Q زبان کا مترجم ہے جس میں C# سے ٹیبلز اور ایس کیو ایل کی طرح LINQ طرز کے اظہارات کے لیے سپورٹ ہے۔ یہ KDB+ اور دیگر ڈیٹا بیسز اور اس کے اہم مسابقتی فائدہ کے درمیان سب سے اہم فرق ہے، جسے اکثر نظر انداز کیا جاتا ہے۔ یہ ڈیٹا بیس + غیر فعال معاون زبان نہیں ہے، بلکہ ایک مکمل طاقتور پروگرامنگ زبان + ڈیٹا بیس کے افعال کے لیے بلٹ ان سپورٹ ہے۔ یہ امتیاز KDB+ کے تمام فوائد کی فہرست میں فیصلہ کن کردار ادا کرے گا۔ مثال کے طور پر…
 

سائز

جدید معیارات کے مطابق، KDB+ سائز میں محض خوردبین ہے۔ یہ لفظی طور پر ایک سب میگا بائٹ ایگزیکیوٹیبل فائل اور ایک چھوٹی ٹیکسٹ فائل ہے جس میں کچھ سسٹم فنکشنز ہیں۔ حقیقت میں - ایک میگا بائٹ سے بھی کم، اور اس پروگرام کے لیے کمپنیاں سرور پر ایک پروسیسر کے لیے دسیوں ہزار ڈالر سالانہ ادا کرتی ہیں۔

  • یہ سائز KDB+ کو کسی بھی ہارڈ ویئر پر بہترین محسوس کرنے کی اجازت دیتا ہے - ایک Pi مائکرو کمپیوٹر سے لے کر ٹیرابائٹس میموری والے سرورز تک۔ یہ کسی بھی طرح سے فعالیت کو متاثر نہیں کرتا ہے؛ مزید یہ کہ، Q فوری طور پر شروع ہوتا ہے، جو اسے دوسری چیزوں کے ساتھ، بطور اسکرپٹنگ زبان کے استعمال کرنے کی اجازت دیتا ہے۔
  • اس سائز میں، Q انٹرپریٹر مکمل طور پر پروسیسر کیشے میں فٹ بیٹھتا ہے، جو پروگرام پر عمل درآمد کو تیز کرتا ہے۔
  • قابل عمل فائل کے اس سائز کے ساتھ، Q عمل میموری میں نہ ہونے کے برابر جگہ لیتا ہے؛ آپ ان میں سے سینکڑوں کو چلا سکتے ہیں۔ مزید یہ کہ، اگر ضروری ہو تو، Q ایک ہی عمل میں دسیوں یا سینکڑوں گیگا بائٹس میموری کے ساتھ کام کر سکتا ہے۔

استرتا

کیو ایپلی کیشنز کی ایک وسیع رینج کے لیے بہترین ہے۔ پروسیس Q ایک تاریخی ڈیٹا بیس کے طور پر کام کر سکتا ہے اور معلومات کے ٹیرا بائٹس تک فوری رسائی فراہم کر سکتا ہے۔ مثال کے طور پر، ہمارے پاس درجنوں تاریخی ڈیٹا بیس ہیں، جن میں سے کچھ میں ایک دن کا غیر کمپریسڈ ڈیٹا 100 گیگا بائٹس سے زیادہ لیتا ہے۔ تاہم، معقول پابندیوں کے تحت، ڈیٹا بیس کے لیے ایک استفسار دسیوں سے سینکڑوں ملی سیکنڈز میں مکمل کیا جائے گا۔ عام طور پر، ہمارے پاس صارف کی درخواستوں کے لیے ایک عالمگیر ٹائم آؤٹ ہے - 30 سیکنڈز - اور یہ بہت کم کام کرتا ہے۔
 
Q اتنی ہی آسانی سے ایک ان میموری ڈیٹا بیس ہو سکتا ہے۔ نیا ڈیٹا ان میموری ٹیبلز میں اتنی تیزی سے شامل کیا جاتا ہے کہ صارف کی درخواستیں محدود عنصر ہیں۔ جدولوں میں موجود ڈیٹا کالموں میں محفوظ کیا جاتا ہے، جس کا مطلب ہے کہ کالم پر کوئی بھی آپریشن پروسیسر کیشے کو پوری صلاحیت کے ساتھ استعمال کرے گا۔ اس کے علاوہ، KX نے پروسیسر کی ویکٹر ہدایات کے ذریعے ریاضی جیسے تمام بنیادی آپریشنز کو لاگو کرنے کی کوشش کی، ان کی رفتار کو زیادہ سے زیادہ بنایا۔ Q ایسے کام بھی انجام دے سکتا ہے جو ڈیٹا بیس کے لیے عام نہیں ہیں - مثال کے طور پر، ڈیٹا کو پراسیس کرنا اور "حقیقی وقت" میں حساب لگانا (ٹاسک کے لحاظ سے دسیوں ملی سیکنڈ سے کئی سیکنڈ تک کی تاخیر کے ساتھ) مختلف وقت کے لیے مالیاتی آلات کے لیے مختلف ایگریگیشن افعال وقفے یا مارکیٹ میں کامل لین دین کے اثر و رسوخ کا ایک ماڈل بنائیں اور اس کی تکمیل کے فوراً بعد اس کی پروفائلنگ کو انجام دیں۔ اس طرح کے کاموں میں، اکثر اہم وقت کی تاخیر Q نہیں ہوتی، بلکہ مختلف ذرائع سے ڈیٹا کو ہم آہنگ کرنے کی ضرورت ہوتی ہے۔ تیز رفتاری اس حقیقت کی وجہ سے حاصل کی جاتی ہے کہ ڈیٹا اور ان پر کارروائی کرنے والے فنکشنز ایک ہی عمل میں ہوتے ہیں، اور پروسیسنگ کو کم کر کے کئی QSQL اظہارات اور جوائن کیے جاتے ہیں، جن کی تشریح نہیں کی جاتی ہے، لیکن بائنری کوڈ کے ذریعے عمل میں لایا جاتا ہے۔
 
آخر میں، آپ Q میں کوئی بھی سروس پروسیس لکھ سکتے ہیں۔ مثال کے طور پر، گیٹ وے عمل کرتا ہے جو صارف کی درخواستوں کو ضروری ڈیٹا بیس اور سرورز میں خود بخود تقسیم کرتا ہے۔ پروگرامر کو توازن، ترجیح، غلطی برداشت، رسائی کے حقوق، کوٹہ اور بنیادی طور پر اس کے دل کی خواہش کے لیے کسی بھی الگورتھم کو نافذ کرنے کی مکمل آزادی ہے۔ یہاں اصل مسئلہ یہ ہے کہ یہ سب آپ کو خود کرنا پڑے گا۔
 
مثال کے طور پر، میں بتاؤں گا کہ ہمارے پاس کس قسم کے عمل ہیں۔ ان سب کو فعال طور پر استعمال کیا جاتا ہے اور مل کر کام کرتے ہیں، درجنوں مختلف ڈیٹا بیس کو ایک میں ملا کر، متعدد ذرائع سے ڈیٹا پر کارروائی کرتے ہیں اور سینکڑوں صارفین اور ایپلیکیشنز کی خدمت کرتے ہیں۔

  • ڈیٹا کے ذرائع سے کنیکٹر (فیڈ ہینڈلر)۔ یہ عمل عام طور پر بیرونی لائبریریوں کا استعمال کرتے ہیں جو Q میں لوڈ ہوتے ہیں۔ Q میں C انٹرفیس انتہائی آسان ہے اور آپ کو کسی بھی C/C++ لائبریری کے لیے آسانی سے پراکسی فنکشن بنانے کی اجازت دیتا ہے۔ Q ہینڈل کرنے کے لیے کافی تیز ہے، مثال کے طور پر، تمام یورپی اسٹاک ایکسچینجز سے بیک وقت FIX پیغامات کے سیلاب پر کارروائی کرنا۔
  • ڈیٹا ڈسٹری بیوٹرز (ٹکر پلانٹ) جو کنیکٹرز اور صارفین کے درمیان ایک درمیانی لنک کا کام کرتے ہیں۔ ایک ہی وقت میں، وہ آنے والے ڈیٹا کو خصوصی بائنری لاگ میں لکھتے ہیں، کنکشن کے نقصان یا دوبارہ شروع ہونے کے خلاف صارفین کو مضبوطی فراہم کرتے ہیں۔
  • ان میموری ڈیٹا بیس (rdb)۔ یہ ڈیٹا بیس خام، تازہ ڈیٹا کو میموری میں محفوظ کرکے اس تک تیز ترین رسائی فراہم کرتے ہیں۔ عام طور پر، وہ دن کے وقت میزوں میں ڈیٹا جمع کرتے ہیں اور رات کو انہیں دوبارہ ترتیب دیتے ہیں۔
  • پرسسٹ ڈیٹا بیس (پی ڈی بی)۔ یہ ڈیٹا بیس اس بات کو یقینی بناتے ہیں کہ آج کا ڈیٹا تاریخی ڈیٹا بیس میں محفوظ ہے۔ ایک اصول کے طور پر، rdb کے برعکس، وہ ڈیٹا کو میموری میں محفوظ نہیں کرتے ہیں، لیکن دن کے وقت ڈسک پر ایک خاص کیش استعمال کرتے ہیں اور آدھی رات کو ڈیٹا کو تاریخی ڈیٹا بیس میں کاپی کرتے ہیں۔
  • تاریخی ڈیٹا بیس (ایچ ڈی بی)۔ یہ ڈیٹا بیس پچھلے دنوں، مہینوں اور سالوں کے ڈیٹا تک رسائی فراہم کرتے ہیں۔ ان کا سائز (دنوں میں) صرف ہارڈ ڈرائیوز کے سائز سے محدود ہے۔ ڈیٹا کہیں بھی موجود ہوسکتا ہے، خاص طور پر رسائی کو تیز کرنے کے لیے مختلف ڈسکوں پر۔ منتخب کرنے کے لیے کئی الگورتھم کا استعمال کرتے ہوئے ڈیٹا کو کمپریس کرنا ممکن ہے۔ ڈیٹا بیس کی ساخت اچھی طرح سے دستاویزی اور سادہ ہے، ڈیٹا کو کالم کے حساب سے باقاعدہ فائلوں میں محفوظ کیا جاتا ہے، اس لیے ان پر کارروائی کی جا سکتی ہے، بشمول آپریٹنگ سسٹم کے ذریعے۔
  • مجموعی معلومات کے ساتھ ڈیٹا بیس۔ وہ مختلف مجموعوں کو ذخیرہ کرتے ہیں، عام طور پر اس کے ساتھ، آلہ کے نام اور وقت کے وقفے کے لحاظ سے گروپ کیا جاتا ہے۔ ان میموری ڈیٹا بیس ہر آنے والے پیغام کے ساتھ اپنی حالت کو اپ ڈیٹ کرتے ہیں، اور تاریخی ڈیٹا بیس پہلے سے شمار شدہ ڈیٹا کو محفوظ کرتے ہیں تاکہ تاریخی ڈیٹا تک رسائی کو تیز کیا جا سکے۔
  • آخر میں گیٹ وے کے عملسروسنگ ایپلی کیشنز اور صارفین. Q آپ کو آنے والے پیغامات کی مکمل طور پر غیر مطابقت پذیر پروسیسنگ کو لاگو کرنے، انہیں ڈیٹا بیس میں تقسیم کرنے، رسائی کے حقوق کی جانچ پڑتال وغیرہ کی اجازت دیتا ہے۔ نوٹ کریں کہ پیغامات محدود نہیں ہیں اور اکثر ایس کیو ایل اظہار نہیں ہوتے ہیں، جیسا کہ دوسرے ڈیٹا بیس میں ہوتا ہے۔ اکثر، ایس کیو ایل ایکسپریشن ایک خاص فنکشن میں چھپا ہوتا ہے اور صارف کی طرف سے درخواست کردہ پیرامیٹرز کی بنیاد پر بنایا جاتا ہے - وقت کو تبدیل کیا جاتا ہے، فلٹر کیا جاتا ہے، ڈیٹا کو نارملائز کیا جاتا ہے (مثال کے طور پر، اگر ڈیویڈنڈ ادا کیا گیا ہو تو اسٹاک کی قیمت برابر ہوجاتی ہے)، وغیرہ۔

ایک ڈیٹا کی قسم کے لیے مخصوص فن تعمیر:

KDB+ ڈیٹا بیس: فنانس سے فارمولا 1 تک

رفتار

اگرچہ Q ایک تشریح شدہ زبان ہے، یہ ایک ویکٹر زبان بھی ہے۔ اس کا مطلب یہ ہے کہ بہت سے بلٹ ان فنکشنز، خاص طور پر ریاضی والے، کسی بھی شکل کے دلائل لیتے ہیں - نمبرز، ویکٹر، میٹرکس، فہرستیں - اور پروگرامر سے توقع کی جاتی ہے کہ وہ پروگرام کو سرنی آپریشنز کے طور پر نافذ کرے گا۔ ایسی زبان میں، اگر آپ دس لاکھ عناصر کے دو ویکٹرز کو جوڑتے ہیں، تو اس سے کوئی فرق نہیں پڑتا کہ زبان کی تشریح کی گئی ہے؛ اضافہ ایک انتہائی بہتر بائنری فنکشن کے ذریعے کیا جائے گا۔ چونکہ Q پروگراموں میں وقت کا بڑا حصہ ان ٹیبلز کے ساتھ آپریشنز پر صرف ہوتا ہے جو ان بنیادی ویکٹرائزڈ فنکشنز کو استعمال کرتے ہیں، اس لیے آؤٹ پٹ ایک بہت ہی معقول آپریٹنگ اسپیڈ ہے، جس سے ہمیں ایک عمل میں بھی بہت زیادہ ڈیٹا پراسیس کرنے کی اجازت ملتی ہے۔ یہ Python میں ریاضیاتی لائبریریوں کی طرح ہے - اگرچہ ازگر بذات خود ایک بہت ہی سست زبان ہے، لیکن اس میں numpy جیسی بہت سی بہترین لائبریریاں ہیں جو آپ کو ایک مرتب شدہ زبان کی رفتار سے عددی ڈیٹا پر کارروائی کرنے کی اجازت دیتی ہیں (ویسے، numpy نظریاتی طور پر Q کے قریب ہے۔ )۔
 
اس کے علاوہ، KX نے میزوں کو ڈیزائن کرنے اور ان کے ساتھ کام کو بہتر بنانے کے لیے بہت محتاط انداز اپنایا۔ سب سے پہلے، کئی قسم کے اشاریہ جات سپورٹ کیے جاتے ہیں، جو بلٹ ان فنکشنز کے ذریعے سپورٹ ہوتے ہیں اور ان کا اطلاق نہ صرف ٹیبل کالموں پر، بلکہ کسی بھی ویکٹر پر بھی کیا جا سکتا ہے - گروپ بندی، چھانٹی، انفرادیت کی خصوصیت اور تاریخی ڈیٹا بیس کے لیے خصوصی گروپ بندی۔ انڈیکس آسانی سے لاگو ہوتا ہے اور کالم/ویکٹر میں عناصر کو شامل کرتے وقت خود بخود ایڈجسٹ ہوجاتا ہے۔ اشاریہ جات کو یکساں طور پر کامیابی کے ساتھ میز کے کالموں پر میموری اور ڈسک پر لاگو کیا جا سکتا ہے۔ QSQL استفسار پر عمل کرتے وقت، اگر ممکن ہو تو اشاریہ جات خود بخود استعمال ہوتے ہیں۔ دوم، تاریخی ڈیٹا کے ساتھ کام OS فائلوں (میموری میپ) کو ظاہر کرنے کے طریقہ کار کے ذریعے کیا جاتا ہے۔ بڑی میزیں کبھی بھی میموری میں لوڈ نہیں ہوتی ہیں؛ اس کے بجائے، ضروری کالموں کو براہ راست میموری میں میپ کیا جاتا ہے اور ان میں سے صرف وہی حصہ لوڈ ہوتا ہے (اشاریہ جات یہاں بھی مدد کرتے ہیں) جس کی ضرورت ہوتی ہے۔ اس سے پروگرامر کو کوئی فرق نہیں پڑتا کہ ڈیٹا میموری میں ہے یا نہیں؛ mmap کے ساتھ کام کرنے کا طریقہ کار Q کی گہرائیوں میں مکمل طور پر پوشیدہ ہے۔
 
KDB+ ایک رشتہ دار ڈیٹا بیس نہیں ہے؛ جدولوں میں صوابدیدی ڈیٹا ہو سکتا ہے، جب کہ جدول میں قطاروں کی ترتیب نئے عناصر کے شامل ہونے پر تبدیل نہیں ہوتی اور سوالات لکھتے وقت استعمال کی جا سکتی ہے اور ہونی چاہیے۔ ٹائم سیریز (ایکسچینجز، ٹیلی میٹری، ایونٹ لاگ سے ڈیٹا) کے ساتھ کام کرنے کے لیے اس فیچر کی فوری ضرورت ہے، کیونکہ اگر ڈیٹا کو وقت کے مطابق ترتیب دیا جاتا ہے، تو صارف کو پہلی یا آخری قطار یا N تلاش کرنے کے لیے کسی بھی SQL ٹرکس استعمال کرنے کی ضرورت نہیں ہے۔ ٹیبل میں قطاریں، اس بات کا تعین کریں کہ کون سی لائن Nth لائن کی پیروی کرتی ہے، وغیرہ۔ ٹیبل جوائنز کو مزید آسان بنایا گیا ہے، مثال کے طور پر، 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 میں فعل کہا جاتا ہے) کے ذریعے تمام لوپس کو لاگو کرنا چاہیے، اور کبھی بھی ویکٹر آپریشنز کو ایٹم کے ساتھ بدل کر پیسہ بچانے کی کوشش نہ کریں۔ مثال کے طور پر، ایک صف میں کسی عنصر کی Nth موجودگی کا اشاریہ تلاش کرنے کے لیے، آپ کو لکھنا چاہیے:

1. (where element=vector)[N]  

اگرچہ یہ C/Java معیارات کے لحاظ سے انتہائی غیر موثر معلوم ہوتا ہے (= ایک بولین ویکٹر بناتا ہے، جہاں اس میں موجود عناصر کے حقیقی اشاریہ جات واپس کرتا ہے)۔ لیکن یہ اشارے اظہار کے معنی کو مزید واضح کرتا ہے اور آپ سست ایٹم کے بجائے تیز رفتار ویکٹر آپریشنز کا استعمال کرتے ہیں۔ ایک ویکٹر لینگویج اور دوسروں کے درمیان تصوراتی فرق پروگرامنگ کے لیے ضروری اور فنکشنل اپروچ کے درمیان فرق سے موازنہ ہے، اور آپ کو اس کے لیے تیار رہنے کی ضرورت ہے۔
 
کچھ صارفین QSQL سے بھی ناخوش ہیں۔ نقطہ یہ ہے کہ یہ صرف اصلی SQL کی طرح لگتا ہے۔ حقیقت میں، یہ ایس کیو ایل کی طرح کے تاثرات کا صرف ایک ترجمان ہے جو استفسار کی اصلاح کی حمایت نہیں کرتا ہے۔ صارف کو خود سے زیادہ سے زیادہ سوالات لکھنے چاہئیں، اور Q میں، جس کے لیے بہت سے لوگ تیار نہیں ہیں۔ دوسری طرف، یقیناً، آپ بلیک باکس آپٹیمائزر پر بھروسہ کرنے کے بجائے ہمیشہ بہترین سوال خود لکھ سکتے ہیں۔
 
اس کے علاوہ، Q - Q For Mortals پر ایک کتاب مفت میں دستیاب ہے۔ کمپنی کی ویب سائٹ, وہاں بھی بہت سے دوسرے مفید مواد جمع ہیں.
 
ایک اور بڑا نقصان لائسنس کی قیمت ہے۔ یہ دسیوں ہزار ڈالر فی سی پی یو سالانہ ہے۔ صرف بڑی کمپنیاں ہی اس طرح کے اخراجات برداشت کر سکتی ہیں۔ حال ہی میں، KX نے اپنی لائسنسنگ پالیسی کو مزید لچکدار بنایا ہے اور صرف Google اور Amazon کلاؤڈز میں KDB+ کے استعمال یا کرایہ کے لیے ادائیگی کرنے کا موقع فراہم کرتا ہے۔ KX ڈاؤن لوڈ کے لیے بھی پیش کرتا ہے۔ غیر تجارتی مقاصد کے لیے مفت ورژن (32 بٹ ورژن یا درخواست پر 64 بٹ)۔
 

مقابلہ

اسی طرح کے اصولوں پر بنائے گئے بہت سے مخصوص ڈیٹا بیس ہیں - کالم، ان میموری، ڈیٹا کی بہت بڑی مقدار پر مرکوز۔ مسئلہ یہ ہے کہ یہ خصوصی ڈیٹا بیس ہیں۔ ایک شاندار مثال کلک ہاؤس ہے۔ اس ڈیٹا بیس میں ڈسک پر ڈیٹا کو ذخیرہ کرنے اور انڈیکس بنانے کے لیے KDB+ سے بہت ملتا جلتا اصول ہے؛ یہ کچھ سوالات KDB+ سے زیادہ تیزی سے انجام دیتا ہے، اگرچہ نمایاں طور پر نہیں۔ لیکن ڈیٹا بیس کے طور پر بھی، کلک ہاؤس KDB+ سے زیادہ ماہر ہے - ویب اینالیٹکس بمقابلہ صوابدیدی ٹائم سیریز (یہ فرق بہت اہم ہے - اس کی وجہ سے، مثال کے طور پر، کلک ہاؤس میں ریکارڈ کی ترتیب کو استعمال کرنا ممکن نہیں ہے)۔ لیکن، سب سے اہم بات، کلک ہاؤس کے پاس KDB+ کی استعداد نہیں ہے، ایک ایسی زبان جو ڈیٹا بیس میں ڈیٹا کو براہ راست پروسیسنگ کی اجازت دیتی ہے، بجائے اس کے کہ اسے پہلے علیحدہ ایپلیکیشن میں لوڈ کیا جائے، صوابدیدی SQL اظہارات کی تعمیر، استفسار میں صوابدیدی افعال کا اطلاق، عمل تخلیق تاریخی ڈیٹا بیس کے افعال کے نفاذ سے متعلق نہیں ہے۔ اس لیے، دوسرے ڈیٹا بیس کے ساتھ KDB+ کا موازنہ کرنا مشکل ہے؛ وہ کچھ استعمال کے معاملات میں بہتر ہو سکتے ہیں یا جب کلاسک ڈیٹا بیس کے کاموں کی بات آتی ہے تو بہتر ہو سکتے ہیں، لیکن میں عارضی ڈیٹا پر کارروائی کرنے کے لیے اتنے ہی موثر اور ورسٹائل ٹول کے بارے میں نہیں جانتا ہوں۔
 

ازگر کا انضمام

ٹیکنالوجی سے ناواقف لوگوں کے لیے KDB+ کا استعمال آسان بنانے کے لیے، KX نے ایک ہی عمل میں Python کے ساتھ مضبوطی سے مربوط ہونے کے لیے لائبریریاں بنائیں۔ آپ یا تو Q سے کسی بھی Python فنکشن کو کال کر سکتے ہیں، یا اس کے برعکس - 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

نیا تبصرہ شامل کریں