震精-資料庫還能這樣玩-三十六計(中)

德哥發表於2017-03-24

PostgreSQL 三十六計 – 中

13. 金融風控、公安刑偵、社會關係、人脈分析 等業務場景,高效實現圖式資料搜尋。

利用PostgreSQL函式程式設計,非同步訊息,複雜JOIN等手段,解決高效的圖式資料查詢需求。

1. 獵頭挖人

作為IT人士或者獵頭、HR,對Linkedin一定不陌生,領英網實際上就是一個維護人際關係的網站。

通過搜尋你的一度人脈,可以找到與你直接相關的人,搜尋2度人脈,可以搜尋到與你間接相關的人。

當然你還可以繼續搜尋N度人脈,不過那些和你可能就不那麼相關了。

如果你知道和美女范冰冰隔了幾度人脈,是不是有點心動了呢?

其實在古代,就有這種社會關係學,還有這種專門的職業,買官賣官什麼的,其實都是人脈關係網。看過紅樓夢的話,你會發現那家子人怎麼那麼多親戚呢?

2. 公安破案

公安刑偵學也是一類人脈相關的應用,只是現在的關係和行為越來越複雜,這種關係也越來越複雜,原來的人能接觸的範圍基本上就靠2條腿,頂多加匹馬。

現在,手機,電腦,ATM機,超時,攝像頭,汽車等等,都通過公路網、網際網路連線在一起。

一個人的行為,產生的關係會更加的複雜,單靠人肉的關係分析,刑偵難度變得越來越複雜。

3. 金融風控

比如銀行在稽核貸款資格時,通常需要稽核申請人是否有償還能力,是否有虛假訊息,行為習慣,資產,朋友圈等等。 同樣涉及到複雜的人物關係,人的行為關係分析等等。

此類圍繞人為中心,事件為關係牽連的業務催生了圖資料庫的誕生。

目前比較流行的圖資料庫比如neo4j,某些圖資料庫在資料量超過記憶體大小時,效能下降會非常嚴重。

PostgreSQL是一個功能全面的資料庫,其中就有一些圖資料庫產品的後臺是使用PostgreSQL的,例如OpenCog, Cayley等。

除了這些圖資料庫產品,PostgreSQL本身在關係查詢,關係管理方面也非常的成熟,十億量級的關係網資料,3層關係運算僅需毫秒。

還可以用於運算人與人之間的最短關係,窮舉關係等。

主要用到的技術plpgsql服務端程式設計、非同步訊息、陣列、遊標、pgrouting路由演算法等。

14. with recursive遞迴查詢有妙用。

大量資料的求差集、最新資料搜尋, 最新日誌資料與全量資料的差異比對, 遞迴收斂掃描,提升數百倍效能。

15. 資料一致性分享、資料泵

在IoT的場景中,有流式分析的需求,也有儲存歷史資料的需求,同時還有資料探勘的需求,搜尋引擎可能也需要同一份資料,還有一些業務可能也要用到同一份資料。

但是如果把資料統統放到一個地方,這麼多的業務,它們有的要求實時處理,有的要求批量處理,有的可能需要實時的更新資料,有的可能要對大資料進行分析。

10萬級別左右的機器,PostgreSQL 的資料吞吐量可以達到100萬條/s以上,同時資料庫本身具備了嚴格的可靠性和一致性保證。

PostgreSQL為分享資料提供了插槽的概念,每個插槽對應一個目標端,支援斷點續傳,支援多個目標端。用於流式的分享資料是非常好的選擇。

16. ad lock解決高併發更新少量記錄的秒殺問題

秒殺在商品交易中是一個永恆的話題,從雙十一,到一票難求,比的僅僅是手快嗎?

其實對於交易平臺來說,面對的不僅僅是人肉,還有很多指令碼,外掛自動化的搶購系統,壓力可想而知。

秒殺的優化手段很多,就拿資料庫來說,有用排隊機制的,有用非同步訊息的,有用交易合併的。

PostgreSQL提供了一種更極端的秒殺應對方法,裸秒。可以讓使用者盡情的釋放激情,以一臺32核64執行緒的機器為例,每秒可以獲取、探測約130萬次的ad lock。

試想一下,對單條記錄的秒殺操作,達到了單機100萬/s的處理能力後,秒殺算什麼?100臺機器就能處理1億/s的秒殺請求。

17. PostgreSQL 使用bitpack支援實時使用者畫像

使用者畫像在市場營銷的應用重建中非常常見,已經不是什麼新鮮的東西,比較流行的解決方案是給使用者貼標籤,根據標籤的組合,圈出需要的使用者。

通常畫像系統會用到寬表,以及分散式的系統。

寬表的作用是儲存標籤,例如每列代表一個標籤,但是通常資料庫到2000個列基本就是極限了,上萬TAG的話,只能使用多表JOIN來實現,效率較差。

另一方面,使用寬表(甚至列儲存),標籤的篩選效能也比較差(無法達到實時級別)。

