自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

什么是PostgreSQL?比MySQL、Oracle強在哪

數(shù)據(jù)庫 其他數(shù)據(jù)庫 PostgreSQL
本文主要給大家介紹什么是PostgreSQL數(shù)據(jù)庫、PostgreSQL有哪些強大的功能及其目前的一些應用情況,以便大家對PostgreSQL有一個初步的認識。

1. 什么是PostgreSQL

PostgreSQL數(shù)據(jù)庫是功能強大的開源數(shù)據(jù)庫,它支持豐富的數(shù)據(jù)類型(如JSON和JSONB類型、數(shù)組類型)和自定義類型。

PostgreSQL數(shù)據(jù)庫提供了豐富的接口,可以很方便地擴展它的功能,如可以在GiST框架下實現(xiàn)自己的索引類型,支持使用C語言寫自定義函數(shù)、觸發(fā)器,也支持使用流行的編程語言寫自定義函數(shù)。

PL/Perl提供了使用Perl語言寫自定義函數(shù)的功能,當然還有PL/Python、PL/Java、PL/Tcl等。

2. PostgreSQL數(shù)據(jù)庫的優(yōu)勢

PostgreSQL數(shù)據(jù)庫具有以下優(yōu)勢:

  • PostgreSQL數(shù)據(jù)庫是目前功能最強大的開源數(shù)據(jù)庫,它是最接近工業(yè)標準SQL92的查詢語言,至少實現(xiàn)了SQL:2011標準中要求的179項主要功能中的160項(注:目前沒有哪個數(shù)據(jù)庫管理系統(tǒng)能完全實現(xiàn)SQL:2011標準中的所有主要功能)。
  • 穩(wěn)定可靠:PostgreSQL是唯一能做到數(shù)據(jù)零丟失的開源數(shù)據(jù)庫。目前有報道稱國內(nèi)外有部分銀行使用PostgreSQL數(shù)據(jù)庫。
  • 開源省錢: PostgreSQL數(shù)據(jù)庫是開源的、免費的,而且使用的是類BSD協(xié)議,在使用和二次開發(fā)上基本沒有限制。
  • 支持廣泛:PostgreSQL 數(shù)據(jù)庫支持大量的主流開發(fā)語言,包括C、C++、Perl、Python、Java、Tcl以及PHP等。
  • PostgreSQL社區(qū)活躍:PostgreSQL基本上每3個月推出一個補丁版本,這意味著已知的Bug很快會被修復,有應用場景的需求也會及時得到響應。

[[349495]]

3. PostgreSQL應用現(xiàn)狀和發(fā)展趨勢

PostgreSQL目前在國外很流行,特別是近幾年,使用PostgreSQL數(shù)據(jù)庫的公司越來越多。

日本電報電話公司(NTT)大量使用PostgreSQL替代Oracle數(shù)據(jù)庫,并且在 PostgreSQL之上二次開發(fā)了Postgres-XC,Postgres-XC是對使用者完全兼容PostgreSQL接口的share-nothing 架構(gòu)的數(shù)據(jù)庫集群。

亞信科技(AsiaInfo)在Postgres-XC的基礎(chǔ)上開發(fā)了AntDB數(shù)據(jù)庫,AntDB是一款面向金融、電信、政務、安全、能源等行業(yè)的分布式事務型關(guān)系數(shù)據(jù)庫產(chǎn)品。它具備集群自動高可用、秒級在線擴縮容、異地容災、SQL語句級自定義分片、分布式事務和MVCC等功能,且具有強大的Oracle兼容性。AntDB完全兼容PostgreSQL數(shù)據(jù)庫。

騰訊在PosgreSQL-XC基礎(chǔ)上開發(fā)了TBase分布式數(shù)據(jù)庫。相較于Postgres-XC,其穩(wěn)定性得到了較大提高,同時TBase通過在內(nèi)核中創(chuàng)造性地引入 GROUP 概念,提出了雙Key分布策略,有效地解決了數(shù)據(jù)傾斜的問題;它根據(jù)數(shù)據(jù)的時間戳,將數(shù)據(jù)分為冷數(shù)據(jù)和熱數(shù)據(jù),分別存儲于不同的存儲設備中,有效地解決了存儲成本的問題。

網(wǎng)絡電話公司Skype也大量使用了PostgreSQL,并貢獻了如下與PostgreSQL數(shù)據(jù)庫配套的開源軟件。

  • PL/Proxy:PostgreSQL中的數(shù)據(jù)水平拆分軟件。
  • pgQ:使用PostgreSQL的消息隊列軟件。
  • Londiste:用C語言實現(xiàn)的在PostgreSQL數(shù)據(jù)庫之間進行邏輯同步的軟件。

