Streaming TimescaleDB和PipelineDB集成
(我本来打算在DBA SE上发布,但没有时间刻度标记。) 我使用TimescaleDB来存储每秒500-1000次插入的实时流,并且需要在数据进入时立即将其传递给客户机应用程序 我不一定要处理原始毫秒数据(我可以),但我确实需要客户端接收1、5、10、30秒(等等)的实时数据聚合,因为每个时间段/时隙都准备好了。所以,每秒钟、每5秒、每10秒等等(每个时隙的值应该是max、min等) 我打算使用Postgres的触发器来聚合数据,并以瀑布式的方式将其放入一个新表中,然后使用listen/notify告诉客户机何时每个时间块都“就绪”,但后来我遇到了PipelineDB 然而,我并不清楚如何设置该体系结构。我是否希望PipelineDB获取初始数据流,然后将其传递到Timescale hyper表?我是否希望Timescale将数据传递到管道?我假设管道将是客户的联系点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
最具性能的通用架构是什么;我如何在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跟踪
中的完整原始数据
但是,由于采用了基于行的触发器功能,因此每次插入都会受到惩罚
如果你能接受,以上可能是你最好的机会