1. 程式人生 > 其它 >postgresql(pg)資料庫簡介-new資料庫

postgresql(pg)資料庫簡介-new資料庫

1.什麼是PostgreSql

PostgreSQL是一個功能強大的開源物件關係型資料庫系統,他使用和擴充套件了SQL語言,並結合了許多安全儲存和擴充套件最複雜資料工作負載的功能。PostgreSQL的起源可以追溯到1986年,作為加州大學伯克利分校POSTGRES專案的一部分,並且在核心平臺上進行了30多年的積極開發。

PostgresSQL憑藉其經過驗證的架構,可靠性,資料完整性,強大的功能集,可擴充套件性以及軟體背後的開源社群的奉獻精神贏得了良好的聲譽,以始終如一地提供高效能和創新的解決方案。PostgreSQL在所有主要作業系統開始使用PostgreSQL從未如此簡單。

2.為什麼要使用PostgreSQL

PostgreSql提供了許多功能,旨在幫助開發人員構建應用程式,管理員保護資料完整性並且構建容錯環境,並幫助你管理資料,無論資料集的大小。除了免費和開源之外,Postgre SQL還具有高度的可擴充套件性。例如,你可以定義自己的資料型別,構建自定義SQL函式(此sql函式在另一篇帖子討論:點此跳轉),甚至可以編寫來自不同程式語言的程式碼,而不需要重新編譯資料庫。

PostgreSql試圖符合SQL標準,在這種標準中,這種一致性不會與傳統特性相矛盾,或者可能導致糟糕的架構決策。支援SQL標準所需的許多功能,但是有時候語法或者功能略有不同。隨著時間的推移,可以預期進一步向一致性邁進。從2018年10月釋出的11版本開始,PostgreSQL符合SQL:2011核心一致性的179個強制性功能中的至少160個,在此之前,沒有任何關係型資料庫符合此標準的完全符合。

3.下面是PostgreSQL中的各種功能介紹

資料型別
1.基本型別:Integer, Numeric, String, Boolean
2.結構型別:Date/Time, Array, Range, UUID
3.文件型別:JSON/JSONB, XML, Key-value(Hstore)
4.幾何型別:Point, Line, Circle, Polygon
5.自定義型別:Composite, Custom Types

資料的完整性
1.唯一性,不為空
2.主鍵
3.外來鍵
4.排除約束
5.顯式鎖定,諮詢鎖定

併發性,效能
1.索引
2.高階索引
3.複雜的查詢計劃期/優化器
4.互動
5.多版本併發控制(MVCC)
6.讀取查詢的並行化和構建B樹索引
7.表分割槽
8.Sql標準中定義的所有事物隔離級別,包括Serializable
9.即時表示式彙編(JIT)

可靠性,災難恢復
1.預寫日誌(WAL)
2.複製:非同步,同步,邏輯
3.時間點恢復(pitr),主動備用
4.表空間

安全性
1.身份驗證:GSSAPI, SSPI, LDAP, SCRAM-SHA-256, 證書等
2.強大的訪問控制系統
3.列和行級安全性

可擴充套件性
1.儲存的功能和程式
2.程式語言:PL/PGSQL, Perl, Python (more)
3.外部資料包裝器:使用標準SQL介面連線到其他資料庫或流
4.許多提供附加功能的擴充套件,包括PostGIS

國際化,文字搜尋
1.支援國際字符集,例如通過ICU校對
2.全文檢索

對比Mysql
1.PostgreSQL的穩定性極強,Innodb等引擎在崩潰、斷電之類的災難場景下抗打擊能力有了長足的進步,然而很多Mysql使用者都遇到過Server級的資料庫丟失的場景---Mysql系統庫是MyISAM的,相較而言,PG資料庫在這方面要好一些。


2.任何系統都有他的效能極限,在高併發讀寫,負載逼近極限下,PG的效能指標仍然可以維持雙曲線甚至對數曲線,到頂峰之後不再下降,而MySQL明細出現一個波峰後下滑。


3.PG多年在GIS領域處於優勢地位,因為它有豐富的幾何型別,實際上不止幾何型別,PG中有大量的字典、陣列、bitmap等資料型別,相比之下MaySQL就差很多,insagram就是因為PG的空間資料庫擴充套件POSTGIS遠遠強於MySQL的my spatial而採用PGSQL的。


4.PG的“無鎖定”特性非常突出,甚至包括vacuum這樣的整理資料空間的操作,這個和PGSSQL的MVCC實現有關係。


5.PG的可以使用函式和條件索引,這使得PG資料庫的調優非常靈活,mysql就沒有這個功能,條件索引在web應用中很重要。


6.PG有極其強悍的SQL程式設計能力,有豐富的統計函式和統計語法支援,比如分析函式(Oracle的叫法,PG裡面叫Window函式),還可以用多種語言來寫儲存過程,對於R的支援也很好。這一點上MySQL就差的很遠,很多分析功能那個都沒有,騰訊內部資料儲存主要是Mysql,但是主要的資料分析就是Hadoop+PGsql。


7.PG的有很多中叢集架構可以選擇,plproxy可以支援語句級的映象或者分片,slony可以進行欄位級的同步設定,standby可以構建WAL檔案級或者流式的讀寫分離叢集,同步頻率和叢集策略調整方便,操作非常簡單。


8.一般關係型資料庫的字串有限定長度8k左右,無限長Text型別的功能受限,只能作為外部大資料訪問。而PG的TEXT型別可以直接方法,SQL語法內建正則表示式,可以索引,還可以全文檢索,或使用xml xpath。用PG的話,文件資料庫就可以省略了


9.對於web應用來說,複製的特性很重要,Mysql到現在也是非同步複製,pgsql可以做到同步,非同步,半同步複製。還有mysql的同步是基於binlog複製,類似oracle golden gate, 是基於stream的複製,做到同步很困難,這種方式更加適合異地複製,pgsql的複製基於wal,可以做到同步複製。同時pgsql還提供stream複製。


10.Pgsql對於numa架構的支援要比mysql強一些,比mysql對於讀的效能要好些,pgsql提交可以完全非同步,而mysql的記憶體表不夠實用(表鎖原因)