全球最大的CRM軟件服務提供商Salesforce也開始使用PostgreSQL,并招募了PostgreSQL內(nèi)核開發(fā)者Tom lane。

著名的圖片分享網(wǎng)站instagram也大量使用了PostgreSQL。

2012年,美國聯(lián)邦機構(gòu)全面轉(zhuǎn)向PostgreSQL陣營;法國也正積極推動政府機構(gòu)采用PostgreSQL數(shù)據(jù)庫來取代商業(yè)數(shù)據(jù)庫。

在國內(nèi),越來越多的公司開始使用PostgreSQL,如斯凱網(wǎng)絡的后臺數(shù)據(jù)庫使用的基本都是PostgreSQL數(shù)據(jù)庫,去哪兒網(wǎng)(qunar.com)和平安科技也大量地使用了PostgreSQL數(shù)據(jù)庫。

主流的云服務提供商如亞馬遜、阿里云、騰訊云、華為云也都提供了PostgreSQL的云數(shù)據(jù)庫服務。

更多關(guān)于PostgreSQL數(shù)據(jù)庫的現(xiàn)狀信息可見PostgreSQL官方網(wǎng)站:

http://www.postgresql.org/

四、PostgreSQL數(shù)據(jù)庫與其他數(shù)據(jù)庫的對比

本節(jié)主要介紹PostgreSQL數(shù)據(jù)庫與主流數(shù)據(jù)庫MySQL和Oracle的相同點和區(qū)別。

1. PostgreSQL與MySQL數(shù)據(jù)庫的對比

可能有人會問,既然已經(jīng)有一個人氣很高的開源數(shù)據(jù)庫MySQL了,為什么還要使用PostgreSQL?這主要是因為不同的數(shù)據(jù)庫有不同的特點,應該為合適場景選擇合適的數(shù)據(jù)庫。在一些應用場景中,使用MySQL有以下幾大缺點。

(1) 復雜SQL支持弱

在MySQL 8.0之前,多表連接查詢的方式只支持“Nest Loop”,不支持Hash JOIN和Sort Merge JOIN(注:MySQL8.0版本開始支持Hash JOIN,但不完善,有一些問題。

另因為MySQL無完善的基于COST的優(yōu)化器(CBO),長期來說也會存在一定的問題),不僅如此,它對很多SQL語法都不支持,子查詢性能比較低。例如,MySQL不支持單獨的sequence,有公司為此還專門開發(fā)了統(tǒng)一序號分發(fā)中心的軟件。

(2) 性能優(yōu)化工具與度量信息不足

如果MySQL在運行過程中出現(xiàn)問題,性能監(jiān)控數(shù)據(jù)較少,維護人員要準確定位問題存在一定的困難。

MySQL的復制是異步或半同步的邏輯同步,這存在兩個問題:

  • 一是在大事務下會導致比較大的延遲;
  • 二是容易導致數(shù)據(jù)庫的不一致,原因是邏輯復制容易導致數(shù)據(jù)的不一致性,而MySQL的雙層日志會讓這個問題變得更復雜,即主備庫的復制是通過邏輯層的binlog來實現(xiàn)的,但在存儲引擎InnoDB下還有物理的Redo Log層,整個過程比較復雜,比較難保證主備庫之間完全一致。

由于有兩層日志(binlog日志和InnoDB的Redo日志),因此也很難做到Master/Slave在異常切換過程中的零數(shù)據(jù)丟失。一些第三方公司改造MySQL源代碼以實現(xiàn)同步復制,但這些方案要么是沒有開源,要么是已開源卻又不是很穩(wěn)定,所以,對于普通用戶來說,如何實現(xiàn)零數(shù)據(jù)庫丟失的同步復制是一個令人頭疼的問題。

(3) 在線操作功能較弱

很多在線DDL需要重建表,代價很大,有一些操作還會鎖表。一些大的互聯(lián)網(wǎng)公司或者修改MySQL源碼來實現(xiàn)在線DDL功能,或者通過上層架構(gòu)來解決這個問題,如先在Slave數(shù)據(jù)庫上把DDL做完,然后把應用從Master庫切換到Slave庫,再到原先的Master上把DDL做完。

對于第一種方法,需要公司有很強的MySQL研發(fā)能力,第二種方法則需要公司有較強的開發(fā)能力,能設計出較強的應用架構(gòu)。這對于一些中小型公司來說不太容易實現(xiàn)。

(4) 難以寫插件來擴展MySQL的功能

雖然用UDF,或通過外部動態(tài)庫中的函數(shù)來擴展部分功能,但能擴展的功能很有限。如MySQL比較難訪問其他數(shù)據(jù)庫中的數(shù)據(jù)。

