pipelinedb--流、滑动窗口测试
https://blog.csdn.net/liuxiangke0210/article/details/74010951
https://yq.aliyun.com/articles/166
一、pipelineDB默认的用户不是postgres而是pipeline。
pipeline=# \c
You are now connected to database "pipeline" as user "steven".
进入数据库 命令:pipeline pipeline
[steven@steven1 ~]$ pipeline pipeline
pipeline (9.5.3)
Type "help" for help. pipeline=#
创建一个流 stream,一个stream就是一个FDW,其实不存储任何数据。
pipeline=# create stream stream_test(x integer, y integer, z text);
CREATE FOREIGN TABLE
查看流结构
pipeline=# \d stream_test;
Foreign table "public.stream_test"
Column | Type | Modifiers | FDW Options
-------------------+--------------------------+-----------+-------------
x | integer | |
y | integer | |
z | text | |
arrival_timestamp | timestamp with time zone | |
Server: pipelinedb
创建一个CONTINUOUS 连续视图
pipeline=# create continuous view v_sum as select sum (x + y) from stream_test;
CREATE VIEW
pipeline=# create continuous view v_group as select count(*) as coun,x,y,z from stream_test group by x,y,z;
CREATE VIEW
pipeline=# create continuous view v_single as select x,z from stream_test;
CREATE VIEW
stream 只能被continuous查询,如果直接查询会报错,被告知只能被continous view读取。
查看continues views结构
pipeline=# \d v_group
View "public.v_group"
Column | Type | Modifiers
--------+---------+-----------
coun | bigint |
x | integer |
y | integer |
z | text |
pipeline=# \d v_single
View "public.v_single"
Column | Type | Modifiers
--------+---------+-----------
x | integer |
z | text |
创建好continuous,会附带创建一些别的东西。
pipeline=# \d
List of relations
Schema | Name | Type | Owner
--------+------------------+---------------+--------
public | v | view | steven
public | v_group | view | steven
public | v_group_mrel | table | steven
public | v_group_osrel | foreign table | steven
public | v_group_seq | sequence | steven
public | v_mrel | table | steven
public | v_osrel | foreign table | steven
public | v_seq | sequence | steven
public | v_single | view | steven
public | v_single_mrel | table | steven
public | v_single_osrel | foreign table | steven
public | v_single_seq | sequence | steven
public | v_sum | view | steven
public | v_sum_mrel | table | steven
public | v_sum_osrel | foreign table | steven
public | v_sum_seq | sequence | steven
(34 rows)
v_group 这个跟数据库中普通的View很类似,不存储任何东西,可以把他理解成一个materialized view,并且是非常高吞吐量,realtime的物化视图。
*_mrel,这个就是存储具体数据的,跟pg中的物理表是一样一样的。上面的cv就是这个物理表的一个壳子,不过这个物理表存储的内容可能是HLL格式。
*_seq,这个是给物理表创建的一个PK,看看cv_mrel发现默认会有个$pk字段。
*cv_osrel 这个是internal relation representing an output stream
插入数据到stream
pipeline=# insert into stream_test (x,y,z) values(1,2,'a'),(3,4,'b'),(5,6,'c'),(7,8,'d'),(1,2,'a');
INSERT 0 5
查询
pipeline=# select * from v_sum;
sum
-----
39
(1 row) pipeline=# select * from v_group;
coun | x | y | z
------+---+---+---
1 | 7 | 8 | d
1 | 5 | 6 | c
2 | 1 | 2 | a
1 | 3 | 4 | b
(4 rows)
pipeline=# select * from v_group_mrel;
coun | x | y | z | $pk
------+---+---+---+-----
1 | 7 | 8 | d | 1
1 | 5 | 6 | c | 2
2 | 1 | 2 | a | 3
1 | 3 | 4 | b | 4
(4 rows)
cv跟cv_mrel只是多了个$pk,这是在普通情况下,数据是这样的,如果做agg可能数据存储为HLL格式.
滑动窗口
我们来看看滑动窗口,在流计算中,窗口是个很重要的东西,例如最近5分钟,最近1小时,最近1天的汇总。
1、创建一个流,列名time,数据类型timestamp;
pipeline=# create stream sliding (time timestamp);
2、创建一个滑动窗口(流动视图)
pipeline=# create continuous view cv_sliding with(sw='1 minute') as select time from sliding;
CREATE VIEW
3、插入一条当前时间数据
pipeline=# insert into sliding(time) values(now());
INSERT 0 1
4、查询
pipeline=# select * from cv_sliding;
time
----------------------------
2018-05-18 08:46:58.771057
(1 row)
5、过一会再插入两条时间数据,再次查询
pipeline=# insert into sliding(time) values(now());
INSERT 0 1
pipeline=# insert into sliding(time) values(now());
INSERT 0 1
pipeline=# select * from cv_sliding;
time
----------------------------
2018-05-18 08:46:58.771057
2018-05-18 08:47:22.253052
2018-05-18 08:47:29.265144
(3 rows)
可以看到三条数据
6、过一会查询,少了一条,再过一会全部消失
pipeline=# select * from cv_sliding;
time
----------------------------
2018-05-18 08:47:22.253052
2018-05-18 08:47:29.265144
(2 rows)
pipeline=# select * from cv_sliding;
time
------
(0 rows)
ttl功能
pipeline=# create continuous view v_ttl with (ttl = '10 minute',ttl_column= 'minute') as select minute(arrival_timestamp), count(*) from sliding group by minute;
CREATE VIEW
pipeline=# insert into sliding values(now());
INSERT 0 1
pipeline=# insert into sliding values(now());
INSERT 0 1
pipeline=# insert into sliding values(now());
INSERT 0 1
pipeline=# insert into sliding values(now());
INSERT 0 1 pipeline=# select * from v_ttl;
minute | count
------------------------+-------
2018-05-18 09:04:00+00 | 4
pipeline=# insert into sliding values(now());
INSERT 0 1
pipeline=# select * from v_ttl;
minute | count
------------------------+-------
2018-05-18 09:04:00+00 | 4
2018-05-18 09:06:00+00 | 1
(2 rows)
transform
1、创建流和相对应的流动视图
pipeline=# create stream str1(x bigint,y text,z timestamp);
CREATE FOREIGN TABLE
pipeline=# create stream str2(x bigint,y text,z timestamp);
CREATE FOREIGN TABLE
pipeline=# create continuous view cv_1 as select x,y,z from str1;
CREATE VIEW
pipeline=# create continuous view cv_2 as select x,y,z from str2;
CREATE VIEW
pipeline=#
2、创建transform
pipeline=# create continuous transform tran_1 as select x,y,z from str1 then execute procedure pipeline_stream_insert('str2');
CREATE VIEW
pipeline=# insert into str1(x,y,z) values(1,'hi,i from str1',now());
INSERT 0 1
pipeline=# select * from cv_1;
x | y | z
---+----------------+---------------------------
1 | hi,i from str1 | 2018-05-18 09:21:01.11329
(1 row)
pipeline=# select * from cv_2;
x | y | z
---+----------------+---------------------------
1 | hi,i from str1 | 2018-05-18 09:21:01.11329
(1 row)
在创建Transform用到的pipeline_stream_insert是PipelineDB自己提供的一个函数,这个我们可以自己定义一个函数。
pipeline=# create table t(x bigint,y text,z timestamp); CREATE TABLE pipeline=# CREATE OR REPLACE FUNCTION insert_into_t() pipeline-# RETURNS trigger AS pipeline-# $$ pipeline$# BEGIN pipeline$# INSERT INTO t (x, y,z) VALUES (NEW.x, NEW.y,NEW.z); pipeline$# RETURN NEW; pipeline$# END; pipeline$# $$ pipeline-# LANGUAGE plpgsql; CREATE FUNCTION pipeline=# CREATE CONTINUOUS TRANSFORM tran_t AS pipeline-# SELECT x,y,z FROM str1 pipeline-# THEN EXECUTE PROCEDURE insert_into_t(); CREATE CONTINUOUS TRANSFORM pipeline=# insert into str1(x,y,z) values(10,'I want insert table t',now()); INSERT 0 1 pipeline=# select * from t; x | y | z ----+-----------------------+--------------------------- 10 | I want insert table t | 2017-05-15 14:01:48.17516 (1 row) 自己写了一个trigger,然后把数据插入到表T中。
pipelinedb--流、滑动窗口测试的更多相关文章
- ASP.NET Core中使用滑动窗口限流
滑动窗口算法用于应对请求在时间周期中分布不均匀的情况,能够更精确的应对流量变化,比较著名的应用场景就是TCP协议的流量控制,不过今天要说的是服务限流场景中的应用. 算法原理 这里假设业务需要每秒钟限流 ...
- pipelinedb 滑动窗口
滑动窗口可以方便的让我们进行一段时间的数据分析 几个主要函数 clock_timestamp 内置的函数,总是返回当前的时间戳 arrival_timestamp 事件达到的时间 单滑动窗口 参考 C ...
- TCP通过滑动窗口和拥塞窗口实现限流,能抵御ddos攻击吗
tcp可以通过滑动窗口和拥塞算法实现流量控制,限制上行和下行的流量,但是却不能抵御ddos攻击. 限流只是限制访问流量的大小,是无法区分正常流量和异常攻击流量的. 限流可以控制本软件或者应用的流量大小 ...
- TCP/IP 协议中的滑动窗口
一个例子明白发送缓冲区.接受缓冲区.滑动窗口协议之间的关系. 在上面的几篇文章中简单介绍了上述几个概念在TCP网络编程中的关系,也对应了几个基本socket系统调用的几个行为,这里再列举一个例子,由于 ...
- 端口状态 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT详解,以及三次握手四次挥手,滑动窗口(整理转发)
网上查了一下端口状态的资料,我下面总结了一下,自己学习学习: TCP状态转移要点 TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死 ...
- TCP 三次握手四次挥手, ack 报文的大小.tcp和udp的不同之处、tcp如何保证可靠的、tcp滑动窗口解释
一.TCP三次握手和四次挥手,ACK报文的大小 首先连接需要三次握手,释放连接需要四次挥手 然后看一下连接的具体请求: [注意]中断连接端可以是Client端,也可以是Server端. [注意] 在T ...
- tcp协议头窗口,滑动窗口,流控制,拥塞控制关系
参考文章 TCP 的那些事儿(下) http://coolshell.cn/articles/11609.html tcp/ip详解--拥塞控制 & 慢启动 快恢复 拥塞避免 http://b ...
- tcp的精髓:滑动窗口
TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现.一.滑动窗口协议 关于这部分自己不晓得怎么叙述才好,因为理解的部分更多, ...
- TCP 滑动窗口和 拥塞窗口
转http://coolshell.cn/articles/11609.html 滑动窗口 -- 表征发送端和接收端的接收能力 拥塞窗口-- 表征中间设备的传输能力 TCP滑动窗口 需要说明一下,如果 ...
随机推荐
- Java安全技术
分类 Java平台安全,即JRE安全 开发Java程序(普通程序,服务,applet)安全,即提供安全的开发工具和服务. 用法 用签名和安全策略控制远程的资源访问
- ZUFE2480: 神奇的序列 2017-05-12 16:45 39人阅读 评论(0) 收藏
2480: 神奇的序列 时间限制: 4 Sec 内存限制: 256 MB 提交: 31 解决: 15 [提交][状态][讨论版] 题目描述 序列a如下: a[0] = A; a[1] = B; a ...
- 元组(tuple)基本操作
1.定义元组,Python的元组和列表类似,不同之处在于元组中的元素不能修改(因此元组又称为只读列表),且元组使用小括号而列表使用中括号 dimensions.py , ) print(dimensi ...
- FastReport 打印模版页(TFrxReportpage)复制
遇到一个奇葩的需求.一般情况下我们打印单据,用FastReport设置打印格式,也就是就设一个模版页而己,就是一种单据格式.如果打印的单据数据多了就自动打印多页了,他们的格式是一样的.也就是读同一个模 ...
- collaborative filtering协同过滤
每次我想看电影的时候,都会去问我的朋友,小健.一般他推荐的电影,我都比较喜欢.显然不是所有人都有小健这样的能力.因为我碰巧和小健有类似的品味. 这个生活中的经验,实际上有着广泛的用途. 当系统需要为某 ...
- C#: 以管理员权限运行包含有cd命令的.bat文件
最近在做项目的时候遇到一种情:用C#程序以管理员权限去执行一个bat文件,且此bat文件里面有cd命令来进入文件的下一级目录,比如: echo test begin cd test1 setup1.e ...
- Asp .Net core 2 学习笔记(3) —— 静态文件
这个系列的初衷是便于自己总结与回顾,把笔记本上面的东西转移到这里,态度不由得谨慎许多,下面是我参考的资源: ASP.NET Core 中文文档目录 官方文档 记在这里的东西我会不断的完善丰满,对于文章 ...
- Android sharedUserId 和系统权限
sharedUserId 给不同的应用使用同一个 sharedUserId 可以运行在这几个应用间互相访问数据(数据库,SharedPreferences,文件). sharedUserId 一旦使用 ...
- jmeter 中 浮点数计算精度问题
jmeter 中 浮点数计算精度问题解决方法: 编写 beanshell 时使用 java.math.BigDecimal 方法构造,使用 BigDecimal 并且一定要用 String 来够造. ...
- Linux基础命令-cd
cd 作用:切换路径 切换至家目录 $ cd $ cd~ 在上一个目录和当前目录来回切换 $ cd - 切换至某用户的家目录 # cd ~ # pwd /root # cd ~quail #pwd / ...