Stream 如何在pipelinedb中从连续视图流式输出?
我已经安装了pipelinedb,它工作得很好!我想知道在视图中的值被更新后,是否有可能从连续视图中流出数据流?也就是说,让一些外部进程对视图的更改起作用Stream 如何在pipelinedb中从连续视图流式输出?,stream,real-time,pipelinedb,Stream,Real Time,Pipelinedb,我已经安装了pipelinedb,它工作得很好!我想知道在视图中的值被更新后,是否有可能从连续视图中流出数据流?也就是说,让一些外部进程对视图的更改起作用 我希望将从视图生成的度量数据流到仪表板中,我不希望使用轮询db来实现这一点。查看我们的技术文档中关于和的部分,以获取有关如何实现这一点的帮助,如果您需要文档以外的帮助,请随时联系我们。我觉得自己有点像个白痴,试图用提供的工具找出答案。也许我是盲人,但我仍然没有找到一条路。我发现了9.3版本的DB,其中包括连续触发器,但这已经被删除,我不希望切
我希望将从视图生成的度量数据流到仪表板中,我不希望使用轮询db来实现这一点。查看我们的技术文档中关于和的部分,以获取有关如何实现这一点的帮助,如果您需要文档以外的帮助,请随时联系我们。我觉得自己有点像个白痴,试图用提供的工具找出答案。也许我是盲人,但我仍然没有找到一条路。我发现了9.3版本的DB,其中包括连续触发器,但这已经被删除,我不希望切换到旧版本的DB 这有点令人伤心,但我想它已经从该项目的开源版本中移出,以适应同一家公司提供的实时分析仪表板项目 不管怎样。我通过使用存储过程解决了这个问题。与内置函数相比,它的效率可能有点低,但我一分钟要敲上几千次DB,我的VM CPU和RAM只是在打哈欠
CREATE OR REPLACE FUNCTION all_insert(text,text)
RETURNS void AS
$BODY$
DECLARE
result text;
BEGIN
INSERT INTO all_in (streamid, generalinput) values($1, $2);
SELECT array_to_json(array_agg(json_build_object('streamId', streamid, 'total', count)))::text into result from totals;
PERFORM pg_notify('totals', result);
END
$BODY$
LANGUAGE plpgsql;
因此,我的insert和notify是通过查询这个存储过程来完成的。然后,我的应用程序只需侦听PSQL db notify事件并适当地处理它们。在上面的示例中,应用程序将接收一个JSON对象,该对象具有特定的流id以及与之相关联的总数。从0.9.5开始,为了使用输出流和连续转换,已经删除了连续触发器。(首先由教学论者提出)。连续视图的输出本质上是一个流,这意味着您可以基于它创建连续视图或变换 简单的例子:
创建流(
x int
);
按以下方式创建连续视图
挑选
小时(到达时间戳)作为ts,
SUM(x)作为SUM
从s组经ts;
output\u基于视图的输出创建变换。在转换中,您可以访问元组old
和new
,它们分别表示旧值和新值。(0.9.7有第三个称为delta
),因此您可以创建使用“hourly_cv”输出的转换,如下所示:
按小时创建连续变换
挑选
(新)总数
从(“每小时”的输出
然后执行过程update();
update
,我们仍然需要定义它。它需要是一个返回触发器的函数创建或替换函数更新()
将触发器返回为
$$
开始
//你想在这里做什么都行。
归还新的;
结束;
$$
语言plpgsql;
我发现这有助于理解输出流以及为什么连续触发器不再存在。哇,感谢您的详细回复。这是非常感谢:-)进一步使用后,我发现pg_notify在从连续变换触发时不起作用,请看答案的其余部分仍然有效。