天天看點

用PostgreSQL支援含有更新,删除,插入的實時流式計算

大多數的流式計算産品隻支援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就是個"老流氓",因為任何軟體可能都和這隻大象有一腿。

繼續閱讀