一、PipeLineDB简介
1.1 pipelinedb是什么
pipelinedb是基于PostgreSQL的一个流式计算数据库,纯C代码,效率极高(32c机器,单机日处理流水达到了250.56亿条)。同时它具备了PostgreSQL强大的功能基础,正在掀起一场流计算数据库制霸的腥风血雨。
1.2 pipelinedb特征
(1)基于Postgre数据库, 可以使用数据库库的函数,表达式,存储过程等功能,自身功能就已经足够强大了。而且还支持proxy等分表分库插件。
(2)所有的流必须以Stream开始,先创建stream然后才可以使用view或者transform来查询。stream中的数据必须通过insert插入。
(3)view和transform的区别在于,view的计算结果会保存在pg数据库中,transform不会保存,只能定义触发器来将结果输出到其他地方。
(4)可以在存储过程中调用view,但是 transform由于结果已经被重定向了,所以无法调用。
(5)在没有transofrm或者view的情况下性能很高,在8U32G的虚拟机下性能接近10WTPS。如果使用view之后性能会急剧下降。即使将pg的data空间放在内存盘中,性能也会下降的很厉害,一个stream下挂了10个view,TPS大约在3000左右。可见,PipelineDB的性能消耗在于计算部分,即使数据不落盘,但是计算仍然还是比较消耗性能。
1.3 pipelinedb适用场景
凡是需要流式处理的场景,pipelinedb都是适用的,例如 :
(1)交通
流式处理交通传感器(如路感、红绿灯)上报的数据,实时的反应交通情况如车流(流视图中完成)。动态的触发事件响应(transform中完成)如交通事故。
(2)水文监测
流式监测传感器的数据,水质的变化,动态的触发事件响应(transform中完成)如水质受到污染。
(3)车联网
结合PostGIS,实现对汽车的位置实时跟踪和轨迹合并,动态的绘制大盘数据(分时,车辆区域分布)。
(4)物流动态
动态的跟踪包裹在每个环节的数据,聚合结果,在查询时不需要再从大量的数据中筛选多条(降低离散扫描)。
(5)金融数据实时处理
例如用户设定了某个股票达到多少时,进行买入或卖出的操作,使用transform的事件处理机制,可以快速的进行买卖。
又比如,实时的对股票的指标数据进行一些数学模型的运算,实时输出运算结果,绘制大盘数据。
(6)公安刑侦
例如在已知可疑车辆的车牌时,在流式处理天眼拍摄并实时上传的车牌信息时,通过transform设置的规则,遇到可疑车牌时,触发事件,快速的知道可疑车辆的实时行踪。
(7)app埋点(feed)数据实时分析
很多APP都会设置埋点,方便对用户的行为,或者业务处理逻辑进行跟踪,如果访问量大,数据量可能非常庞大,在没有流式处理前,我们可能需要将数据收集到一个大型的数据仓库,进行离线分析。
但是有些时候,离线分析可能是不够用的,比如要根据用户的实时行为,或者大盘的实时行为,对用户做出一些动态的推荐,或者营销,那么就要用到流式实时处理了。
(8)网络协议层流量分析
比如对办公网络、运营商网关、某些服务端的流量分析
1.4 pipeline的优势
这是个拼爹的年代,pipelinedb有个很牛逼的爸爸PostgreSQL,出身伯克利大学,有扎实的理论基础,历经了43年的进化,在功能、性能、扩展能力、理论基础等方面无需质疑一直处于领先的位置。
搞流式计算,计算是灵魂,算法和支持的功能排在很重要的位置。
PostgreSQL的强大之处在于统计维度极其丰富,数据类型也极其丰富。
同时还支持扩展,常见的例如
MADLib
PostGIS
路径规划
wavelet
基因
化学
二、PipeLineDB基本概念
2.1什么是流
流是基础,Continuous Views和transform则是基于流中的数据进行处理的手段。
对于同一份数据,只需要定义一个流,写入一份即可。
如果对同一份数据有多个维度的统计,可以写在一条SQL完成的(如同一维度的运算或者可以支持窗口的多维度运算),只需定义一个Continuous Views或transform。如果不能在同一条SQL中完成计算,则定义多个Continuous Views或transform即可。
如果有多份数据来源(例如设计时就已经区分了不同的表)时,定义不同的流即可;
2.2什么是流视图?
流视图,其实就是定义统计分析的QUERY, 例如select id, count(*), avg(x), ... from stream_1 group by ...; 就属于一个流视图。
定义好之后,数据插入流(stream_1),这个流视图就会不断增量的进行统计,你只要查询这个流视图,就可以查看到实时的统计结果。
数据库中存储的是实时统计的结果(实际上是在内存中进行增量合并的,增量的方式持久化)。
2.3什么是Transforms
与流视图不同的是,transform是用来触发事件的,所以它可以不保留数据,但是可以设定条件,当记录满足条件时,就触发事件。
例如监视传感器的值,当值的范围超出时,触发报警(如通过REST接口发给指定的server),或者将报警记录下来(通过触发器函数)。
2.4.扩展性
pipelinedb继承了PostgreSQL很好的扩展性,例如支持了概率统计相关的功能,例如HLL等。用起来也非常的爽,例如统计网站的UV,或者红绿灯通过的汽车编号唯一值车流,通过手机信号统计基站辐射方圆多少公里的按时UV等。
2.5 Sliding Windows
因为很多场景的数据有时效,或者有时间窗口的概念,所以pipelinedb提供了窗口分片的接口,允许用户对数据的时效进行定义。
例如仅仅统计最近一分钟的时间窗口内的统计数据。
比如热力图,展示最近一分钟的热度,对于旧的数据不关心,就可以适应SW进行定义,从而保留的数据少,对机器的要求低,效率还高。
2.6流视图
支持JOIN,支持JOIN,支持JOIN,重要的事情说三遍。
流JOIN流(未来版本支持,目前可以通过transform间接实现)
流JOIN TABLE(已支持)
欲了解pipelineDB详情请参考: http://docs.pipelinedb.com/
如果你还想了解一下PostgreSQL请参考: 《PostgreSQL 前世今生》
pipelinedb在github上面可以下载。https://github.com/pipelinedb/pipelinedb/releases
网友评论