為什么PostgreSQL是最成功的數據庫?
瀏覽量: 次 發布日期:2023-09-06 10:08:18
為什么PostgreSQL是最成功的數據庫?
當我們說一個數據庫"成功"時,到底在說什么?是指功能性能易用性,還是成本生態復雜度?評價指標有很多,但這件事最終還得由用戶來定奪。
數據庫的用戶是開發者,而開發者的意愿、喜好、選擇又怎么說 ?StackOverflow 連續六年向來自180個國家的七萬多開發者問了這三個問題。
縱覽這六年數據,不難看出在2022年,PostgreSQL 已經同時在這三項上登頂奪冠,成了字面意義上 “最成功的數據庫”
PG 成為 專業開發者最常使用的數據庫!(Used)
PG 成為 開發者最為喜愛的數據庫!(Loved)
PG 成為開發者最想要用的數據庫!(Wanted)
?
流行度反映當年的勢能,需求度預示來年的動能,喜愛度代表長期的潛能,時與勢都站在 PostgreSQL 一側。
問為什么前先說是不是,讓我們來看一看具體的調研結果。
PostgreSQL —— 專業開發者中最流行的數據庫!
第一項調研,研究開發者目前使用什么數據庫,即,流行度。
過去幾年,MySQL 一直霸占著數據庫流行榜的榜首,很符合其 ”世界上最流行的開源關系型數據庫“ 這一口號。不過這次,”最流行“的桂冠恐怕要讓給 PostgreSQL 了。
在專業開發者中,PostgreSQL 以 46.5% 的使用率第一次超過 MySQL 位居第一,而 MySQL 以 45.7% 的使用率降至第二名。同為泛用性最好的開源關系型數據庫,排名第一第二的 PGSQL 與 MySQL ,與其他的數據庫遠遠拉開了距離。
TOP 9 數據庫流行度演變(2017-2022)
PGSQL 與 MySQL 的流行度差別并不大。值得一提的是,在見習開發者群體中,MySQL 仍然占據顯著的使用率優勢(58.4%),如果算上這些新手初學者,MySQL 仍然保有 3.3% 的微弱流行度領先優勢。
但從下圖中不難看出,PostgreSQL 有顯著的增長動能,而其他數據庫,特別是 MySQL、 sql server、Oracle 的使用率則在最近幾年持續衰退。隨著時間的推移,PostgreSQL 的領先優勢將進一步拉大。
四大關系型數據庫流行度對比
流行度反映的是當下數據庫的規模勢能,而喜愛度反映的是未來數據庫的增長潛能。
PostgreSQL —— 開發者最為喜愛的數據庫!
第二個問題是關于開發者喜愛什么數據庫,討厭什么數據庫。在此項調研中,PostgreSQL 與 Redis 一騎絕塵,以 70%+ 的喜愛率高居榜首,顯著甩開其他數據庫。
在過去幾年,Redis 一直是用戶最喜歡的數據庫。在 2022 年,形勢發生了變化,PostgreSQL 第一次超過 Redis,成為最受開發者喜愛的數據庫。
Redis是簡單易用的數據結構緩存服務器,經常會與關系型數據庫搭配使用,廣受開發者喜愛。不過這次看起來,開發者還是更偏愛功能更豐富的 PostgreSQL 多一丟丟。
相比之下 MySQL 與 Oracle 的表現就比較拉胯了。喜歡和討厭 MySQL 的人基本各占一半;而只有35% 的用戶喜歡 Oracle ,這也意味著近 2/3 的開發者反感 Oracle 。
TOP 9 數據庫喜愛度演變(2017-2022)
從邏輯上講,用戶的喜愛將導致軟件的流行,用戶的厭惡將導致軟件過氣。我們可以參照 凈推薦指數(NPS,又稱口碑,推薦者% - 貶損者%)的構造方式, 設計一個 凈喜愛指數 NLS:即 喜愛人群% - 厭惡人群%, 而數據庫流行度的導數應當與 NLS 呈現正相關性 。
數據很好地印證了這一點:PG 有著全場最高的 NLS:44% ,對應著最高的流行度增長率 每年 460 個基點。MySQL 的口碑剛好落在褒貶線上方 (2.3%),流行度平均增速為 36 個基點;而 Oracle 的口碑則為負的 29%,對應平均每年44個基點的使用率負增長。當然在這份榜單上, Oracle 只是倒數第三慘的,最不受人待見的是 IBM DB2 :1/4的人喜歡,3/4的人討厭,NLS = -48% ,對應 46 個基點的年平均衰退。
當然,并不是所有潛能,都可以轉換為實打實的動能。用戶的喜愛并不一定會付諸行動,而這就是第三項調研所要回答的問題。
PostgreSQL —— 開發者最想使用的數據庫!
“在過去的一年中,你在哪些數據庫環境中進行了大量開發工作?在未來一年,你想在哪些數據庫環境中工作?”
對于這個問題前半段的回答,引出了”最流行“數據庫的調研結果;而后半段,則給出了”最想要“這個問題的答案。如果說用戶的喜愛代表的是未來增長的潛能,那么用戶的需求就代表了下一年實打實的增長動能。
在今年的調研中, PostgreSQL 毫不客氣地擠開 MongoDB ,占據了開發者最想使用數據庫的寶座。高達 19% 的受訪者表示,下一年中想要使用 PostgreSQL 環境進行開發。緊隨其后的是 MongoDB (17%) 與 Redis (14%),這三種數據庫的需求程度與其他數據庫顯著拉開了一個臺階。
此前, MongoDB 一直占據”最想要“數據庫榜首,但最近開始出現過氣乏力的態勢。有多因素,例如,MongoDB 本身也受到了 PG 的沖擊。PostgreSQL 本身就包含了完整的 JSON 特性,可直接用作文檔數據庫,更有類似 FerretDB (原名 MangoDB)的項目可以直接在 PG 上對外提供 MongoDB 的 API。
MongoDB 與 Redis 都是 NoSQL 運動的主力軍,而 Redis 的需求也在不斷增長。PostgreSQL 與 Redis,分別作為 SQL 與 NoSQL 的領軍者,保持著旺盛的需求與高速的增長,前途無量。
PostgreSQL 在需求率, 使用率,喜愛率上都拔得頭籌,天時地利人和齊備,動能勢能潛能都有,足以稱得上是最成功的數據庫。
但我們想知道的是,為什么 PostgreSQL 會如此成功 ?
其實,秘密就藏在它的 Slogan 里:”世界上最先進的開源關系型數據庫“
關系型數據庫是如此的普及與重要,也許其他的數據庫品類如鍵值,文檔,搜索引擎,時序,圖,向量加起來也比不上它的一個零頭。以至于當大家談起數據庫時,如果沒有特殊說明,默認隱指的就是”關系型數據庫“。在它面前,沒有其他數據庫品類敢稱自己為”主流“。
以 DB-Engine 為例,DB-Engine的排名標準包括搜索系統名稱時的搜索引擎結果數,Google趨勢,Stack Overflow討論,Indeed 提及系統的工作機會,LinkedIn等專業網絡中的個人資料數,Twitter等社交網絡中的提及數等,可理解為數據庫的“綜合熱度”。
數據庫熱度趨勢:db-engines.com/en/ranking_trend
在 DB-Engine 的熱度趨勢圖中我們可以看到一條鴻溝,前四名全都是 關系型數據庫 ,加上排名第五的 MongoDB,與其他數據庫在熱度上拉開了 數量級上的差距。
我們只需要把關注點聚焦到這四種核心的關系型數據庫 Oracle,MySQL,SQL Server,PostgreSQL 上即可。
關系型數據庫的生態位高度重疊,其關系可以視作零和博弈。拋開微軟生態關門自嗨相對獨立的商業數據庫 SQL Server 不提。關系型數據庫世界里上演的是一場三國演義。
Oracle 有才無德,MySQL 才淺德薄,PGSQL 德才兼備
Oracle 是老牌商業數據庫,有著深厚的歷史技術積淀,功能豐富,支持完善。穩坐數據庫頭把交椅,廣受不差錢且需要背鍋俠的企業喜愛。但其費用高昂,且以訟棍行徑成為知名的業界毒瘤。Microsoft SQL Server 性質與Oracle類似,都屬于商業數據庫。商業數據庫整體受開源數據庫沖擊,處于緩慢衰退的狀態。
MySQL 流行度位居第二,但樹大招風,處于前狼后虎,上有野爹下有逆子的不利境地:在嚴謹的事務處理和數據分析上,MySQL 被同為開源生態位的 PostgreSQL 甩開幾條街;而在糙猛快的敏捷方法論上,MySQL 又不如新興 NoSQL 好用;同時 MySQL 上有養父 Oracle 壓制,中有兄弟 MariaDB 分家,下有諸如逆子 TiDB 等協議兼容 NewSQL 分羹,因此也在走下坡路。
作為老牌商業數據庫,Oracle 的才毋庸質疑,但其作為業界毒瘤,“德” ,亦不必多說,故曰:“有才無德”。
MySQL 雖有開源之功德,奈何認賊作父;且才疏學淺,功能簡陋,只能干干CRUD,故曰“才淺德薄”。
唯有 PostgreSQL,德才兼備,既占據了開源崛起之天時,又把握住功能先進之地利,還有著寬松BSD協議之人和。
正所謂:君子藏器于身,因時而動。不鳴則已,一鳴驚人!
單口開源:PostgreSQL已經甩開MySQL了
PostgreSQL 成功的秘訣就是兩個詞: 先進 與 開源!
開源之德
PG的“德”在于開源。祖師爺級的開源項目,全世界開發者群策群力的偉大成果。協議友善BSD,生態繁榮擴展多。開枝散葉,子孫滿堂,Oracle替代扛旗者
什么叫“德”,合乎于“道”的表現就是德。而這條“道”就是開源。PostgreSQL是歷史悠久的祖師爺級開源項目,更是全世界開發者群策群力的典范成果。
很久很久以前,開發軟件/信息服務需要使用非常昂貴的商業數據庫軟件。單花在軟件授權上的費用可能就有六七位數,加之相近的硬件成本與服務訂閱成本。Oracle一個 CPU 核一年的軟件授權費用便高達十幾萬,壕如阿里也吃不消要“去IOE”。以 PostgreSQL / MySQL 為代表的的開源數據庫崛起,讓用戶多了一個新的選擇。
“不要錢” 的開源數據庫可以讓我們自由隨意地使用數據庫軟件,而這一點引發了行業變革:從一萬¥/ 核·月的商業數據庫,到20塊錢/核·月的純硬件成本。數據庫走入了尋常企業中,讓免費提供信息服務成為可能。
開源是有大功德的。互聯網的歷史就是開源軟件的歷史,IT行業之所以有今天的繁榮,人們能享受到如此多的免費信息服務,核心原因之一就是開源軟件。開源是一種真正成功的,以軟件自由為目的,由開發者構成的 Communism(社區主義):軟件這種IT業的核心生產資料變為全世界開發者公有,按需分配。開發者各盡所能,人人為我,我為人人。
一個開源程序員工作時,其勞動背后可能蘊含的是數以萬計頂尖開發者的智慧結晶。程序員薪資高從原理上來說是因為,開發者本質上不是一個簡單的工人,而是一個指揮軟件和硬件干活的包工頭。程序員自己就是核心生產資料;軟件來自公有社區;服務器硬件更是唾手可得;因此一個或幾個高級的軟件工程師,就可以很輕松地利用開源生態快速解決領域問題。
通過開源,所有社區開發者形成合力,極大降低了重復造輪子的內耗。使得整個行業的技術水平以匪夷所思的速度向前邁進。開源的勢頭就像滾雪球,時至今日已經勢不可擋。基本上除了一些特殊場景和路徑依賴,軟件開發中閉門造車搞自力更生幾乎成了一個大笑話。
越是底層基礎的軟件,開源便越占優勢。
開源,也是 PostgreSQL 對陣 Oracle 的最大底氣所在。
Oracle 先進,但 PostgreSQL 也不差。PostgreSQL 是 Oracle 兼容性最好的開源數據庫,原生即支持 Oracle 85% 的功能,更有 96% 功能兼容的專業發行版。但更重要的是,Oracle 價格高昂,而 PG 開源免費。壓倒性的成本優勢讓 PG 擁有了巨大的生態位基礎:它不一定要在功能先進性上超過 Oracle 才能成功 ,廉價9成正確 已經足以干翻 Oracle 。
PostgreSQL 可以視作一個開源版的“Oracle”,是唯一能真正威脅到 Oracle 的數據庫。作為 ”去O“ 抗旗者,PG 可謂子孫滿堂, 36% 的 “國產數據庫” 更是直接基于PG “開發”,養活了一大批 自主可控 的 數據庫公司,可謂功德無量。重要的是,PostgreSQL 社區并不反對這樣的行為,BSD 協議允許這樣做。這樣開放的胸襟,是被Oracle收購的,使用GPL協議的MySQL所難以比擬的。
PG的“才”在于先進。一專多長的全棧數據庫,一個打十個,天生就是 HTAP。時空地理分布式,時序文檔超融合,單一組件即可覆蓋幾乎所有數據庫需求。
PG的“才”在于一專多長。PostgreSQL是一專多長的全棧數據庫,天生就是HTAP,超融合數據庫,一個打十個。基本單一組件便足以覆蓋中小型企業絕大多數的數據庫需求:OLTP,OLAP,時序數據庫,空間GIS,全文檢索,JSON/XML,圖數據庫,緩存,等等等等。
PostgreSQL 是各種關系型數據庫中性價比最高的選擇:它不僅可以用來做傳統的 CRUD OLTP 業務,數據分析更是它的拿手好戲。各種特色功能更是提供了切入多種行業以的契機:基于 PostGIS 的地理時空數據處理分析,基于 TimescaleDB 的時序金融物聯網數據處理分析,基于存儲過程觸發器的流式處理,基于倒排索引全文檢索的搜索引擎,FDW 對接統一各式各樣的外部數據源。可以說,PG是真正一專多長的全棧數據庫,它可以實現的比單純 OLTP 數據庫要豐富得多的功能。
在一個很可觀的規模內,PostgreSQL 都可以獨立扮演多面手的角色,一個組件當多種組件使。而單一數據組件選型可以極大地削減項目額外復雜度,這意味著能節省很多成本。它讓十個人才能搞定的事,變成一個人就能搞定的事。 不是說PG要一個打十個把其他數據庫的飯碗都掀翻:專業組件在專業領域的實力是毋庸置疑的。但切莫忘記,為了不需要的規模而設計是白費功夫,這屬于過早優化的一種形式。如果真有那么一樣技術可以滿足你所有的需求,那么使用該技術就是最佳選擇,而不是試圖用多個組件來重新實現它。
以探探為例,在 250w TPS 與 200 TB 數據的量級下,單一PostgreSQL選型依然能穩定可靠地撐起業務,并能在很可觀的規模內做到一專多長。除了本職的 OLTP,PG 還在相當長的時間里兼任了緩存,OLAP,批處理,甚至消息隊列的角色。當然神龜雖壽,猶有竟時。最終這些兼職功能還是要逐漸分拆出去由專用組件負責,但那已經是近千萬日活時候的事了。
PostgreSQL 的先進性有目共睹,這也是其對陣同為開源關系型數據庫的老對手 —— MySQL 時,真正的核心競爭力。
MySQL的口號是“世界上最流行的開源關系型數據庫”,它的核心特點是糙猛快,基本盤是互聯網公司。
互聯網公司的典型特點是什么?追逐潮流糙猛快。糙說的是互聯網公司業務場景簡單(CRUD居多);數據重要性不高,不像傳統行業(例如銀行)那樣在意數據的一致性與正確性;可用性優先,相比停服務更能容忍數據丟亂錯,而一些傳統行業寧可停止服務也不能讓賬目出錯。 猛說的則是互聯網行業數據量大,它們需要的就是水泥槽罐車做海量 CRUD,而不是高鐵和載人飛船。 快說的則是互聯網行業需求變化多端,出活周期短,要求響應時間快,大量需求的就是開箱即用的軟件全家桶(如LAMP)和簡單培訓就能上手干活的 CRUD Boy。于是,糙猛快的互聯網公司和糙猛快的 MySQL 一拍即合。
但時過境遷,PostgreSQL 進步神速,在”快“與”猛“上 MySQL 已經不占優,現在只剩下”糙“了。舉個例子,MySQL 的哲學可以稱之為:“好死不如賴活著”,與 “我死后哪管洪水滔天”。其“糙”體現在各種“容錯”上,例如允許呆瓜程序員寫出的錯誤的SQL也能跑起來。最離譜的例子就是:MySQL 竟然允許部分成功的事務提交,這就違背了關系型數據庫的基本約束:原子性與數據一致性。
圖:MySQL默認竟然允許部分成功的事務提交
在先進性上, PostgreSQL 豐富的功能已經甩開 MySQL 了幾條街,而 MySQL 引以為豪的 ”流行度“ 也開始被 PostgreSQL 反超。
時來天地皆同力,運去英雄不自由。先進的因會反映為流行的果,流行的東西因為落后而過氣,而先進的東西會因為先進變得流行。在這個變革的時代中,沒有先進的功能打底,“流行”也也難以長久。時代所賦予的紅利,也會隨時代過去而退潮。
先進與開源,就是 PostgreSQL 成功的最大法寶。Oracle 先進, MySQL 開源,PostgreSQL 先進又開源。天時地利人和齊備,何愁大業不成?
軟件吞噬世界, 開源吞噬軟件,而云吞噬開源。
看上去,數據庫之爭已經塵埃落定,一段時間內大概不會有其他數據庫內核能威脅到 PostgreSQL 了。但對 PostgreSQL 開源社區真正的威脅已經不再是其他數據庫內核,而是軟件使用范式的嬗變:云出現了。
最初,大家開發軟件/信息服務需要使用昂貴的商業軟件( Oracle,SQL Server,Unix )。而隨著 Linux / PostgreSQL 這些開源軟件的興起,用戶們有了新的選擇。開源軟件確實免費不要錢,但想用好開源軟件,是一件門檻很高的事情,用戶需要雇傭開源軟件專家來幫助自己用好開源軟件。
大規模下用開源DBA自建更合算,只是好DBA太稀缺了。
這便是開源的核心模式:開源軟件開發者給開源軟件做貢獻;開源軟件通過好用免費吸引大量用戶;用戶在使用開源軟件時產生需求,創造更多開源軟件相關就業崗位,創造更多的開源軟件開發者。這三步形成了一個正反饋循環:更多的開源貢獻者讓開源軟件更好用,更省錢,從而吸引更多用戶,并創造出更多的開源貢獻者。開源生態的繁榮有賴于這個閉環,而公有云廠商的出現打破了這個循環。
公有云廠商將開源數據庫套上殼,加上自己的硬件與管控軟件,雇傭共享DBA提供支持,便成了云數據庫。誠然這是一項很有價值的服務,但云廠商將開源軟件放在自家的云平臺售賣而鮮有回饋,實質上是一種通過“搭便車”吸血開源的行為。這樣的共享外包模式將導致開源軟件的崗位與利潤向云廠商集中,最終形成少數巨頭做大壟斷,傷害到所有用戶的軟件自由。
世界已經被云改變了,閉源軟件早已不是最重要的問題了。
“在 2020 年,計算自由的敵人是云計算軟件”。
這是 DDIA 作者 Martin Kleppmann 在其“本地優先軟件”運動中提出的 宣言。云軟件指的是運行在供應商服務器上的軟件,例如:Google Docs、Trello、Slack、Figma、Notion 。以及最核心的云軟件,云數據庫。
后云時代,開源社區如何應對云軟件的挑戰?Cloud Native 運動給出了答案。這是一場從公有云奪回軟件自由的偉大運動,而數據庫,則是其中的核心焦點。
Cloud Native 全景還缺少最后一塊拼圖:數據庫!
這也是我們做 開箱即用的開源PostgreSQL 數據庫發行版 —— Pigsty 想要解決的問題:做一個用戶在本地即可使用的RDS服務,成為云數據庫的開源替代!
Pigsty 帶有開箱即用的 RDS / PaaS / SaaS 整合;一個無可比擬的PG監控系統與自動駕駛的高可用集群架構方案;一鍵安裝部署,并提供 Database as Code 的易用體驗;在體驗比肩甚至超越云數據庫的前提下,數據自主可控且成本減少 50% ~ 90%。我們希望它能極大降低 PostgreSQL 使用的門檻,成為開發者與DBA的 Copilot :讓更多用戶可以用 好數據庫, 用好 數據庫。
當然,限于篇幅,云數據庫與后云時代的數據庫未來,就是下一篇文章要介紹的故事了。
PostgreSQL中文社區歡迎廣大技術人員投稿投稿郵箱:press@postgres.cn
. linux數據恢復公司,為什么選擇Liux數據恢復公司?
. oracle 修復安裝,為什么需要進行Oracle修復安裝
. oracle數據庫維保,為什么需要進行Oracle數據庫維保
. Mysql數據恢復時主從設置開啟,為什么在MySQL數據恢復時需要開啟主從設置?
. oracle修復時提示未找到msi文件,為什么oracle修復時提示未找到msi文件
. 移動硬盤數據恢復用什么軟件,為什么需要移動硬盤數據恢復?
. dell服務器數據恢復,為什么需要dell服務器數據恢復?
. 數據庫恢復需要建立冗余數據,包括數據轉儲,為什么數據庫恢復需要建立冗余數據?
. 服務器數據恢復價格,服務器數據恢復價格:為什么價格不菲?
. 裝了第2個硬盤變得特別卡,為什么裝了第2個硬盤會變得卡?