相對MySQL的這些弱點,PostgreSQL有以下幾個優(yōu)點。

  • 功能強大

支持所有主流的多表連接查詢的方式,如“Nest loop”“Hash JOIN”“Sort Merge JOIN”等;支持絕大多數(shù)的SQL語法,如CTE(MySQL8.0之前不支持CTE)。

PostgreSQL是筆者見過的對正則表達式支持最強、內(nèi)置函數(shù)也是最豐富的數(shù)據(jù)庫。它的字段類型還支持數(shù)組類型。除了可以使用PL/PGSQL寫存儲過程外,還可以使用各種主流開發(fā)語言的語法(如Python語言的PL/Python、Perl語言的PL/Perl來寫存儲過程)。

這些強大的功能可以大大地節(jié)約開發(fā)資源。很多開發(fā)人員在PostgreSQL上做開發(fā)時,會發(fā)現(xiàn)數(shù)據(jù)庫已實現(xiàn)很多功能,甚至有一些業(yè)務功能都不再需要寫代碼來實現(xiàn)了,直接使用數(shù)據(jù)庫的功能即可解決問題。

  • 性能優(yōu)化工具與度量信息豐富

PostgreSQL數(shù)據(jù)庫中有大量的性能視圖,可以方便地定位問題(比如可以看到正在執(zhí)行的SQL,可以通過鎖視圖看到誰在等待,以及哪條記錄被鎖定等)。PostgreSQL中設計了專門架構(gòu)和進程用于收集性能數(shù)據(jù),既有物理I/O方面的統(tǒng)計,也有表掃描及索引掃描方面的性能數(shù)據(jù)。

  • 在線操作功能好

PostgreSQL增加空值列時,本質(zhì)上只是在系統(tǒng)表上把列定義上,無須對物理結(jié)構(gòu)做更新,這就讓PostgreSQL在加列時可以做到瞬間完成。PostgreSQL還支持在線建索引的功能,在創(chuàng)建索引的過程可以不鎖更新操作。

從PostgreSQL9.1開始,支持同步復制(synchronous replication)功能,通過Master和Slave之間的復制可以實現(xiàn)零數(shù)據(jù)丟失的高可用方案。

  • 可以方便地寫插件來擴展PostgreSQL數(shù)據(jù)庫的功能

PostgreSQL提供了安裝、編寫插件的整體框架,如提供了create extension等SQL語句以方便地裝載插件;寫一個動態(tài)庫可以很方便地給PostgreSQL添加函數(shù);提供了外部數(shù)據(jù)源(FDW)的框架和編程接口,根據(jù)此框架和編程接口可以方便地編寫訪問其他數(shù)據(jù)庫和外部數(shù)據(jù)源的插件。

現(xiàn)在針對已有的常見外部數(shù)據(jù)源,如Oracle、MySQL、SQL Server等數(shù)據(jù)庫都有了第三方插件,通過這些第三方插件可以在PostgreSQL數(shù)據(jù)庫中方便地訪問外部數(shù)據(jù)。另外,PostgreSQL還提供了鉤子函數(shù)的接口,可以實現(xiàn)更強大功能的插件,如pg_pathman分區(qū)表的插件、citus分庫分表的插件等。

另外,由于MySQL對SQL語法支持的功能較弱,基本上不適合做數(shù)據(jù)倉庫。雖然也有些廠商開發(fā)了MySQL數(shù)據(jù)倉庫的存儲引擎(如Infobright),但這個方案只是解決了部分數(shù)據(jù)倉庫的問題,SQL功能弱的問題還是無法完全解決。

而且Infobright的社區(qū)版本在功能上有很多限制,如不支持數(shù)據(jù)更新、不支持太多的并發(fā)執(zhí)行(最多支持十幾個)等。而PostgreSQL不僅支持復雜的SQL,還支持大量的分析函數(shù),非常適合做數(shù)據(jù)倉庫。

PostgreSQL數(shù)據(jù)庫中還有一些支持移動互聯(lián)網(wǎng)的新功能,如空間索引。PostGIS是最著名的一個開源GIS系統(tǒng),它是PostgreSQL中的一個插件,在PostgreSQL中使用它很方便。通過PostGIS也可以很方便地解決LBS中的一些位置計算問題。

綜上所述,PostgreSQL數(shù)據(jù)庫是一個功能強大,又帶有移動互聯(lián)網(wǎng)特征的開源數(shù)據(jù)庫。

