大多数的流式计算产品只支持append only的应用场景,也就是只有插入,没有更新和删除操作。
如果要实现更新和删除的实时流式计算,在postgresql中可以这样来实现。
在此前你可以阅读我以前写的文章来了解pg是如何处理一天一万亿的实时流式计算的:
<a href="https://yq.aliyun.com/articles/166">https://yq.aliyun.com/articles/166</a>
要支持更新和删除,思路是这样的,加一张前置表,这个前置表的某个字段用来记录字段的最终状态,即到达这个状态后,记录不会被更新或删除。
通过触发器来控制什么记录插入到流中同时从前置表删除,什么记录现暂存在前置表。
下面是例子
本文假设flag=2是最终状态,应用层自己来定义这个flag。
flag=2的记录旁路到流,其他记录放到前置表。
更新后flag=2的记录旁路到流,并删除前置表的对应记录。
测试
详情请参考
<a href="http://docs.pipelinedb.com/introduction.html">http://docs.pipelinedb.com/introduction.html</a>
如果你觉得这还不够爽,postgresql还有kafka插件,可以类lambda的模式从kafka持续读数据,进行流式计算。
postgresql就是个"老流氓",因为任何软件可能都和这只大象有一腿。