PostgreSQL 數據庫的前世此生


編輯:IT大咖說
閱讀字數: 2976    用時: 10分鐘

本文內容來源於Digoal(德哥)PostgreSQL2016中國用戶大會(大象會)上的主題演講,IT大咖說爲PostgreSQL 中國社區合做的視頻知識分享平臺。前端


內容摘要

PostgreSQL是以加州大學伯克利分校計算機系開發的 Posrgres,如今已經改名爲PostgreSQL。它是一個自由的對象-關係數據庫服務器(數據庫管理系統),它在靈活的 BSD-風格許可證下發行。PostgreSQL 中國社區發起人之一Digoal爲咱們帶來PostgreSQL 前世此生、社區理念以及阿里雲PostgreSQL內核優化。程序員

嘉賓分享視頻地址:t.cn/RorS35x數據庫


PostgreSQL前世此生編程


我在2015年加入了阿里雲,並在阿里巴巴內部推廣PostgreSQL。若是你原來使用的是那種相對較弱的其餘數據庫,用了PostgreSQL以後你會發現,原來數據庫能夠能夠這麼強大。
緩存


PostgreSQL發展歷史服務器

PostgreSQL在1973年還處於一個渾沌初開的年代,在那個年代你們並不瞭解數據庫。很不幸的是,在1982年的時候ingres就閉源了,走上了商業化的道路。網絡


PostgreSQL真正誕生於二十世紀八十年代,它沿用了ingres不少的思想。到了1995年,兩位華人把PostgreSQL的SQL引擎改掉以後,正式社區化了。在1995年的時候它是一個「金蟬脫殼」的狀態。PostgreSQL今後誕生了。
數據結構


版本迭代機器學習

從最初的版本PG95到如今,基本上它每一年會發一個大的版本,每三個月左右可能會出一個小版本。咱們今天所看到的已經release出來的最新版本是9.6的版本。異步




我會將整個PostgreSQL從誕生到9.6中間這些過程裏的一些里程碑和你們分享一下。


7.2版本

PostGIS:

穿越回2002年,從這個版本開始就出現不少平常使用中會接觸到的一些特性。好比在02年的時候它已經支持GIS,到如今GIS在民用裏已經很是普遍了。這裏用得最多的是二維或是根據經緯度作一些距離的搜索。

但PG和其餘誕生於互聯網的數據庫的地理位置信息處理不太同樣,它還作了像raster這種數據類型的處理,在軍工、科研的領域要求就比較高。

對於二維的類型,好比它支持點面判斷、支持距離的計算等等,這種運算在數據庫裏面都實現。因此說它的支持比較完備。


另一個就是索引。對一個數據庫來講,真正的支持一個數據類型,除了可以input、output,可以支持計算以外,還須要加一個索引。

最後就是函數。能使用本身編寫的UDF或者內置的UDF去處理數據類型,這樣對一個數據庫來講纔可以真正稱得上支持這個數據類型。所以PostGIS在PostgreSQL裏面真正作到了一個對數據類型的支持。


8.4版本

窗口查詢-數據透視:

從2002年飛越到2009年,發佈8.4版本的時候就已經支持窗口查詢。

好比根據學生的學號在不一樣窗口裏查它數據的屬性。要查省裏排名第一的人,以及跟第一的人名次分值差異是多少。另外還有一個窗口,好比這個城市或者學校裏又會有和那個窗口裏第一名的差距。若是說沒有語法支持的話,得跟數據庫交互不少次纔可以知足業務上的需求。跟數據庫交互有很大開銷,因此在這一塊有窗口查詢功能是比較好的。


遞歸查詢-支持樹形結構數據:

另一個就是遞歸查詢。好比要根據數據結構從某一個節點往上或往下推出來它對應的節點,使用遞歸查詢就能夠很方便的來完成這個需求。



遞歸查詢:優化count(distinct)

遞歸查詢還有另一個好處,它能夠作一個收斂的查詢。在數據稀疏的狀況下,利用遞歸查詢和直接count(distinct)的性能差別是很是大的。



並行恢復:

當時支持了邏輯層面的並行恢復。


9.0版本

異步流複製:

在9.0的時候支持了異步流複製,基本上能夠作到毫秒級的延遲,跟網絡環境固然也是息息相關的。同時它支持一組多備、支持備庫的read only。並且備庫的read only不會影響redo。最重要的一點是這種方式它是物理一致的,不是邏輯一致。由於邏輯上保證一致性仍是有比較大的風險,比較容易出現主備不一致的問題。可是物理上基本上就不會有這樣的問題。


快速大版本升級:

把一個數據庫分爲兩個數據的種類。一個是這個元數據,另一個就是數據文件。大版本的升級實際上只須要把元數據拷貝到新的版本里去,數據文件不用拷過去,因此這個升級是很快的。