以PostgreSQL資料庫為基礎,以BIT來儲存使用者,每行一個TAG的方式,單機支援十萬億user tags體量,毫秒級實時圈人。

18. 路徑動態規劃,助力物流配送、叫車軟體、導航軟體、出行軟體、高速、高鐵等業務場景

物流行業是被電子商務催生的產業之一。

快件的配送和攬件的排程演算法是物流行業一個非常重要的課題,直接關係到配送或攬件的時效,以及物流公司的運作成本。

好的演算法,可以提高時效,降低成本,甚至可以更好的調動社會資源,就像滴滴叫車一樣,也許能全民參與哦。

以後也許上班路途還能順路提供快遞服務呢。

以物流行業為例,PostgreSQL為物流行業應用提供了包括機器學習(madlib)、路徑規劃(pgrouting)、地理位置資訊儲存和處理等基礎服務。

19. 金融級可靠性,事務級可控多副本。

傳統的金融行業高度依賴共享儲存來解決資料庫的高可用,資料0丟失以及異地容災的場景。

共享儲存的解決方案價格昂貴,對廠商的依賴較大。

PostgreSQL基於同步流複製的任意副本解決方案,在解決0丟失,高可用以及容災的問題的同時,還可以提供只讀的功能。相比傳統的儲存解決方案,優勢更加明顯。

允許使用者根據事務的可靠性要求,設定事務所需的副本數。

20. 塊級瘦索引,解決物聯網、金融、日誌、行為軌跡類資料快速匯入與高效查詢的矛盾

在物聯網、金融、日誌型別場景中,資料持續不斷的產生,對於堆儲存來說,有線性相關的特點。

例如,時間欄位往往和物理儲存的順序具有線性相關性。

例如,有一些自增欄位,也和堆儲存的物理順序線性相關。

對與物理儲存線性相關的欄位(時間,自增欄位),PostgreSQL提供了一種BRIN塊級範圍索引,索引中儲存了對應資料塊中的欄位統計資訊(例如最大值,最小值,平均值,記錄數、SUM,空值個數等)

這種索引很小,因為索引的粒度是連續的塊,而不是每條記錄。

通常比BTREE索引小几百倍。

如果欄位的線性相關性很好,進行範圍查詢或者精確檢索時,效率非常高。

對於統計查詢,也可以使用BRIN索引,提高分析統計的效率。

21. 時序資料有失真壓縮

在物聯網、金融、FEED等場景中,往往有大批量的指標資料產生並進入資料庫,通常包含 時間、值 兩個欄位。

這些資料由於量非常龐大,而且就像音訊一樣,實際上是可以對其進行有損的壓縮儲存的。

最為流行的是旋轉門的壓縮演算法,在PostgreSQL中可以使用UDF,方便的實現這個功能。

從而實現流式時序資料的有失真壓縮,例如在UDF中使用旋轉門壓縮演算法,壓縮時序資料。

22. 準確詮釋資料型別,基因工程

PostgreSQL憑藉良好的擴充套件性,不僅僅是一個資料庫,同時也是具備非常強大的資料處理能力的資料平臺。

很多垂直行業的使用者拿它來做各種和業務貼合非常緊密的事情。

例如PostgreSQL在生命科學領域的應用案例 – 基因工程。

通常的思維可能是這樣的,把資料存在資料庫,需要運算的時候,再把資料取出進行運算(例如配對),需要花費非常多的網路傳輸時間。

PostgreSQL提供了基因工程相關的資料型別,操作型別,索引。滿足基因工程業務的需求。

使用者可以直接在資料庫中對基因資料進行處理。

23. 準確詮釋資料型別,化學分子

RDKit是PostgreSQL的化學外掛,支援化學資料型別的高效率存取,檢索,索引。以及操作符,例如化學成分的分解,合成。

對於一個資料庫來說,支援一個資料型別,首先需要支援資料型別的INPUT和OUTPUT,然後還要支援索引高效率的檢索這種型別的資料,需要支援足夠多的OP滿足業務的需求,支援UDF處理對應的資料型別。

如果沒有準確的詮釋,只能儲存為二進位制位元組流,或者字串,運算、檢索、操作、函式處理都不可能。

24. 資料預測、挖掘

PostgreSQL、以及ApsaraDB HybridDB(基於GPDB),等PostgreSQL相關的資料庫,都支援MADlib機器學習庫,這個庫支援機器學習領域常見的演算法(例如聚類、線性迴歸、貝葉斯、文字處理等等)

其中在資料領域用得較多的資料預測,可以使用MADLib的多元迴歸庫,進行對資料的預測。

結合plR語言 或者R + pivotalR 、 python + pythonR外掛,可以自動將Rpython語言的命令轉換為MADlib庫函式,對資料進行分析。

非常適合使用R或者python對資料進行分析的資料科學家使用。

其特點是高效(資料與運算一體,可以使用LLVM向量計算等技術優化,同時不需要傳播資料,節約了傳播的開銷)、易用(支援常見的SQL、r, python等程式設計)。


相關文章