《阿里云德哥:PostgreSQL 數據庫的前世今生》要點:
本文介紹了阿里云德哥:PostgreSQL 數據庫的前世今生,希望對您有用。如果有疑問,可以聯系我們。
相關主題:PostgreSQL教程
編纂IT大咖說閱讀字數: 2976 用時: 10分鐘
PostgreSQL是以加州大學伯克利分校計算機系開發的 Posrgres,現在已經更名為PostgreSQL.它是一個自由的對象-關系數據庫服務器(數據庫管理系統),它在靈活的 BSD-風格許可證下發行.PostgreSQL 中國社區發起人之一Digoal為我們帶來PostgreSQL 前世今生、社區理念以及阿里云PostgreSQL內核優化.
http://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中間這些過程里的一些里程碑和大家分享一下.
PostGIS:
穿越回2002年,從這個版本開始就出現很多日常使用中會接觸到的一些特性.好比在02年的時候它已經支持GIS,到現在GIS在民用里已經非常廣泛了.這里用得最多的是二維或是根據經緯度做一些距離的搜索.
但PG和其他誕生于互聯網的數據庫的地理位置信息處理不太一樣,它還做了像raster這種數據類型的處理,在軍工、科研的領域要求就比擬高.
對于二維的類型,比如它支持點面判斷、支持距離的計算等等,這種運算在數據庫里面都實現.所以說它的支持比擬完備.
另外一個就是索引.對一個數據庫來說,真正的支持一個數據類型,除了能夠input、output,能夠支持計算之外,還必要加一個索引.
最后就是函數.能使用本身編寫的UDF或者內置的UDF去處理數據類型,這樣對一個數據庫來說才能夠真正稱得上支持這個數據類型.因此PostGIS在PostgreSQL里面真正做到了一個對數據類型的支持.
窗口查詢-數據透視:
從2002年飛越到2009年,發布8.4版本的時候就已經支持窗口查詢.
比如根據學生的學號在不同窗口里查它數據的屬性.要查省里排名第一的人,以及跟第一的人名次分值差別是多少.另外還有一個窗口,比如這個城市或者學校里又會有和那個窗口里第一名的差距.如果說沒有語法支持的話,得跟數據庫交互很多次才能夠滿足業務上的需求.跟數據庫交互有很大開銷,所以在這一塊有窗口查詢功能是比擬好的.
遞歸查詢-支持樹形布局數據:
另外一個就是遞歸查詢.好比要根據數據結構從某一個節點往上或往下推出來它對應的節點,使用遞歸查詢就可以很方便的來完成這個需求.
遞歸查詢:優化count(distinct)
遞歸查詢還有另外一個好處,它可以做一個收斂的查詢.在數據稀疏的情況下,利用遞歸查詢和直接count(distinct)的性能差別是非常大的.
并行恢復:
當時支持了邏輯層面的并行恢復.
異步流復制:
在9.0的時候支持了異步流復制,基本上可以做到毫秒級的延遲,跟網絡環境當然也是息息相關的.同時它支持一組多備、支持備庫的read only.而且備庫的read only不會影響redo.最重要的一點是這種方式它是物理一致的,不是邏輯一致.因為邏輯上保證一致性還是有比擬大的風險,比擬容易出現主備不一致的問題.但是物理上基本上就不會有這樣的問題.
快速大版本升級:
把一個數據庫分為兩個數據的種類.一個是這個元數據,另外一個就是數據文件.大版本的升級實際上只必要把元數據拷貝到新的版本里去,數據文件不用拷過去,所以這個升級是很快的.
那么最后是要做一個統計信息的重新收集.因為大版本的升級往往是統計信息的元數據有可能會變,統計信息會在新版本里面失效,所以在新版本里就得重新去生成統計信息.生成統計信息的速度還是比擬快的.
同步流復制:
9.1在流復制這一塊加了一個同步的功能,用戶可以根據事務可靠性要求,選擇本領務是否需要同步復制.
KNN查詢索引支持:
針對近鄰查詢做了一個索引的支持.比如要根據經緯度去查詢最近的用戶,或者根據數值查詢最相鄰數值,以及根據文原形似度查詢最相似文本.
像探探、陌陌這種應用里一個最核心的訴求,便是根據距離查詢用戶.
FDW接口:
在一家比較大的企業里,可能會用到很多數據庫的品種.現在有了FBW之后的話,對應用來說,它會更加輕松了.可以通過外部的拜訪接口直接去透傳到遠端的數據庫.
GiST取代B-Tree用于范圍匹配查詢:
傳統B-Tree的查詢效率比擬低,而GiST可以存一個范圍的數據類型,使用這個索引檢索,可以達到八萬TPS,性能提升非常明顯.
JSON支持:
JSON在9.2的時候僅支持數據的存取,同時能夠使用JavaScript語言處理數據類型,所以在9.2的時候JSON的支持是不完美的.
級聯復制:
在9.2的時候還推出了級聯復制.它的好處是提高了效率,減輕了負擔.
物化視圖:
9.3支持了物化視圖.假如要頻繁查詢某一份大數據里某些維度的數據,并且要帶上一些比擬奇怪的條件.以往可能要在全范圍的數據里面去做檢索,現在可以把它做成一個物化視圖,之后去這個物化視圖里查詢數據.
可寫FDW:
FDW已經支持可寫了.現在不僅僅可以讀過來,還可以寫過去,這也為sharding打下了一個基礎.
變亂觸發器:
9.3還有一個特性叫事件觸發器.它其實作用非常多,比如邏輯復制里面的DDL無法復制,可能要做一些堵塞式的操作.使用事件觸發器的話,操作就比擬方便.
另外它還有一個很好的作用,就是在企業里面,DBA是很難控制的.通常我們是把DBA的行為記錄下來,但是不能避免它去做一些DDL的動作.那么使用事件觸發器,它就能夠控制.這個其實是對DBA的一種掩護.
JSONB:
SONB是真正一個完備的支持,現在除了IO之外,還有了OP、AM、func來支持它.
它可以做任意KEY或者value的索引支持.
在value里它支持numeric、string、time、array等,包含常用的JSON類型查詢、構造符都支持.
多master復制:
多Master基于redo的邏輯復制,是9.4的一個新特性.
防止雪崩:
使用緩存預熱的插件可以抵御雪崩效應,響應時間保持安穩.
高效(秒、毫秒級)模糊檢索、分詞:
PG支持和搜索引擎一樣的功能,即使前后都遮擋了,PostgreSQL也能把它查出來.
流式數據-塊級索引BRIN:
在物聯網里有很多傳感器,這些傳感器會不絕發數據上來,經常要處理和時間維度相關的數據.因此時間維度和存儲數據的線性相關性是很強的,在這種情況下就可以做塊級索引.
GIS數據結合窗口、多維分析:
避免了冗余掃描和計算,每個大范圍的數據只需要掃一次;辦理靈活多變的多維透視需求.
同時也解放了程序員的雙手,一次性統計出所有可能產生的維度.
并行計算-精準營銷:
加了基于CPU的并行計算之后,很多企業做報表的時候可以在PG里用上所有資源,就不必要把數據同步出去來處理.
金融級-多副本可靠性:
支持任意副本,提供了非常高的可靠性要求副本.
前端-任意維度勾選:
Bloom,gin,任意索引bitmap合并等技術辦理任意列組合查詢的效率和彈性問題.
10版本預計2017金秋全新發布,敬請期待…
GIS業務-最佳路徑計算
圖像搜索
基因測序
3D數據處理
一條SQL搞定聚類分析
線性回歸例子
機器學習UDF庫
一條SQL搞定流式實時處理
超輕鎖-秒殺特性
數據庫編程才能
估值計算
文本挖掘-相似度
物聯網-旋轉門壓縮
PostgreSQL社區理念
PostgreSQL將是繼ingres之后又一個改變世界的產物.
阿里云PostgreSQL內核優化
阿里云ApsaraDB for PostgreSQL正在努力將數據庫與其他云產物實現更好的銜接和配合.通過oss_fdw插件,使得PostgreSQL可以和云端對象存儲配合使用,將冷數據存入oss,實現冷熱分離和多實例數據共享.未來將與其他更多云端組件進行銜接.
歡迎參與《阿里云德哥:PostgreSQL 數據庫的前世今生》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/9190.html