PostgreSQL 憑什么連續(xù)兩年超越 MySQL,成為最受歡迎數(shù)據(jù)庫
在StackOverflow 上看到2024年技術(shù)趨勢,關(guān)于數(shù)據(jù)庫的部分,PostgreSQL 是開發(fā)人員使用最多的數(shù)據(jù)庫,超過 MySQL 了。雖然在國內(nèi)好像不是這樣。
圖片
PostgreSQL 在 2018 年的開發(fā)者調(diào)查中首次亮相,當(dāng)時有 33% 的開發(fā)者正在使用它。而當(dāng)年最受歡迎的還是 MySQL,有 59% 的開發(fā)者在使用。而六年后的今天,49% 的開發(fā)人員使用 PostgreSQL,連續(xù)第二年成為最受歡迎的數(shù)據(jù)庫。
PostgreSQL 是什么
PostgreSQL 的歷史可以追溯到加利福尼亞大學(xué)伯克利分校的 Ingres 項目。1985年,開始了以 post-Ingres 計劃為原型進(jìn)行研發(fā),也就是 Postgres 的最初是版本。
圖片
其目的是通過增加最少的功能來完全支持所需要的類型。
這些功能包括類型定義和完整描述數(shù)據(jù)關(guān)系的能力。完整描述數(shù)據(jù)關(guān)系的能力之前雖廣為使用但卻需要由用戶來維護(hù)。Postgres的數(shù)據(jù)庫能夠"理解"關(guān)系,并可以使用一定的規(guī)則以自然方式在相關(guān)的表中檢索信息。
直到 1994年,Postgres95 增加了 SQL 語言解釋器,后在1996年更名為 PostgreSQL。
PostgreSQL 和 MySQL 一樣,也是完全開源的,也是一個關(guān)系型數(shù)據(jù)庫。
作為一個優(yōu)秀的關(guān)系型數(shù)據(jù)庫,PostgreSQL 支持這么多特性,怪不得現(xiàn)在使用的人這么多。
- 支持自定義數(shù)據(jù)類型和繼承,允許用戶定義新的類型和基于現(xiàn)有類型的子類型。
- 支持多種編程語言編寫的函數(shù),包括 PL/pgSQL、PL/Perl、PL/Python 等。
- 提供了自定義索引方法,包括 B樹、哈希表和 GiST 索引。
- 支持多版本并發(fā)控制(MVCC),減少了讀取鎖的依賴,提高了并發(fā)性能。
- 支持規(guī)則(RULE),允許查詢重寫,常用于視圖操作。
- 內(nèi)置豐富的數(shù)據(jù)類型,如任意精度數(shù)值、無限制長度文本、幾何圖元、IP地址、數(shù)組、JSON數(shù)據(jù)、枚舉類型和 XML 數(shù)據(jù)。
- 支持用戶定義對象,如索引、操作符、聚合函數(shù)、數(shù)據(jù)域、數(shù)據(jù)類型轉(zhuǎn)換和會話。
- 支持繼承,允許數(shù)據(jù)表結(jié)構(gòu)和屬性從一個“父”表繼承。
- 支持關(guān)系完整性約束、視圖、內(nèi)外部連接、子查詢、事務(wù)處理等。
- 支持 SSL 加密連接、二進(jìn)制/文本大對象存儲、在線備份、數(shù)據(jù)域、表分區(qū)、表空間、保存點(diǎn)、時刻點(diǎn)恢復(fù)、二階段提交等。
- 支持 TOAST 技術(shù),用于存儲超大屬性。
看上去是完全覆蓋 MySQL 的功能的,就比如 PostgreSQL 是直接支持?jǐn)?shù)組類型的,而 MySQL 中你就要轉(zhuǎn)一下。
PostgreSQL和MySQL的區(qū)別
這兩個數(shù)據(jù)庫接的頭兩把交椅之間有什么區(qū)別呢?
數(shù)據(jù)一致性和事務(wù)處理
PostgreSQL 和MySQL 都實現(xiàn)了完整的ACID特性(原子性、一致性、隔離性、持久性),并且采用了多版本并發(fā)控制(MVCC)來管理事務(wù)。
MySQL的默認(rèn)存儲引擎MyISAM曾經(jīng)不支持事務(wù),但是現(xiàn)在InnoDB已經(jīng)成為MySQL的默認(rèn)引擎,并且支持事務(wù)了。
但是其在處理復(fù)雜事務(wù)時的性能和一致性仍然不如PostgreSQL穩(wěn)健。
擴(kuò)展性和靈活性
PostgreSQL 擴(kuò)展性和靈活性是非常強(qiáng)大的。 開發(fā)者可以使用PostgreSQL自定義數(shù)據(jù)類型、操作符、索引方法,甚至編寫存儲過程和觸發(fā)器來擴(kuò)展數(shù)據(jù)庫的功能。
而MySQL雖然也支持一些擴(kuò)展功能,但相比之下,它的靈活性較為有限。MySQL的設(shè)計更注重易用性和性能優(yōu)化,但這也使得它在處理復(fù)雜數(shù)據(jù)類型和自定義需求時顯得有些捉襟見肘。
性能方面
在性能上,MySQL的優(yōu)勢在于其讀寫性能,尤其是在處理大量簡單查詢時,MySQL的速度非??臁_@使得MySQL成為了許多Web應(yīng)用的首選,尤其是那些以讀取為主的應(yīng)用。
而PostgreSQL則在處理復(fù)雜查詢和大數(shù)據(jù)集時表現(xiàn)優(yōu)異。PostgreSQL的查詢優(yōu)化器非常強(qiáng)大,它能夠?qū)?fù)雜的SQL查詢進(jìn)行優(yōu)化,確保在高負(fù)載下依然保持出色的性能。對于那些需要執(zhí)行大量數(shù)據(jù)分析、數(shù)據(jù)聚合的應(yīng)用來說,PostgreSQL無疑是更好的選擇。
數(shù)據(jù)庫引擎和存儲
MySQL最大的特點(diǎn)之一是它支持多種存儲引擎,如InnoDB、MyISAM。開發(fā)者可以根據(jù)需求選擇最適合的引擎,例如InnoDB提供了事務(wù)支持和外鍵約束,而MyISAM則在讀取性能上更具優(yōu)勢。
而PostgreSQL采用統(tǒng)一的存儲架構(gòu),所有數(shù)據(jù)都存儲在一個共享的存儲引擎中。這種設(shè)計保證了數(shù)據(jù)的一致性和完整性,同時也簡化了開發(fā)和運(yùn)維的工作。雖然沒有MySQL那樣多樣的選擇,但PostgreSQL憑借其強(qiáng)大的功能和靈活性,依然能夠滿足大多數(shù)應(yīng)用場景的需求。
PostgreSQL 更受歡迎的原因
看過上面,好像也沒有看出PostgreSQL 比 MySQL 強(qiáng)在哪里啊,那為什么卻超越了MySQL,成為最受歡迎的數(shù)據(jù)庫了呢?
原因是以下幾個方面:
數(shù)據(jù)完整性和可靠性
PostgreSQL在數(shù)據(jù)完整性和可靠性方面的優(yōu)勢是它獲得青睞的重要原因之一。
PostgreSQL的設(shè)計理念一直是優(yōu)先考慮數(shù)據(jù)的準(zhǔn)確性和完整性,而不是犧牲這些特性來換取性能。這一點(diǎn)對于那些需要高數(shù)據(jù)一致性的應(yīng)用來說至關(guān)重要,比如金融行業(yè)、政府機(jī)構(gòu)和醫(yī)療領(lǐng)域。
強(qiáng)大的查詢能力
在處理復(fù)雜查詢時,PostgreSQL的表現(xiàn)遠(yuǎn)超MySQL。
其優(yōu)化器可以處理非常復(fù)雜的SQL查詢,包括子查詢、聯(lián)接和窗口函數(shù)等。PostgreSQL還支持豐富的索引類型,如B樹、哈希、GiST、GIN、BRIN等,這使得它在大數(shù)據(jù)集上的查詢性能非常出色。
對于需要進(jìn)行復(fù)雜數(shù)據(jù)分析和實時決策支持的企業(yè)來說,PostgreSQL是一個理想的選擇。
擴(kuò)展性和自定義能力
PostgreSQL的擴(kuò)展能力是它能夠脫穎而出的另一個關(guān)鍵因素。開發(fā)者可以根據(jù)業(yè)務(wù)需求,對PostgreSQL進(jìn)行深度定制,添加自定義的數(shù)據(jù)類型、函數(shù)、操作符,甚至是索引方式。
這種靈活性使得PostgreSQL能夠適應(yīng)各種復(fù)雜的業(yè)務(wù)場景,從而贏得了眾多企業(yè)的青睞。
舉個例子,許多使用地理信息系統(tǒng)(GIS)的公司都選擇PostgreSQL,因為它可以通過PostGIS擴(kuò)展,提供強(qiáng)大的空間數(shù)據(jù)處理能力。
類似地,許多大數(shù)據(jù)處理和分析系統(tǒng)也選擇了PostgreSQL,因為它可以通過自定義擴(kuò)展來優(yōu)化查詢和數(shù)據(jù)處理流程。
高標(biāo)準(zhǔn)的SQL兼容性
PostgreSQL一直以來都以嚴(yán)格遵循SQL標(biāo)準(zhǔn)而著稱,這使得它在需要與其他數(shù)據(jù)庫系統(tǒng)兼容或遷移數(shù)據(jù)時非常方便。MySQL雖然在功能上也在不斷追趕,但在SQL標(biāo)準(zhǔn)的兼容性上,PostgreSQL依然保持領(lǐng)先。
此外,PostgreSQL還支持豐富的數(shù)據(jù)類型,包括數(shù)組、JSON、XML等,甚至可以存儲和查詢地理空間數(shù)據(jù)。對于那些需要處理非結(jié)構(gòu)化數(shù)據(jù)或復(fù)雜數(shù)據(jù)類型的應(yīng)用來說,PostgreSQL無疑提供了更多的選擇和更大的靈活性。
云原生和大數(shù)據(jù)支持
隨著云計算和大數(shù)據(jù)技術(shù)的快速發(fā)展,PostgreSQL的高擴(kuò)展性和分布式處理能力使其在云原生應(yīng)用中表現(xiàn)出色。許多云服務(wù)提供商,如AWS、Google Cloud和Azure,都提供了托管的PostgreSQL服務(wù),這讓開發(fā)者可以輕松地將PostgreSQL集成到他們的云應(yīng)用中。
此外,PostgreSQL還支持分布式數(shù)據(jù)庫和并行查詢,這使得它在處理大規(guī)模數(shù)據(jù)集和高并發(fā)場景時,依然能夠保持良好的性能和穩(wěn)定性。這一點(diǎn)對于那些需要處理海量數(shù)據(jù)的互聯(lián)網(wǎng)公司來說尤為重要。
但是國內(nèi)云平臺還是應(yīng)用 MySQL 的更多一些。
開源精神和社區(qū)支持
PostgreSQL的開源精神和強(qiáng)大的社區(qū)支持也是它獲得廣泛認(rèn)可的重要原因。與某些開源項目不同,PostgreSQL始終堅持完全開源,沒有分割成商業(yè)版本和開源版本。這種透明和開放的開發(fā)模式吸引了全球無數(shù)的開發(fā)者和企業(yè)用戶參與到PostgreSQL的社區(qū)中來。
PostgreSQL社區(qū)非?;钴S,經(jīng)常發(fā)布新的版本和功能,不斷提升數(shù)據(jù)庫的性能和穩(wěn)定性。同時,社區(qū)中也有大量的教程、文檔和工具可以幫助開發(fā)者更快地上手和使用PostgreSQL。