那麼最後是要作一個統計信息的從新收集。由於大版本的升級每每是統計信息的元數據有可能會變,統計信息會在新版本里面失效,因此在新版本里就得從新去生成統計信息。生成統計信息的速度仍是比較快的。


9.1版本

同步流複製:

9.1在流複製這一塊加了一個同步的功能,用戶能夠根據事務可靠性要求,選擇本事務是否須要同步複製。


KNN查詢索引支持:

針對近鄰查詢作了一個索引的支持。好比要根據經緯度去查詢最近的用戶,或者根據數值查詢最相鄰數值,以及根據文本類似度查詢最類似文本。

像探探、陌陌這種應用裏一個最核心的訴求,就是根據距離查詢用戶。


FDW接口:

在一家比較大的企業裏,可能會用到不少數據庫的品種。如今有了FBW以後的話,對應用來講,它會更加輕鬆了。能夠經過外部的訪問接口直接去透傳到遠端的數據庫。



9.2版本

GiST取代B-Tree用於範圍匹配查詢:

傳統B-Tree的查詢效率比較低,而GiST能夠存一個範圍的數據類型,使用這個索引檢索,能夠達到八萬TPS,性能提高很是明顯。



JSON支持:

JSON在9.2的時候僅支持數據的存取,同時可以使用JavaScript語言處理數據類型,因此在9.2的時候JSON的支持是不完美的。


級聯複製:

在9.2的時候還推出了級聯複製。它的好處是提升了效率,減輕了負擔。



9.3版本

物化視圖:

9.3支持了物化視圖。假如要頻繁查詢某一份大數據裏某些維度的數據,而且要帶上一些比較奇怪的條件。以往可能要在全範圍的數據裏面去作檢索,如今能夠把它作成一個物化視圖,以後去這個物化視圖裏查詢數據。


可寫FDW:

FDW已經支持可寫了。如今不只僅能夠讀過來,還能夠寫過去,這也爲sharding打下了一個基礎。


事件觸發器:

9.3還有一個特性叫事件觸發器。它其實做用很是多,好比邏輯複製裏面的DDL沒法複製,可能要作一些堵塞式的操做。使用事件觸發器的話,操做就比較方便。

另外它還有一個很好的做用,就是在企業裏面,DBA是很難控制的。一般咱們是把DBA的行爲記錄下來,可是不能避免它去作一些DDL的動做。那麼使用事件觸發器,它就可以控制。這個實際上是對DBA的一種保護。


9.4版本

JSONB:

JSONB是真正一個完備的支持,如今除了IO以外,還有了OP、AM、func來支持它。

它能夠作任意KEY或者value的索引支持。

在value裏它支持numeric、string、time、array等,包括經常使用的JSON類型查詢、構造符都支持。


多master複製:

多Master基於redo的邏輯複製,是9.4的一個新特性。


防止雪崩:

使用緩存預熱的插件能夠抵禦雪崩效應,響應時間保持平穩。

高效(秒、毫秒級)模糊檢索、分詞:

PG支持和搜索引擎同樣的功能,即便先後都遮擋了,PostgreSQL也能把它查出來。




9.5版本

流式數據-塊級索引BRIN:

在物聯網裏有不少傳感器,這些傳感器會不停發數據上來,常常要處理和時間維度相關的數據。所以時間維度和存儲數據的線性相關性是很強的,在這種狀況下就能夠作塊級索引。


GIS數據結合窗口、多維分析:

避免了冗餘掃描和計算,每一個大範圍的數據只須要掃一次;解決靈活多變的多維透視需求。

同時也解放了程序員的雙手,一次性統計出全部可能產生的維度。

9.6版本

並行計算-精準營銷:

加了基於CPU的並行計算以後,不少企業作報表的時候能夠在PG裏用上全部資源,就不須要把數據同步出去來處理。


金融級-多副本可靠性:

支持任意副本,提供了很是高的可靠性要求副本。

前端-任意維度勾選:

Bloom,gin,任意索引bitmap合併等技術解決任意列組合查詢的效率和彈性問題。


10版本

10版本預計2017金秋全新發布,敬請期待…


其它插件

GIS業務-最佳路徑計算

圖像搜索

基因測序

3D數據處理

一條SQL搞定聚類分析

線性迴歸例子

機器學習UDF庫

一條SQL搞定流式實時處理

超輕鎖-秒殺特性

數據庫編程能力

估值計算

文本挖掘-類似度

物聯網-旋轉門壓縮


PostgreSQL社區理念


PostgreSQL將是繼ingres以後又一個改變世界的產品。


阿里雲PostgreSQL內核優化


阿里雲ApsaraDB for PostgreSQL正在努力將數據庫與其餘雲產品實現更好的銜接和配合。經過oss_fdw插件,使得PostgreSQL能夠和雲端對象存儲配合使用,將冷數據存入oss,實現冷熱分離和多實例數據共享。將來將與其餘更多雲端組件進行銜接。


點擊www.itdks.com進入乾貨密道

相關文章
相關標籤/搜索