如何在 kdb+/q 中为每个新行触发更新?

How to fire an update per new row in kdb+/q?

我正在尝试创建一项服务,将来自多个传感器的不规则间隔的事件聚合到 1 秒时间桶/采样率(看起来好像不这样做会在计算上 expensive/memory 密集),当一秒钟通过,即形成一个新行我想 fire/trigger 一个事件/发布订阅者根据 kdb+ tick 架构接收到的最后一行。

根据我对流处理的理解,应该在 运行 聚合之前缓冲事件,我的问题是如何在 kdb+/q 中实现这一点,从而在特定时间间隔(1 秒)完成后在这种情况下)可以对最新的缓冲数据执行聚合,其结果附加到 table/sent 到包含不规则传感器数据的规则间隔聚合的订阅者,并清除过程中的缓冲区。

简单来说:

1) 如何实现收集不规则间隔事件的缓冲功能,同时保持内存限制?

2) 如何以一定间隔准确聚合不规则间隔的事件,形成缓冲事件的规则间隔聚合并将该聚合发送给订阅者?

(我对这里的功能的理解可能是完全错误的,如果有更好的方法来实现这个,那就太好了!)

非常感谢您对此事的建议。

谢谢。

Terry 的评论是正确的,TP 会在启动进程时按计时器指定的时间段进行批处理。例如,对于 运行 具有 1 秒批处理的香草 TP 将如下所示。

q tick.q sym  .  -p 5010 -t 1000

我强烈建议不要在 TP 内进行任何处理,它应该充当入口点和恢复日志的创建者。 运行 TP 以批处理模式还是零延迟(不提供 -t 参数)取决于您收到的更新的性质,tickerplant throughput optimization 上的白皮书是您的最佳选择在这里打赌寻求建议。

您可以链接 tickerplants,在其中执行进一步的聚合或计算,但我个人会选择按如下方式运行实时引擎 (RTE)

  1. RTE 是 table 的 TP 订阅者(例如,trades
  2. 可以使用 .z.ts 执行聚合或从 table 的时间数据触发,前者更容易实现。这些聚合是聚合 table 的一部分,与原始数据 table 不同,比如 tradesAgg
  3. 聚合的最后阶段将涉及发布回 TP。这确保您的 TP 日志文件包含系统输入或生成的所有数据的历史记录。
  4. 您的 RDB 将订阅此聚合 table 并通过 RDB,数据会进入你的历史数据库