德歌:PostgreSQL獨孤九式搞定物聯網

來源:互聯網
上載者:User

摘要: 隨著物聯網的越來越廣泛使用,特定套用場景的需求也越發明顯,如智慧物流中需要對地理位置資訊處理需求強烈;公安刑偵中的柔邊化搜尋等等。這不僅對物聯網中的硬體是個挑戰,同時對物聯網中資料庫管理系統也提出了更高的要求。本文即為大家分享關於PostgreSQL如何搞定物聯網的“獨孤九式”。

·【直播預告】5月27日,阿裡雲進階技術專家德歌將在雲棲社群直播《雲資料庫RDS for PostgreSQL最佳實踐》:https://yq.aliyun.com/webinar/join/15,為你分享阿裡雲雲資料庫PostgreSQL的最佳技術實戰,包括PostgreSQL提示、上雲實戰、資料移轉與同步、外掛程式使用等內容,純乾貨。

·

物聯網產業不再僅僅只是裝置的接入,裝置接入後資料的採集和融合,以及融合後的剖析,會為整個社會帶來重要的價值。資料,讓我們更真實的瞭解社會與自然,讓人與自然、與社會更加的融合。但物聯網也遠沒你想的那麼難,經典的物聯網架構分為感知層、網路層和應用程式層。感知層主要包括感應器閘道、節點等資料擷取工具;採集到的資料再經過互連網、移動通信網等傳輸網傳遞到物聯網的“大腦”-應用程式層加以剖析套用。隨著物聯網的越來越廣泛使用,特定套用場景的需求也越發明顯,如智慧物流中需要對地理位置資訊處理需求強烈;公安刑偵中的柔邊化搜尋等等。這不僅對物聯網中的硬體是個挑戰,同時對物聯網中資料庫管理系統也提出了更高的要求。


本文即為大家分享關於PostgreSQL如何搞定物聯網的“獨孤九式”——

總訣式-知己知彼、百戰不殆

5fec0ba387366cda2c91994269b61b3efc5c8211

圖一總訣式-知己知彼、百戰不殆

正如兵家講究知己知彼,百戰不殆一樣,要真正實現萬物互聯、互通的物聯網,就要熟知特定場景的具體要求,有針對性地給出解決方案。通過對智慧家居、環境監測、城市交通、個人保健等具體場景的剖析,可以對物聯網套用場景屬性做一個小結:

  • 資料量大 (壓縮、資料處理能力);
  • 資料有時序、時空、文字屬性 (時序、地理位置、文字資料處理能力);
  • 某些資料難以結構化,如影像處理 (自訂能力、擴充能力、非結構化資料處理能力);
  • 資料處理即時性高 (串流能力);
  • 資料維度多,關聯性複雜 (複雜查詢、統計剖析能力);
  • 有柔邊、相似性查詢需求 (資料歸類、索引功力);
  • 某些場景行鎖競爭強烈 (秒殺屬性功能)。

有了總訣式作為心法總綱,就可以針對特定的“招式”一一破解。

破劍式 -搞定非結構化、定制資料物件

5b4f2bad13aade1be956a552bbaa3daac42a302d

圖二 破劍式 -搞定非結構化、定制資料物件

要知道很多資料是不可以預先結構化的,或者是經過產品反覆運算程序後,預先結構化不再起作用,如影像處理等。因此非結構化的處理在物聯網中顯得尤為重要。

PostgreSQL是這樣來應對非結構化資料場景的:首先PostgreSQL支援JSONB資料類型,該資料類型非常適合非結構化資料場景,例如感應器採集的資料以JSON格式上傳;其次在定制資料物件方面,PostgreSQL開放了類型擴充和索引擴充兩類介面,消費者無需追隨資料庫核心的實現方式,只需要追隨商務本身。比如電路板的品質檢測場景,消費者只需要追隨焊點是否虛焊,然後再通過開放的介面將其物件化到資料庫中;同時PostgreSQL中的自訂函數支援CPythonJava等多種語言定義,擴充性極高。

破刀式 -搞定文字、空間、時序流式資料

4a20d215de3abb81146520d6ec2485bbd3297b9b

圖三破刀式 -搞定文字、空間、時序流式資料

