PostgreSQL分割槽表更新思路

雲和恩墨發表於2020-03-30

微信群與一位PG朋友討論分割槽表更新問題,分享下本人之前的解決思路。

應用場景:
公交卡刷卡乘客的消費資料明細入庫問題
比如我們按乘客乘車時間,按月份進行分割槽,表名如card_trade201912

問題:
資料總會有延遲上傳或重傳或錯傳的情況
那後臺需要對分割槽表進行插入或修改操作。

單純的插入資料到基表,可以根據乘車時間定位到分割槽表,這個沒什麼問題

修改或者混合操作,對基表做join操作效能會差一些,這是因為修改可能會涉及多個子分割槽表

我的解決思路:
1.對源資料按分割槽欄位(這裡是乘車時間)分組
分組後每個組對應了一個具體的子分割槽如(card_trade201912)
2.按組處理
可以直接insert into card_trade201912 on conflict do update
或者先perform查詢,根據分割槽鍵查詢
判斷是要做insert還是update

這樣不管源資料跨多少個子分割槽,單次分組操作開銷基本是線性的。

上面對源資料也可以分批處理,比如每次處理1W條。

經過這樣改進原來需要半個小時或者更長時間的任務基本分鐘級就能處理完成。

更多PG相關文章: https://www.modb.pro/tag/postgresql?cyn 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29715045/viewspace-2683270/,如需轉載,請註明出處,否則將追究法律責任。

相關文章