流式关系数据库-PipelineDB
2017-10-21 14:42:15 阿炯

PipelineDB是基于PostgreSQL研发的一种流式关系数据库(0.8.1基于9.4.4),这种数据库的特点是自动处理流式数据,不存储原始数据,只存储处理后的数据,所以非常适合当下流行的实时流式数据处理,例如网站流量统计,IT服务的监控统计等等。

The Streaming SQL Database


An open-source relational database that runs SQL queries continuously on streams, incrementally storing results in tables.

pipelinedb是基于PostgreSQL的一个流式计算数据库,纯C代码,效率极高(32c机器单机日处理流水达到了250.56亿条)。同时它具备了PostgreSQL强大的功能基础,在物联网(IoT)有非常广泛的应用场景,越来越多的用户开始从其他的流计算平台迁移到pipelineDB。pipelinedb的用法非常简单,首先定义stream(流),然后基于stream定义对应的transform(事件触发模块),以及Continuous Views(实时统计模块)。

数据往流里面插入,transform和Continuous Views就在后面实时的对流里的数据进行处理,对开发人员来说很友好,很高效。值得庆祝的还有,所有的接口都是SQL操作,非常的方便,大大降低了开发难度。

基本概念

1. 什么是流
流是基础,Continuous Views和transform则是基于流中的数据进行处理的手段。对于同一份数据,只需要定义一个流,写入一份即可。

如果对同一份数据有多个维度的统计,可以写在一条SQL完成的(如同一维度的运算或者可以支持窗口的多维度运算),只需定义一个Continuous Views或transform。如果不能在同一条SQL中完成计算,则定义多个Continuous Views或transform即可。如果有多份数据来源(例如设计时就已经区分了不同的表)时,定义不同的流即可;

2. 什么是流视图
流视图,其实就是定义统计分析的QUERY, 例如select id, count(*), avg(x), ... from stream_1 group by ...; 就属于一个流视图。定义好之后,数据插入流(stream_1),这个流视图就会不断增量的进行统计,你只要查询这个流视图,就可以查看到实时的统计结果。

数据库中存储的是实时统计的结果(实际上是在内存中进行增量合并的,增量的方式持久化)。

3. 什么是Transforms
与流视图不同的是,transform是用来触发事件的,所以它可以不保留数据,但是可以设定条件,当记录满足条件时,就触发事件。例如监视传感器的值,当值的范围超出时,触发报警(如通过REST接口发给指定的server),或者将报警记录下来(通过触发器函数)。

4. pipelinedb继承了PostgreSQL很好的扩展性,例如支持了概率统计相关的功能,例如HLL等。用起来也非常的爽,例如统计网站的UV,或者红绿灯通过的汽车编号唯一值车流,通过手机信号统计基站辐射方圆多少公里的按时UV等。
Bloom Filter    
Count-Min Sketch    
Filtered-Space Saving Top-K    
HyperLogLog    
T-Digest    

5. Sliding Windows

因为很多场景的数据有时效,或者有时间窗口的概念,所以pipelinedb提供了窗口分片的接口,允许用户对数据的时效进行定义。例如仅仅统计最近一分钟的时间窗口内的统计数据。比如热力图,展示最近一分钟的热度,对于旧的数据不关心,就可以适应SW进行定义,从而保留的数据少,对机器的要求低,效率还高。

6. 流视图 支持JOIN,支持JOIN,支持JOIN,重要的事情说三遍。
流 JOIN 流(未来版本支持,目前可以通过transform间接实现)
流 JOIN TABLE(已支持)

参考来源
PostgreSQL 百万级每秒的流式实时统计应用

流计算风云再起 - PostgreSQL携PipelineDB力挺IoT


最新版本:


官方主页:https://www.pipelinedb.com/