如果你僅僅是想把數(shù)據(jù)庫作為一個簡單的存儲軟件(一些大的互聯(lián)網(wǎng)公司就是這樣),一些較復雜的功能都想放在應用中來實現(xiàn),那么選擇MySQL或一些NoSQL產(chǎn)品都是合適的。如果你應用的數(shù)據(jù)訪問很簡單(如大多數(shù)的博客系統(tǒng)),那么后端使用MySQL也是很合適的。

但是如果你的應用不像博客系統(tǒng)那么簡單,又不想消耗太多的開發(fā)資源,那么PostgreSQL是一個很明智的選擇。最有說服力的例子就是圖片分享公司instagram,在使用“Python+PostgreSQL”架構(gòu)后,只是十幾個人就支撐了整個公司的業(yè)務。

在數(shù)據(jù)庫中使用PostgreSQL的感覺就像在開發(fā)語言中使用Python,會讓你的工作變得簡潔和高效。

2. PostgreSQL與Oracle數(shù)據(jù)庫的對比

從功能上說,PostgreSQL可以與Oracle數(shù)據(jù)庫媲美。Oracle數(shù)據(jù)庫是目前功能最強大的商業(yè)數(shù)據(jù)庫,PostgreSQL則是功能最強大的開源數(shù)據(jù)庫。Oracle在集群功能如RAC、ASM方面比較強,但PostgtreSQL也有一些比Oracle強的特性,如在索引和可擴展等方面。

PostgreSQL與Oracle有很多相似之處,它們都是使用共享內(nèi)存的進程結(jié)構(gòu),客戶端與數(shù)據(jù)庫服務器建立一個連接后,數(shù)據(jù)庫服務器就啟動一個進程來為這個連接服務。這與MySQL的線程模型不一樣。

PostgreSQL與Oracle一樣,PostgreSQL的WAL日志與Oracle的Redo日志都是用于記錄物理塊數(shù)據(jù)的變化的,這與MySQL的binlog是不一樣的。

PostgreSQL在主備庫方面非常完善,可以搭建同步備庫、異步備庫、延遲備庫,在同步備庫中可以配置數(shù)據(jù)同步到任意個備庫上。只讀備庫在查詢與應用日志的沖突解決方面提供了更多的參數(shù)控制,讓DBA更容易控制只讀備庫的查詢沖突。在配置備庫的過程中,PostgreSQL比Oracle簡單很多,備庫的搭建也更靈活。

PostgreSQL與Oracle的不同之處在于,PostgreSQL有更多支持互聯(lián)網(wǎng)特征的功能。如PostgreSQL數(shù)據(jù)類型支持網(wǎng)絡地址類型、XML類型、JSON類型、UUID類型以及數(shù)組類型,且有強大的正則表達式函數(shù),如where條件中可以使用正則表達式匹配,也可以使用Python、Perl等語言寫存儲過程等。

另外,PostgreSQL更小巧。PostgreSQL可以在內(nèi)存很小的機器上完美運行起來,如在512MB的云主機中,而Oracle數(shù)據(jù)庫基本要在數(shù)GB的云主機中才可以運行起來。

Oracle安裝包動輒幾個GB以上級別,而PostgreSQL的安裝包只有幾十MB大小。PostgreSQL在任何一個環(huán)境都可以輕松地安裝。Oracle數(shù)據(jù)庫安裝花費的時間是在小時級別,而PostgreSQL在分鐘級別就可以完成安裝。

 

責任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2012-09-13 14:11:07

Windows Ser微軟云平臺

2021-02-26 07:17:47

MySQLMariaDB

2017-06-13 22:54:03

筆記本機械鍵盤鍵盤

2019-11-18 15:56:16

固態(tài)硬盤機械硬盤

2021-12-15 06:58:28

RedisEhCache緩存

2015-01-08 14:52:29

google云計算分布式計算框架

2020-06-28 07:49:06

WiFi 6WiFi 5網(wǎng)絡技術(shù)

2012-09-20 09:07:45

英特爾Xeon E5Xeon 5600

2022-03-26 21:34:54

邊緣計算云計算物聯(lián)網(wǎng)

2022-03-27 23:50:46

云計算邊緣計算技術(shù)

2022-07-01 06:03:08

WiFi 7WiFi 6

2011-07-22 09:33:15

OracleMySQLPostgreSQL

2019-05-22 10:38:00

5G芯片中興

2020-09-05 15:30:06

Windows 95Windows 10微軟

2025-04-09 11:30:00

Flask開發(fā)Python

2025-02-28 00:03:00

2009-04-14 19:15:16

四核服務器AMD

2017-02-13 11:30:56

5G4GMWC

2022-06-20 05:25:54

裂腦Oracle RAC數(shù)據(jù)庫

2019-05-20 14:20:32

PostgreSQL數(shù)據(jù)庫
點贊
收藏

51CTO技術(shù)棧公眾號