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