官网:http://www.pipelinedb.com/
pipelineDB是基于postgres的stream数据库。完全兼容pg的东西。
由于产品需要解决性能这块瓶颈,老大让试试这款基于流计算的数据库。
[pipeline@localhost ~]$ pipeline
pipeline (9.4.4)
Type "help" for help.
Create a static stream
1 | CREATE STREAM stream_test1 (x integer , y integer ,z text); |
Create a CONTINUOUS
CREATE CONTINUOUS VIEW v_sum as select sum( x + y ) FROM stream_test1;
CREATE CONTINUOUS VIEW V_GROUP AS SELECT count(*) as coun,x,y,z FROM stream_test1 GROUP BY x,y,z;
Stream 只能被CONTINUOUS查询,如果直接查询会报错:
pipeline=# select * from stream_test1; ERROR: "stream_test1" is a stream HINT: Streams can only be read by a continuous view's FROM clause.
插入数据到Stream
pipeline=# INSERT INTO stream_test1(x,y,z) VALUES(1,2,'A'),(3,4,'B'),(5,6,'C'),(7,8,'D'),(1,2,'A'); INSERT 5
查询结果
pipeline=# select * from v_sum; sum ----- 39 (1 row) pipeline=# select * from v_group; coun | x | y | z ------+---+---+--- 1 | 5 | 6 | C 1 | 7 | 8 | D 1 | 3 | 4 | B 2 | 1 | 2 | A (4 rows)
在创建CONTINUOUS,后面select能写分析函数,各种over(),这样数据在不同窗口内时时计算,能很方便的解决性能问题。
这个view没太详细研究,貌似跟oracle的物化视图类似。
关于UDF
PG是支持存储过程的,自己写FUNCTION,也支持PLLUA。
因为数据是从外部入库,我这块想把PLLUA集成到PG里面来,自己写LUA来做库内计算。
拿LUA替代plpgsql,性能应该会有很大一部分提升,有待测试。