4

我可以访问实时 KDB 服务器,该服务器具有每毫秒到达新数据的表。

目前,我只是使用一种简单的方法,基本上就像:

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

以确保我的数据(名为data)不断更新。

但是,uj它非常慢(可能是由于不断重新分配内存)并且轮询非常尴尬。

我听说 KDB 是为了擅长处理这种流式滴答数据,那么有更好的方法吗?也许一些不需要的基于推送的方法uj

4

2 回答 2

5

而不是轮询。使用 kdb+勾选 kdb+ 的发布订阅者架构。

于 2014-06-04T21:36:40.273 回答
0

如果有实时,大概是有一种植物在喂它。您可以订阅tickerplant:

.u.sub[`;`];

这意味着子所有表,所有符号。调用的结果是一个数组,其中第 0 个元素是表名,第 1 个元素是tickerplant 为该表保存的当前数据(通常为空或少量行)。然后,tickerplant 会将句柄缓存到您的 kdb 实例并继续向其发送数据。但它假设upd您的 kdb 实例上有一个可以处理请求的函数。

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

或者

upd:insert

(一样)

t使用表符号名称 ( ) 和要插入其中的数据( )调用 upd 函数x

因此,总体而言,一个好的直接实施将是:

upd:insert;
@[`.;:;t:.u.sub[`;`][0];t[1]];  //set result of sub to t, set t to t[1] (initial result)
于 2014-06-05T06:53:06.000 回答