在柔邊查詢、分詞等文字處理方面,PostgreSQL天然支援分詞的屬性,包括中文分詞和英文分詞,效能上能夠做到每秒處理千萬詞彙的等級,足夠滿足消費者的需求。

空間地理位置資料管理方面,PostgreSQL支援PostGISPgrouting兩種置放處理的外掛程式,PostGIS是全球使用範圍最廣的地理位置資訊處理外掛程式,在美國宇航局、歐洲宇航局等企業中得到了廣泛使用;Pgrouting是基於置放資訊完成最短路徑運算的外掛程式。

串流方面,PostgreSQL9.5以後的組建支援BRIN索引,非常適合帶有時序屬性的流式資料。如果按照時間來存取流式日誌資料,以往需要建立B-tree索引進行範圍查詢或者精確配對,但是B-tree索引會因為需要隱藏的較大信息量導致索引也很龐大;而BRIN記錄的是每(連續)塊中繼資料,索引變得很小。下圖是兩種索引之間差別詳細對比:

01e7494de60e32ea1687db0d6656849e35bb5c4a

圖四 BRIN索引與B-TREE索引效能對比

破槍式 -搞定即時資料流處理

229747f3af6b72afe82b227f22ad317c18414e5d

圖五破槍式 -搞定即時資料流處理

即時資料流處理的即時性要求很高,同時傳統的流式計算開發門檻高。但採用PostgreSQL,僅一條SQL就可以搞定流失即時處理。在資料源源不斷地往資料庫持續插入程序中,只需要定義好需要即時統計的視窗或者是流檢視,資料庫後臺就可以即時地進行資料統計。查詢流失處理結果的回應時間是在毫秒等級的。PostgreSQL在串流方面大大簡化了開發這一環節。其處理能力相當強大,一台8GCPU的伺服器每天能夠處理百億等級的流式資料。

破鞭式 -搞定複雜查詢

bf1c642d339cdd97c3239b0e4f6f9742e5fda0a5

圖六破鞭式 -搞定複雜查詢

在物聯網中,因為資料維度多、關聯性複雜,所以複雜查詢也是一個不容忽視的問題。PostgreSQL中通過支援遺傳演算法、HASHJOINHASH彙總,解決了多表查詢的效率問題,在剖析場景中比傳統的巢狀循環效能升階100倍以上。

除此之外,在監測場景中,傳統基於閥值或狀態的監測方式是無法發現監測程序中存在遞色、趨勢異常的情況。PostgreSQL中採用基於方差的監測方式用於遞色檢測;同時基於時間或屬性關聯性,進行趨勢檢測,防患於未然。

破索式 -搞定資料分析

PostgreSQL具有強大的資料採礦能力,可以通過一條SQL搞定資料採礦,例如:

SELECT kmeans(ARRAY[x, y, z], K) OVER (), * FROM samples;

這條語句就可以實現群集;同時PostgreSQL支援GPUCPU平行計算,處理能力達到25GB/s,已經達到目前記憶體極限;此外PostgreSQL還相容MADLib(支援幾百個機器學習服務庫函數、對應各種數學型號)PL/R,PL/Python

270180f54342eb95348a65f944448cc3e222e512

圖七破索式 -搞定資料分析

破掌式 -搞定秒殺(高並發行鎖競爭)

9eb09aabf8f9d649ba543615ec7c99b12e8a66f9

圖八破掌式 -搞定秒殺(高並發行鎖競爭)

在物聯網領域,例如秒殺等場景行鎖競爭強烈。傳統的行鎖具有無效等待多、無效等待用戶長時間佔用對話資源、發現鎖衝突的代碼路徑長,需進行大量CPU運算等弊端。PostgreSQL提供了超輕鎖((advisoryLOCK))來解決高並行鎖競爭問題,通過CPU運算發現行鎖之前就知道是不是存在衝突,大大縮短CPU計算、等待資源,比如在秒殺搶手機的活動中,給定每個手機一個編號,拿到編號的用戶才可以進行搶手機,這樣就解決了並行度的問題,整體效能得到了近百倍的升階。

破箭式 -搞定柔邊、正則查詢

8070b0305d832482d2b4618d195ac3941cba75bf

圖九破箭式 -搞定柔邊、正則查詢

