سؤال

لدي إمكانية الوصول إلى خادم KDB في الوقت الفعلي والذي يحتوي على جداول تحتوي على بيانات جديدة تصل كل مللي ثانية.

حاليًا، أستخدم فقط طريقة ساذجة وهي في الأساس مثل:

.z.ts:{
    newData: getNewData[];   / get data arriving in the last second
    data::data uj newData;
};
\t 100;

للتأكد من أن بياناتي (المسماة data) يتم تحديثها باستمرار.

ومع ذلك، uj بطيء جدًا (ربما بسبب إعادة التخصيص المستمر للذاكرة) والاستقصاء أمر غريب تمامًا.

لقد سمعت أن KDB يهدف إلى أن يكون جيدًا في التعامل مع هذا النوع من بيانات التجزئة المتدفقة، فهل هناك طريقة أفضل؟ربما بعض الأساليب القائمة على الدفع دون الحاجة إليها uj?

هل كانت مفيدة؟

المحلول

بدلا من الاقتراع.استخدم kdb+حدد بنية المشترك للنشر لـ kdb+.

نصائح أخرى

إذا كان هناك وقت حقيقي، فمن المفترض أن يكون هناك نبات يغذيه.يمكنك الاشتراك في موقع تيكر بلانت:

.u.sub[`;`];

وهذا يعني جميع الجداول الفرعية، وجميع الرموز.نتيجة الاستدعاء هي مصفوفة حيث العنصر 0 هو اسم الجدول والعنصر الأول هو البيانات الحالية التي يحتفظ بها مصنع التجزئة لهذا الجدول (عادةً ما يكون فارغًا أو يحتوي على عدد صغير من الصفوف).سيقوم Tickerplant بعد ذلك بتخزين المقبض في مثيل kdb الخاص بك ويستمر في إرسال البيانات إليه.ولكن يفترض أن هناك upd وظيفة على مثيل kdb الخاص بك والتي يمكنها التعامل مع الطلب.

upd:{[t;x] t insert x}

أو

upd:insert

(نفس الشيء)

يتم استدعاء الدالة upd باسم رمز الجدول (t) والبيانات المراد إدراجها فيها (x).

لذا فإن التنفيذ المباشر الجيد بشكل عام سيكون:

upd:insert;
@[`.;:;t:.u.sub[`;`][0];t[1]];  //set result of sub to t, set t to t[1] (initial result)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top