摘要: 隨著物聯網的越來越廣泛使用,特定套用場景的需求也越發明顯,如智慧物流中需要對地理位置資訊處理需求強烈;公安刑偵中的柔邊化搜尋等等。這不僅對物聯網中的硬體是個挑戰,同時對物聯網中資料庫管理系統也提出了更高的要求。本文即為大家分享關於PostgreSQL如何搞定物聯網的“獨孤九式”。
·【直播預告】5月27日,阿裡雲進階技術專家德歌將在雲棲社群直播《雲資料庫RDS for PostgreSQL最佳實踐》:https://yq.aliyun.com/webinar/join/15,為你分享阿裡雲雲資料庫PostgreSQL的最佳技術實戰,包括PostgreSQL提示、上雲實戰、資料移轉與同步、外掛程式使用等內容,純乾貨。
·
物聯網產業不再僅僅只是裝置的接入,裝置接入後資料的採集和融合,以及融合後的剖析,會為整個社會帶來重要的價值。資料,讓我們更真實的瞭解社會與自然,讓人與自然、與社會更加的融合。但物聯網也遠沒你想的那麼難,經典的物聯網架構分為感知層、網路層和應用程式層。感知層主要包括感應器閘道、節點等資料擷取工具;採集到的資料再經過互連網、移動通信網等傳輸網傳遞到物聯網的“大腦”-應用程式層加以剖析套用。隨著物聯網的越來越廣泛使用,特定套用場景的需求也越發明顯,如智慧物流中需要對地理位置資訊處理需求強烈;公安刑偵中的柔邊化搜尋等等。這不僅對物聯網中的硬體是個挑戰,同時對物聯網中資料庫管理系統也提出了更高的要求。
本文即為大家分享關於PostgreSQL如何搞定物聯網的“獨孤九式”——
總訣式-知己知彼、百戰不殆
圖一總訣式-知己知彼、百戰不殆
正如兵家講究知己知彼,百戰不殆一樣,要真正實現萬物互聯、互通的物聯網,就要熟知特定場景的具體要求,有針對性地給出解決方案。通過對智慧家居、環境監測、城市交通、個人保健等具體場景的剖析,可以對物聯網套用場景屬性做一個小結:
- 資料量大 (壓縮、資料處理能力);
- 資料有時序、時空、文字屬性 (時序、地理位置、文字資料處理能力);
- 某些資料難以結構化,如影像處理 (自訂能力、擴充能力、非結構化資料處理能力);
- 資料處理即時性高 (串流能力);
- 資料維度多,關聯性複雜 (複雜查詢、統計剖析能力);
- 有柔邊、相似性查詢需求 (資料歸類、索引功力);
- 某些場景行鎖競爭強烈 (秒殺屬性功能)。
有了總訣式作為心法總綱,就可以針對特定的“招式”一一破解。
破劍式 -搞定非結構化、定制資料物件
圖二 破劍式 -搞定非結構化、定制資料物件
要知道很多資料是不可以預先結構化的,或者是經過產品反覆運算程序後,預先結構化不再起作用,如影像處理等。因此非結構化的處理在物聯網中顯得尤為重要。
PostgreSQL是這樣來應對非結構化資料場景的:首先PostgreSQL支援JSONB資料類型,該資料類型非常適合非結構化資料場景,例如感應器採集的資料以JSON格式上傳;其次在定制資料物件方面,PostgreSQL開放了類型擴充和索引擴充兩類介面,消費者無需追隨資料庫核心的實現方式,只需要追隨商務本身。比如電路板的品質檢測場景,消費者只需要追隨焊點是否虛焊,然後再通過開放的介面將其物件化到資料庫中;同時PostgreSQL中的自訂函數支援C、Python、Java等多種語言定義,擴充性極高。
破刀式 -搞定文字、空間、時序流式資料
圖三破刀式 -搞定文字、空間、時序流式資料
在柔邊查詢、分詞等文字處理方面,PostgreSQL天然支援分詞的屬性,包括中文分詞和英文分詞,效能上能夠做到每秒處理千萬詞彙的等級,足夠滿足消費者的需求。
空間地理位置資料管理方面,PostgreSQL支援PostGIS和Pgrouting兩種置放處理的外掛程式,PostGIS是全球使用範圍最廣的地理位置資訊處理外掛程式,在美國宇航局、歐洲宇航局等企業中得到了廣泛使用;Pgrouting是基於置放資訊完成最短路徑運算的外掛程式。
串流方面,PostgreSQL9.5以後的組建支援BRIN索引,非常適合帶有時序屬性的流式資料。如果按照時間來存取流式日誌資料,以往需要建立B-tree索引進行範圍查詢或者精確配對,但是B-tree索引會因為需要隱藏的較大信息量導致索引也很龐大;而BRIN記錄的是每(連續)塊中繼資料,索引變得很小。下圖是兩種索引之間差別詳細對比:
圖四 BRIN索引與B-TREE索引效能對比
破槍式 -搞定即時資料流處理
圖五破槍式 -搞定即時資料流處理
即時資料流處理的即時性要求很高,同時傳統的流式計算開發門檻高。但採用PostgreSQL,僅一條SQL就可以搞定流失即時處理。在資料源源不斷地往資料庫持續插入程序中,只需要定義好需要即時統計的視窗或者是流檢視,資料庫後臺就可以即時地進行資料統計。查詢流失處理結果的回應時間是在毫秒等級的。PostgreSQL在串流方面大大簡化了開發這一環節。其處理能力相當強大,一台8GCPU的伺服器每天能夠處理百億等級的流式資料。
破鞭式 -搞定複雜查詢
圖六破鞭式 -搞定複雜查詢
在物聯網中,因為資料維度多、關聯性複雜,所以複雜查詢也是一個不容忽視的問題。PostgreSQL中通過支援遺傳演算法、HASHJOIN、HASH彙總,解決了多表查詢的效率問題,在剖析場景中比傳統的巢狀循環效能升階100倍以上。
除此之外,在監測場景中,傳統基於閥值或狀態的監測方式是無法發現監測程序中存在遞色、趨勢異常的情況。PostgreSQL中採用基於方差的監測方式用於遞色檢測;同時基於時間或屬性關聯性,進行趨勢檢測,防患於未然。
破索式 -搞定資料分析
PostgreSQL具有強大的資料採礦能力,可以通過一條SQL搞定資料採礦,例如:
SELECT kmeans(ARRAY[x, y, z], K) OVER (), * FROM samples;
這條語句就可以實現群集;同時PostgreSQL支援GPU,CPU平行計算,處理能力達到25GB/s,已經達到目前記憶體極限;此外PostgreSQL還相容MADLib庫(支援幾百個機器學習服務庫函數、對應各種數學型號)、PL/R,、PL/Python。
圖七破索式 -搞定資料分析
破掌式 -搞定秒殺(高並發行鎖競爭)
圖八破掌式 -搞定秒殺(高並發行鎖競爭)
在物聯網領域,例如秒殺等場景行鎖競爭強烈。傳統的行鎖具有無效等待多、無效等待用戶長時間佔用對話資源、發現鎖衝突的代碼路徑長,需進行大量CPU運算等弊端。PostgreSQL提供了超輕鎖((advisoryLOCK))來解決高並行鎖競爭問題,通過CPU運算發現行鎖之前就知道是不是存在衝突,大大縮短CPU計算、等待資源,比如在秒殺搶手機的活動中,給定每個手機一個編號,拿到編號的用戶才可以進行搶手機,這樣就解決了並行度的問題,整體效能得到了近百倍的升階。
破箭式 -搞定柔邊、正則查詢
圖九破箭式 -搞定柔邊、正則查詢
物聯網中,對強烈影響柔邊、相近度查詢需求,較大傳統查詢方式是採用全資料表掃描的方式,百億資料的查詢回應至少是小時等級的。在PostgreSQL中,通過使用GINR-TREE索引可以將查詢時間縮短到秒級。
這裡舉一個柔邊查詢的例子,如上圖所示的車牌,儘管對其中一部分做了遮擋,在PostgreSQL中,通過下幾行語句,就可以輕鬆查出車主的個人資訊:
select 'postregsql' % 'postgresql';
postgres=# select similarity('postregsql','postgresql');
similarity
------------
0.375
(1 row)
select * from tbl where info ~ '^???6888$';
select * from tbl where info ~ '^???688?$';
PostgreSQL這一屬性,也是其廣泛地用於公安刑偵、車牌、位址、信箱等查詢中。
破氣式 -搞定巨量資料處理能力
圖十破氣式 -搞定巨量資料處理能力
隨著資料量的增大,會衍生出非常多的問題。在PostgreSQL採取了以下幾種方式處理巨量資料:
- 對於單機節點,採用基於CPU和GPU的計算;
- PostgreSQL新增了FDW外掛程式用於資料的冷熱分離,可以將資料置放在Hadoop或者Spark,通過PostgreSQL提供的統一提供者,實現HTAP(線上與離線處理一份資料);
- 支援OLTP分庫分表;
- 支援讀寫分離、一主多備、多複本強同步;
- 通過級聯複製,解決主庫壓力問題和跨機房的多份資料轉送問題;
- 服務端程式設計能力,解決move data帶來的網路延遲問題;
- 支援多主複製,解決物聯網地區節點和中心節點的資料相互同步問題。
接下來,針對幾個特殊的屬性具體剖析下它們的實現程序:
FDW -搞定HTAP
圖十一 FDW -搞定HTAP
FDW目前僅在開來源資料庫中支援;對於商用資料庫,目前僅SAP商業產品支援類似的功能。FDW可以實現資料的冷熱分離和跨界存取。比如,可以將熱資料存放區在PostgreSQL本地,冷資料存在Hadoop或者Spark、MySQL中,通過PostgreSQL提供的統一的介面完成資料的跨界存取。目前mongodb就在使用PostgreSQL的FDW來解決BI資料分析的問題。
資料庫端程式設計 -搞定網路瓶頸
圖十二資料庫端程式設計 -搞定網路瓶頸
在目前的硬體條件下,普通的伺服器都能達到上百核,記憶體達到PB等級。在這種硬體裝置下,一台主機就能達到千萬等級的QPS。這樣就帶來了一個問題,在資料庫中us等級可處理的資料量,在網路中才傳輸可能會花費ms的時間。傳統的解決方式將商務邏輯放到應用程式端實現,然後將資料庫做的儘量簡單。現在通過PostgreSQL,可以將代碼放到資料庫端,PostgreSQL提供了C、Python、R、Perl等語言的開發介面,通過資料庫端程式設計解決資料移動帶來的網路RT瓶頸。
rank化和關聯性計算 -搞定最強壓縮比
圖十三 rank化和關聯性計算 -搞定最強壓縮比
隨著資料量的增大,資料的存放成本也隨之增大。PostgreSQL中提供了列隱藏、壓縮外掛程式,可自動清理資料壓縮。
本文所提到的所有案例的詳細介紹本文連結如下:
http://www.postgresql.org/docs/9.5/static/datatype-json.html
http://www.postgresql.org/docs/9.5/static/functions-json.html
- 時間序列與流式即時處理,即時資料流式資料處理案例 (萬億每天)
https://yq.aliyun.com/articles/166
https://yq.aliyun.com/articles/2999
https://github.com/jaiminpan/pg_jieba
https://github.com/jaiminpan/pg_scws
http://blog.163.com/digoal@126/blog/static/163877040201422410175698/
- 柔邊查詢,正則查詢 (1000億級, 5秒內返回)
https://yq.aliyun.com/articles/7549
http://blog.163.com/digoal@126/blog/static/163877040201531931956500/
http://www.postgresql.org/docs/9.5/static/functions-bitstring.html
- 秒殺 (TPS從 2855優化到 231376的手段)
https://yq.aliyun.com/articles/3010
- 高並行 ( 8000個並行對話,推測更新500萬記錄表中的1條記錄)
https://yq.aliyun.com/articles/102
https://yq.aliyun.com/articles/18042
結尾
針對PostgreSQL,阿裡雲也做了很多工作,為了便於大家使用PostgreSQL,阿裡雲中特推出了ApsaraDBfor RDS (PG),提供7*24小時的頂級專家服務,同時也基於PostgreSQL的社群組建做了一定的優化工作。
本文根據阿裡雲飛天八部資料庫技術組技術專家德歌在5月17日舉辦的2016雲棲大會·武漢峰會上《PostgreSQL資料庫之物聯網的套用》演講清理而成。
·【直播預告】5月27日,阿裡雲進階技術專家德歌將在雲棲社群直播《雲資料庫RDS for PostgreSQL最佳實踐》:https://yq.aliyun.com/webinar/join/15,為你分享阿裡雲雲資料庫PostgreSQL的最佳技術實戰,包括PostgreSQL提示、上雲實戰、資料移轉與同步、外掛程式使用等內容,純乾貨。
相關產品:
1.物聯網套件
2.金融解決方案
3.企業級分散式套用服務
4.雲端服務器ECS