PostgreSQL , 流式處理 , 無流入資料逾時異常
流計算有個特點,資料流式寫入,流式計算。
但是有一種情況,可能無法覆寫。例如電商中的 收貨逾時,退款處理逾時 事件的流式監控。因為資料都不會再寫進來了,是以也無法觸發流式計算。
這些問題如何流式預警呢?
可以用逾時時間+排程的方式,當然這裡面有PostgreSQL的獨門秘籍:
1、CTE,文法靈活。
2、partial index,不需要檢索的資料不建構索引。
3、DML returning,可以傳回DML語句的結果,結合CTE實作最小互動計算。
4、multi-index bitmap scan,多個索引合并掃描,在使用OR條件時,可以結合多個字段的索引進行合并掃描。
1、被監控表的結構。裡面記錄了訂單、退款等事件的逾時處理時間,逾時通知次數,下一次通知時間間隔,完結狀态等。
2、建立partial index,也就是說,對未完結工單才需要通知使用者,這些資料是業務關心的,使用partial index可以簡化索引大小。提高速度。
3、擷取需要通知的資料,并且更新通知次數以及下一次的通知時間。
4、執行計劃完美
5、排程
<a href="https://github.com/digoal/blog/blob/master/201305/20130531_02.md">《PostgreSQL 定時任務方法2》</a>
<a href="https://github.com/digoal/blog/blob/master/201305/20130531_01.md">《PostgreSQL Oracle 相容性之 - DBMS_JOBS - Daily Maintenance - Timing Tasks(pgagent)》</a>
當然你如果使用阿裡雲,可以使用阿裡雲的排程平台,配置排程任務。
1、寫入1億資料,假設有100萬條同時逾時需要處理,耗時如何?
通知性能,比如每一批通知1萬條:
(小批量擷取,并更新逾時時間,目的是讓autovacuum介入,實時回收垃圾)
絲般柔滑
使用以上方法,可以完美的解決逾時資料的監控問題。性能好。