【问题标题】:How to stream data in KDB?如何在 KDB 中流式传输数据?
【发布时间】:2014-06-04 20:26:52
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: real-time kdb q-lang


    【解决方案1】:

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

    【讨论】:

    • 谢谢 - 但客户如何退订?我原以为可能会在没有参数的情况下调用.u.sub,但时间存储的网站说“任何参数的空符号`充当通配符并返回所有表r syms的数据”。
    • 只需断开与tickerplant的连接
    【解决方案2】:

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

    .u.sub[`;`];
    

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

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

    upd:insert
    

    (同样的事情)

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

    因此,总体而言,一个很好的简单实现是:

    upd:insert;
    @[`.;:;t:.u.sub[`;`][0];t[1]];  //set result of sub to t, set t to t[1] (initial result)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 2015-02-07
      • 1970-01-01
      相关资源
      最近更新 更多