物聯網中,對強烈影響柔邊、相近度查詢需求,較大傳統查詢方式是採用全資料表掃描的方式,百億資料的查詢回應至少是小時等級的。在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這一屬性,也是其廣泛地用於公安刑偵、車牌、位址、信箱等查詢中。

破氣式 -搞定巨量資料處理能力

766f6a24caebc8e76b86e221b705132df762de19

圖十破氣式 -搞定巨量資料處理能力

隨著資料量的增大,會衍生出非常多的問題。在PostgreSQL採取了以下幾種方式處理巨量資料:

  1. 對於單機節點,採用基於CPUGPU的計算;
  2. PostgreSQL新增了FDW外掛程式用於資料的冷熱分離,可以將資料置放在Hadoop或者Spark,通過PostgreSQL提供的統一提供者,實現HTAP(線上與離線處理一份資料);
  3. 支援OLTP分庫分表;
  4. 支援讀寫分離、一主多備、多複本強同步;
  5. 通過級聯複製,解決主庫壓力問題和跨機房的多份資料轉送問題;
  6. 服務端程式設計能力,解決move data帶來的網路延遲問題;
  7. 支援多主複製,解決物聯網地區節點和中心節點的資料相互同步問題。

接下來,針對幾個特殊的屬性具體剖析下它們的實現程序:

FDW -搞定HTAP

a9ff9975a2ec33b1394b1948736a5bb2199eaeb4

圖十一 FDW -搞定HTAP

FDW目前僅在開來源資料庫中支援;對於商用資料庫,目前僅SAP商業產品支援類似的功能。FDW可以實現資料的冷熱分離和跨界存取。比如,可以將熱資料存放區在PostgreSQL本地,冷資料存在Hadoop或者SparkMySQL中,通過PostgreSQL提供的統一的介面完成資料的跨界存取。目前mongodb就在使用PostgreSQLFDW來解決BI資料分析的問題。

資料庫端程式設計 -搞定網路瓶頸

cc730cf94b4e6c3d318fefa5fe89b29bb65d1df5

圖十二資料庫端程式設計 -搞定網路瓶頸

在目前的硬體條件下,普通的伺服器都能達到上百核,記憶體達到PB等級。在這種硬體裝置下,一台主機就能達到千萬等級的QPS。這樣就帶來了一個問題,在資料庫中us等級可處理的資料量,在網路中才傳輸可能會花費ms的時間。傳統的解決方式將商務邏輯放到應用程式端實現,然後將資料庫做的儘量簡單。現在通過PostgreSQL,可以將代碼放到資料庫端,PostgreSQL提供了CPythonRPerl等語言的開發介面,通過資料庫端程式設計解決資料移動帶來的網路RT瓶頸。

rank化和關聯性計算 -搞定最強壓縮比

8b6893c4896ff86e35e796cc8556434328913033

圖十三 rank化和關聯性計算 -搞定最強壓縮比

隨著資料量的增大,資料的存放成本也隨之增大。PostgreSQL中提供了列隱藏、壓縮外掛程式,可自動清理資料壓縮。

本文所提到的所有案例的詳細介紹本文連結如下:

  • JSONB非結構化類型使用方法

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

  • BRIN索引,非常適合帶有時序屬性的流式資料

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

  • 列隱藏、升階壓縮比。節約98%空間的例子

https://yq.aliyun.com/articles/18042

結尾

針對PostgreSQL,阿裡雲也做了很多工作,為了便於大家使用PostgreSQL,阿裡雲中特推出了ApsaraDBfor RDS (PG),提供7*24小時的頂級專家服務,同時也基於PostgreSQL的社群組建做了一定的優化工作。

本文根據阿裡雲飛天八部資料庫技術組技術專家德歌517日舉辦的2016雲棲大會·武漢峰會上《PostgreSQL資料庫之物聯網的套用》演講清理而成。

·【直播預告】527日,阿裡雲進階技術專家德歌將在雲棲社群直播《雲資料庫RDS for PostgreSQL最佳實踐》:https://yq.aliyun.com/webinar/join/15,為你分享阿裡雲雲資料庫PostgreSQL的最佳技術實戰,包括PostgreSQL提示、上雲實戰、資料移轉與同步、外掛程式使用等內容,純乾貨。

相關產品:

1.物聯網套件

2.金融解決方案

3.企業級分散式套用服務

4.雲端服務器ECS

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.