Streaming TimescaleDB和PipelineDB集成

Streaming TimescaleDB和PipelineDB集成,streaming,aggregation,real-time-data,pipelinedb,timescaledb,Streaming,Aggregation,Real Time Data,Pipelinedb,Timescaledb,(我本来打算在DBA SE上发布,但没有时间刻度标记。) 我使用TimescaleDB来存储每秒500-1000次插入的实时流,并且需要在数据进入时立即将其传递给客户机应用程序 我不一定要处理原始毫秒数据(我可以),但我确实需要客户端接收1、5、10、30秒(等等)的实时数据聚合,因为每个时间段/时隙都准备好了。所以,每秒钟、每5秒、每10秒等等(每个时隙的值应该是max、min等) 我打算使用Postgres的触发器来聚合数据,并以瀑布式的方式将其放入一个新表中,然后使用listen/noti

(我本来打算在DBA SE上发布,但没有时间刻度标记。)

我使用TimescaleDB来存储每秒500-1000次插入的实时流,并且需要在数据进入时立即将其传递给客户机应用程序

我不一定要处理原始毫秒数据(我可以),但我确实需要客户端接收1、5、10、30秒(等等)的实时数据聚合,因为每个时间段/时隙都准备好了。所以,每秒钟、每5秒、每10秒等等(每个时隙的值应该是max、min等)

我打算使用Postgres的触发器来聚合数据,并以瀑布式的方式将其放入一个新表中,然后使用listen/notify告诉客户机何时每个时间块都“就绪”,但后来我遇到了PipelineDB

然而,我并不清楚如何设置该体系结构。我是否希望PipelineDB获取初始数据流,然后将其传递到Timescale hyper表?我是否希望Timescale将数据传递到管道?我假设管道将是客户的联系点


最具性能的通用架构是什么;我如何在Timescale和Pipeline之间传递数据?

目前,PipelineDB和TimescaleDB之间没有本机集成,但不久的将来可能会有。就性能而言,目前最好的选择是简单地将写入分为TimescaleDB和PipelineDB。

这当然是可能的(使用测试设置中的实际结构):

  • 创建流,例如:
  • 创建外部表s\u跟踪(
    c_时间戳时间戳,
    c_session BIGINT,
    c_请求BIGINT,
    c_客户VARCHAR,
    c_性别VARCHAR,
    c_路径VARCHAR
    )服务器pipelinedb;
    
  • 创建插入条目的触发器函数,例如:
  • CREATE函数func\u tracking\u insert\u pipe()返回触发器
    语言plpgsql AS
    $$开始
    插入
    跟踪(c_时间戳、c_会话、c_请求、c_客户端、c_性别、c_路径)
    价值观
    (NEW.c_时间戳、NEW.c_会话、NEW.c_请求、NEW.c_客户端、NEW.c_性别、NEW.c_路径)
    ;
    归还新的;
    结束$$
    ;
    
  • 创建一个示例,例如:
  • CREATE VIEW v_t_forward_原始数据
    使用(操作=变换,输出函数=函数\u跟踪\u插入\u管道)
    作为
    从s_跟踪中选择c_时间戳、c_会话、c_请求、c_客户端、c_性别、c_路径
    ;
    
  • 插入到流而不是表中:
  • 插入到s_跟踪中
    (c_时间戳、c_会话、c_请求、c_客户端、c_性别、c_路径)
    ...
    
    …这将导致生成为流
    s\u跟踪定义的所有度量以及(hyper-)表
    t\u跟踪
    中的完整原始数据

    但是,由于采用了基于行的触发器功能,因此每次插入都会受到惩罚

    如果你能接受,以上可能是你最好的机会