
根據2023 年Stack Overflow 調研,Postgres 已經取代MySQL 成為最受敬仰和渴望的數據庫。
隨著Postgres 的發展勢頭愈發強勁,在Postgres 和MySQL 之間做選擇變得更難了。
如果看安裝數量,MySQL 可能仍是全球最大的開源數據庫。
Postgres 則自詡為全球最先進的開源關係型數據庫。
因為需要與各種數據庫及其衍生產品集成,Bytebase 和各種數據庫密切合作,而託管MySQL 和Postgres 最大的雲服務之一Google Cloud SQL 也是Bytebase 創始人的傑作之一。
我們對Postgres 和MySQL 在以下幾個維度進行了比較:
- 許可證License
- 性能Performance
- 功能Features
- 可擴展性Extensibility
- 易用性Usability
- 連接模型Connection Model
- 生態Ecosystem
- 可運維性Operability
除非另有說明,下文基於最新的主要版本Postgres 15 和MySQL 8.0 (使用InnoDB)。在文章中,我們使用Postgres 而不是PostgreSQL,儘管PostgreSQL 才是官方名稱,但被認為是一個錯誤的決定。
許可證License
- MySQL 社區版採用GPL 許可證。
- Postgres 發佈在PostgreSQL 許可下,是一種類似於BSD 或MIT 的自由開源許可。
即便MySQL 採用了GPL,仍有人擔心MySQL 歸Oracle 所有,這也是為什麼MariaDB 從MySQL 分叉出來。
性能Performance
對於大多數工作負載來說,Postgres 和MySQL 的性能相當,最多只有30% 的差異。無論選擇哪個數據庫,如果查詢缺少索引,則可能導致x10 ~ x1000 的降級。話雖如此,在極端的寫入密集型工作負載方面,MySQL 確實比Postgres 更具優勢。可以參考下文了解更多:
除非你的業務達到了Uber 的規模,否則純粹的數據庫性能不是決定因素。像Instagram, Notion 這樣的公司也能夠在超大規模下使用Postgres。
功能Features
對象層次結構
MySQL 採用了4 級結構:
- 實例
- 數據庫
- 表
- 列
Postgres 採用了5 級結構:
- 實例(也稱為集群)
- 數據庫
- 模式Schema
- 表
- 列
ACID 事務
兩個數據庫都支持ACID 事務,Postgres 提供更強大的事務支持。
安全性
Postgres 和MySQL 都支持RBAC。
Postgres 支持開箱即用的附加行級安全(RLS),而MySQL 需要創建額外的視圖來模擬此行為。
查詢優化器
Postgres 的查詢優化器更優秀,詳情參考此吐槽。
複製
Postgres 的標準複製使用WAL 進行物理複製。 MySQL 的標準複製使用binlog 進行邏輯複製。
Postgres 也支持通過其發布/訂閱模式進行邏輯複製。
JSON
Postgres 和MySQL 都支持JSON。 Postgres 支持的功能更多:
- 更多操作符來訪問JSON 功能。
- 允許在JSON 字段上創建索引。
CTE (Common Table Expression)
Postgres 對CTE 的支持更全面:
- 在CTE 內進行SELECT, UPDATE, INSERT, DELETE 操作
- 在CTE 之後進行SELECT, UPDATE, INSERT, DELETE 操作
MySQL 支持:
- 在CTE 內進行SELECT 操作
- 在CTE 之後進行SELECT, UPDATE, DELETE 操作
窗口函數(Window Functions)
窗口幀類型:MySQL 僅支持Row Frame 類型,允許定義由固定數量行組成的幀;而Postgres 同時支持Row Frame 和範圍幀類型。
範圍單位:MySQL 僅支持UNBOUNDED PRECEDING 和CURRENT ROW 這兩種範圍單位;而Postgres 支持更多範圍單位,包括UNBOUNDED FOLLOWING 和BETWEEN 等。
性能:一般來說,Postgres 實現的Window Functions 比MySQL 實現更高效且性能更好。
高級函數:Postgres 還支持更多高級Window Functions,例如LAG(), LEAD(), FIRST_VALUE(), and LAST_VALUE()。
可擴展性Extensibility
Postgres 支持多種擴展。最出色的是PostGIS,它為Postgres 帶來了地理空間能力。此外,還有Foreign Data Wrapper (FDW),支持查詢其他數據系統,pg_stat_statements 用於跟踪規劃和執行統計信息,pgvector 用於進行AI 應用的向量搜索。
MySQL 具有可插拔的存儲引擎架構,並誕生了InnoDB。但如今,在MySQL 中,InnoDB 已成為主導存儲引擎,因此可插拔架構只作為API 邊界使用,而不是用於擴展目的。
在認證方面,Postgres 和MySQL 都支持可插拔認證模塊(PAM)。
易用性Usability
Postgres 更加嚴格,而MySQL 更加寬容:
- MySQL 允許在使用GROUP BY 子句的SELECT 語句中包含非聚合列;而Postgres 則不允許。
- MySQL 默認情況下是大小寫不敏感的;而Postgres 默認情況下是大小寫敏感的。
- MySQL 允許JOIN 來自不同數據庫的表;而Postgres 只能連接單個數據庫內部的表,除非使用FDW 擴展。
連接模型Connection Model
Postgres 採用在每個連接上生成一個新進程的方式工作。而MySQL 則在每個連接上生成一個新線程。因此,Postgres 提供了更好的隔離性,例如,一個無效的內存訪問錯誤只會導致單個進程崩潰,而不是整個數據庫服務器。另一方面,進程模型消耗更多資源。因此,在部署Postgres 時建議通過連接池(如PgBouncer 或pgcat)代理連接。
生態Ecosystem
常見的SQL 工具都能很好地支持Postgres 和MySQL。由於Postgres 的可擴展架構,並且仍被社區擁有,近年來Postgres 生態系統更加繁榮。對於提供託管數據庫服務的應用平台,每個都選擇了Postgres。從早期的Heroku 到更新的Supabase, render 和Fly.io。
可運維性Operability
由於底層存儲引擎設計問題,在高負載下,Postgres 存在臭名昭著的XID wraparound 問題。
對於MySQL,在Google Cloud 運營大規模MySQL 集群時,我們遇到過一些複製錯誤。
這些問題只會在極端負載下發生。對於正常工作負載而言,無論是Postgres 還是MySQL 都是成熟且可靠的。數據庫託管平台也提供集成備份/恢復和監控功能。
Postgres 還是MySQL
2023 年了,在Postgres 和MySQL 之間做選擇仍然很困難,並且經常引起激烈討論。
總的來說,Postgres 有更多功能、更繁榮的社區和生態;而MySQL 則更易學習並且擁有龐大的用戶群體。我們觀察到與Stack Overflow 結果相同的行業趨勢,即Postgres 在開發者中變得越來越受歡迎。但根據我們的實際體驗,精密的Postgres 犧牲了一些便利性。如果你對Postgres 不太熟悉,最好從雲服務提供商那裡啟動一個實例,並運行幾個查詢來上手。有時候,這些額外好處可能並不值得,選擇MySQL 會更容易一些。
同時,在一個組織內部共存Postgres 和MySQL 也是很常見的情況。如果需要同時管理Postgres 和MySQL 的開發生命週期,可以來了解一下Bytebase。
💡 你可以訪問官網,免費註冊雲賬號,立即體驗Bytebase。
#全方位對比Postgres #和MySQL #版 #Bytebase的個人空間 #科技資訊
You may also like
相关贴文:
近期文章
- 8個最佳WooCommerce SEO插件用於更好的排名(2025)
- 為什麼Shopify擊敗電子商務的WordPress
- 我希望在使用WooCommerce之前我知道的5件事
- 停止在WooCommerce插件上浪費$ 1000!嘗試變體怪物$ 59解決方案
- 如何使用免費的WooCommerce禮品卡產品(使用免費插件)來提高銷售
- WooCommerce的動態定價和折扣規則,用於銷售技術
- 免費的WooCommerce產品搜索插件 – 電子商務網站的設置Advance WooSearch | AJAX搜索
- Shopify vs WooCommerce:在線商店的最佳電子商務平台🔍
- 啟動專業,功能豐富的超級智能電子商務網站| Merto -WooCommerce WordPress主題