756
技術社區[雲棲]
PgSQL · 應用案例 · "寫入、共享、存儲、計算" 最佳實踐
背景
數據是為業務服務的,業務方為了更加透徹的掌握業務本身或者使用該業務的群體,往往會收集,或者讓應用埋點,收集更多的日誌。
隨著用戶量、用戶活躍度的增長,時間的積累等,數據產生的速度越來越快,數據堆積的量越來越大,數據的維度越來越多,數據類型越來越多,數據孤島也越來越多。
日積月累,給企業IT帶來諸多負擔,IT成本不斷增加,收益確不見得有多高。
上圖描繪了企業中可能存在的問題:
1. 數據孤島問題嚴重(如果沒有大數據平台時)。
2. 對成本預估不足,計算能力擴容麻煩,又或者鋪張浪費嚴重。
3. 數據冗餘問題突出。
4. 存儲成本昂貴。
5. 業務萎縮後硬件成為固定資產,IT負擔嚴重,幾乎沒有硬件伸縮能力。
6. 數據量太大,幾乎無法備份。
7. 業務需求多,數據種類多,分析成本、開發成本高昂。
本文將針對這個場景,給出一個比較合理的方案,靈活使用,可以減輕企業IT成本,陪伴企業高速成長。
行業場景
### 1. 物流
一個包裹,從攬件、發貨、運輸、中轉、配送到簽收整個流程中會產生非常多的跟蹤數據,每到一個節點,都會掃描一次記錄包裹的狀態信息。
運輸過程中,車輛與包裹關聯,車輛本身采集的軌跡、油耗、車輛狀態、司機狀態等信息。
配送過程,快遞員的位置信息、包裹的配送信息都會被跟蹤,也會產生大量的記錄。
一個包裹在後台可能會產生上百條跟蹤記錄。
運輸的車輛,一天可能產生上萬的軌跡記錄。
配送小哥,一天也可能產生上萬條軌跡記錄。
我曾經分享過一個物流配送動態規劃的話題。有興趣的童鞋也可以參考
物流行業產生的行為數據量已經達到了海量級別。
怎樣才能有效的對這些數據進行處理呢?
比如:
實時按位置獲取附近的快遞員。
實時統計包裹的流量,快遞員的調度,車輛的調度,倉庫的選址等等一係列的需求。
2. 金融
金融行業也是數據的生產大戶,用戶的交易,企業的交易,證券數據等等。
數據量大,要求實時計算,要求有比較豐富的統計學分析函數等。
我曾經分享過一個關於模擬證券交易的係統需求分析。有興趣的童鞋也可以參考
3. 物聯網
物聯網產生的數據有時序屬性,有流計算需求(例如到達閾值觸發),有事後分析需求。
數據量龐大,有數據壓縮需求。
我剛好也寫過一些物聯網應用的數據庫特性分析,這些特性可以幫助物聯網實現數據的壓縮、流計算等需求。
《流計算風雲再起 - PostgreSQL攜PipelineDB力挺IoT》
《旋轉門數據壓縮算法在PostgreSQL中的實現 - 流式壓縮在物聯網、監控、傳感器等場景的應用》
《PostgreSQL 物聯網黑科技 - 瘦身幾百倍的索引(BRIN index)》
《一個簡單算法可以幫助物聯網,金融 用戶 節約98%的數據存儲成本》
《”物聯網”流式處理應用 - 用PostgreSQL實時處理(萬億每天)》
《PostgreSQL 黑科技 range 類型及 gist index 助力物聯網(IoT)》
物聯網還有一個特性,傳感器上報的數據往往包括數字範圍(例如溫度範圍)、地理位置、圖片等信息,如何高效的存儲,查詢這些類型的數據呢?
4. 監控
監控行業,例如對業務狀態的監控,對服務器狀態的監控,對網絡、存儲等硬件狀態的監控等。
監控行業具有比較強的業務背景,不同的垂直行業,對監控的需求也不一樣,處理的數據類型也不一樣。
例如某些行業可能需要對位置進行監控,如公車的軌跡,出了位置電子圍欄,發出告警。換了司機駕駛,發出警告。等等。
5. 公安
公安的數據來自多個領域,例如 通訊記錄、出行記錄、消費記錄、攝像頭拍攝、社交、購物記錄 等等。
公安的數據量更加龐大,一個比較典型的場景是風險控製、抓捕嫌犯。涉及基於地理位置、時間維度的人物關係分析(圖式搜索)。
如何才能滿足這樣的需求呢?
6. 其他行業
其他不再列舉。
行業痛點
如何解決數據孤島,打通數據共享渠道?
如何高效率的寫入日誌、行為軌跡、金融數據、軌跡數據等?
如何高效的實時處理數據,根據閾值告警通知,實時分析等?
如何解決大數據的容災、備份問題?
如何解決大數據的壓縮和效率問題?
如何解決數據多維度、類型多,計算複雜的問題?
如何解決企業IT架構彈性伸縮的問題?
總結起來幾個關鍵字:
寫入、共享、存儲、計算。
方案
用到三個組件:
1. RDS PostgreSQL
支持時序數據、塊級索引、倒排索引、多核並行、JSON、數組存儲、OSS_FDW外部讀寫等特性。
解決OLTP,GIS應用、複雜查詢、時空數據處理、多維分析、冷熱數據分離的問題。
2. HybridDB PostgreSQL
支持列存儲、水平擴展、塊級壓縮、豐富的數據類型、機器學習庫、PLPYTHON、PLJAVA、PLR編程、OSS_FDW外部讀寫等特性。
解決海量數據的計算問題。
3. OSS 對象存儲
多個RDS實例之間,可以通過OSS_FDW共享數據。
OSS多副本、跨域複製。
解決數據孤島、海量數據存儲、跨機房容災、海量數據備份等問題。
1 寫入
數據寫入分為3條路徑:
1. 在線實時寫入,可以走RDS SQL接口,單個實例能達到 百萬行/s 以上的寫入速度。
2. 批量準實時寫入,可以走HybridDB SQL接口,單個實例能達到 百萬行/s 以上的寫入速度。
3. 批量準實時寫入,比如寫文件,可以走OSS寫入接口,帶寬彈性伸縮。
2 共享
多個RDS實例之間,可以通過OSS_FDW共享數據。
例如A業務和B業務,使用了兩個RDS數據庫實例,但是它們有部分需求需要共享數據,傳統的方法需要用到ETL,而現在,使用OSS_FDW就可以實現多實例的數據共享,而且效率非常高。
通過RDS PostgreSQL OSS_FDW的並行讀寫功能(同一張表的文件,可以開多個worker process進程並行讀寫),共享數據的讀寫效率非常高。
並行體現三個方麵:OSS讀寫並行、RDS PostgreSQL多核計算並行、RDS PG或HybridDB的多機並行。
3 存儲
對於實時數據,使用RDS PostgreSQL, HybridDB的本地數據存儲。對於需要分析、需要共享的數據,使用OSS進行存儲。
OSS相比計算資源的存儲更加的廉價,在確保靈活性的同時,降低了企業的IT成本。
通過OSS對象存儲,解決了企業的數據冗餘、成本高等問題,滿足了數據的備份、容災等需求。
4 計算
通過RDS PostgreSQL, HybridDB, OSS的三個基本組件,實現了計算資源、存儲資源的分離。
因為計算節點的數據量少了(大部分數據都存在OSS了),計算節點的擴容、縮容、容災、備份都更加方便。
計算本身分為以下幾種
1. 流式計算
流式計算分為兩種,一種是實時統計,另一種是設置閾值進行實時的告警。
通過pipelinedb(base on postgresql)可以實現這兩類流計算。
好處:
SQL標準接口,豐富的內置函數支持複雜的流計算需求,豐富的數據類型(包括GIS,JSON等)支持更多的流計算業務場景,異步消息通知機製支持第二類流計算需求。
pipelinedb正在進行插件化改造,以後可以作為PostgreSQL的插件使用。
https://github.com/pipelinedb/pipelinedb/issues?q=is%3Aissue+is%3Aopen+label%3A%22extension+refactor%22
例如在監控領域,使用流計算的異步消息機製,可以避免傳統主動問詢監控的無用功問題。
2. 實時交互業務
傳統的OLTP需求,使用RDS PostgreSQL可以滿足。
PostgreSQL的特性包括:GIS、JSON、數組、冷熱分離、水平分庫、K-V類型、多核並行、塊級索引、倒排索引等。
PostgreSQL支持的場景包括:流計算、圖式搜索、時序數據、路徑規劃、模煳查詢、全文檢索、相似查詢、秒殺、基因、金融、化學、GIS應用、複雜查詢、BI、多維分析、時空數據搜索等。
覆蓋銀行、保險、證券、物聯網、互聯網、遊戲、天文、出行、電商、傳統企業等行業。
3. 準實時分析
結合OSS對象存儲,RDS PostgreSQL和HybridDB都可以實現準實時的分析。
同一份OSS的數據,也可以在多個實例之間進行共享,同時訪問。
4. 離線分析、挖掘
結合OSS對象存儲,RDS PostgreSQL和HybridDB都可以實現對離線數據的分析和挖掘。
RDS PostgreSQL 支持單機多核並行,HybridDB for PostgreSQL支持多機並行。用戶可以根據計算量進行選擇。
計算需要具備的能力
計算的靈魂是類型的支持、以及類型的處理。
1. PostgreSQL內置了豐富的類型支持,包括(數字、字符串、時間、布爾、枚舉、數組、範圍、GIS、全文檢索、bytea、大對象、幾何、比特、XML、UUID、JSON、複合類型等),同時支持用戶自定義的類型。可以支持幾乎所有的業務場景
2. 操作符,為了滿足對數據的處理需求,PG對每一種支持的類型,都支持非常豐富的操作,
3. 內置函數,PG內置了豐富的統計學函數、三角函數、GIS處理函數,MADlib機器學習函數等。
4. 自定義計算邏輯,用戶可以通過C, python, java, R等語言,定義數據的處理函數。擴展PostgreSQL, HybridDB for PostgreSQL的數據處理能力。
5. 聚合函數,內置了豐富的聚合函數,支持數據的統計。
6. 窗口查詢功能的支持。
7. 遞歸查詢的支持。
8. 多維分析語法的支持。
方案小結
1 RDS PostgreSQL 優勢
主要體現在這幾個方麵
1. 性能
RDS PostgreSQL主要處理在線事務以及少量的準實時分析。
PG OLTP的性能可以參考這篇文檔,性能區間屬於商業數據庫水準。
PG 的OLAP分析能力,可以參考這篇文檔,其多核並行,JIT,算子複用等特性,使得PG的OLAP能力相比其他RDBMS數據庫有質的提升。
《分析加速引擎黑科技 - LLVM、列存、多核並行、算子複用 大聯姻 - 一起來開啟PostgreSQL的百寶箱》
PostgreSQL 10 在HTAP(OLTP與OLAP混合應用場景)方麵還有更多的增強,預計社區5月份會發布BETA版本。
2. 功能
功能也是PostgreSQL的強項,在上一章《計算需要具備的能力》有詳細介紹。
3. 擴展能力
計算能力擴展,RDS PostgreSQL的主要場景是OLTP在線事務,通過增加CPU,可以同時擴展OLTP的能力,以及擴展複雜計算的性能。
存儲能力擴展,通過OSS存儲以及oss_fdw插件,可以擴展RDS PG的存儲能力,打破存儲極限。
4. 成本
存儲成本:由於大部分需要分離的數據都存儲到OSS了,用戶不再需要考慮這部分的容災、備份問題。相比存儲在數據庫中,存儲成本大幅降低。
開發成本:RDS PG, HybridDB PG都支持豐富的SQL標準接口,訪問OSS中的數據(通過TABLE接口),使用的也是SQL標準接口。節省了大量的開發成本,
維護成本:使用雲服務,運維成本幾乎為0。
5. 覆蓋行業
覆蓋了銀行、保險、證券、物聯網、互聯網、遊戲、天文、出行、電商、傳統企業等行業。
2 HybridDB PostgreSQL 優勢
1. 性能
HybridDB PostgreSQL為MPP架構,計算能力出眾。
2. 功能
在上一章《計算需要具備的能力》有詳細介紹。
3. 擴展能力
計算能力擴展,通過增加計算節點數,可以擴展複雜計算的性能。
存儲能力擴展,通過OSS存儲以及oss_fdw插件,可以擴展RDS PG的存儲能力,打破存儲極限。
4. 成本
存儲成本:由於大部分需要分離的數據都存儲到OSS了,用戶不再需要考慮這部分的容災、備份問題。相比存儲在數據庫中,存儲成本大幅降低。
開發成本:RDS PG, HybridDB PG都支持豐富的SQL標準接口,訪問OSS中的數據(通過TABLE接口),使用的也是SQL標準接口。節省了大量的開發成本,
維護成本:使用雲服務,運維成本幾乎為0。
5. 覆蓋行業
覆蓋了銀行、保險、證券、物聯網、互聯網、遊戲、天文、出行、電商、傳統企業等行業。
典型用法
雲端數據庫如何與海量存儲結合?
《RDS PostgreSQL : 使用 oss_fdw 讀寫OSS對象存儲》
《HybridDB PostgreSQL : 使用 oss_fdw 讀寫OSS對象存儲》
最後更新:2017-05-21 09:02:08
上一篇:
MySQL索引及查詢優化書目錄
下一篇:
MySQL · myrocks · fast data load
工廠模式的Assembly.Load(path).CreateInstance(className)出錯解決方法
java反射中getDeclaredMethods和getMethods的區別
Myeclipse安裝SVN插件
關注Erdaicms官方微信訂閱號,獲取旅遊網站程序測試後台的賬戶和密碼
韓國黑客獲得國際黑客大賽冠軍
日誌係列-常見處理方案
刪除時外鍵衝突怎麼辦
arm-linux-gcc: Command not found 問題解析 .
LAMP編譯:解決 64 CPU 位元 compiler 時 zlib 出現/usr/local/lib/libz.a(crc32.o)造成的問題 .
POJ3185高斯消元