一、 數(shù)據(jù)庫簡介 TLDR;
1.1 MySQL MySQL聲稱自己是最流行的開源數(shù)據(jù)庫,它屬于最流行的RDBMS (Relational Database Management System,關系數(shù)據(jù)庫管理系統(tǒng))應用軟件之一。LAMP中的M指的就是MySQL。構建在LAMP上的應用都會使用MySQL. MySQL最初是由MySQL AB開發(fā)的,然后在2008年以10億美金的價格賣給了Sun公司,Sun公司又在2010年被Oracle收購。Oracle收購導致MySQL的出現(xiàn)兩個版本:商業(yè)版和社區(qū)版。對于后者,由于Oracle控制了MySQL的開發(fā),受到了廣大使用者的批評。
1.2 PostgreSQL PostgreSQL標榜自己是世界上最先進的開源數(shù)據(jù)庫,屬于關系型數(shù)據(jù)庫管理系統(tǒng)(ORDBMS), 是以加州大學計算機系開發(fā)的POSTGRES,4.2版本為基礎的對象關系型數(shù)據(jù)庫管理系統(tǒng), 最初是1985年在加利福尼亞大學伯克利分校開發(fā)的,作為Ingres數(shù)據(jù)庫的后繼。PostgreSQL是完全由社區(qū)驅動的開源項目。 它提供了單個完整功能的版本,而不像MySQL那樣提供了多個不同的社區(qū)版、商業(yè)版與企業(yè)版。PostgreSQL基于自由的BSD/MIT許可,組織可以使用、復制、修改和重新分發(fā)代碼,只需要提供一個版權聲明即可。
Note:
MySQL的層級關系: 實例 -> 數(shù)據(jù)庫 -> 表
Postgres 的層級關系: 實例 -> 數(shù)據(jù)庫 -> Schema -> 表
schema 可以理解為命名空間,不影響使用
二、性能對比
測試環(huán)境
markdown
復制代碼
MySQL: - 硬件配置: 4核心 16GB內存 - 版本: MySQL 8.0 Postgres SQL: - 硬件配置: 4核心 16GB內存 - 版本:Postgres SQL 13

此次壓測數(shù)據(jù), SELECT 均為SELECT 按照主鍵查詢, UPDATE按照主鍵進行UPDATE, INSERT則為一次INSERT一行數(shù)據(jù)。從壓測數(shù)據(jù)上來看,我們可以得出以下幾個結論:
- 在吞吐量上而言,Postgres SQL 在SELECT性能上優(yōu)于MySQL一倍, 在INSERT上優(yōu)于4-5倍, UPDATE 則優(yōu)5-6倍
- 從平均耗時上來看, Postgres SQL優(yōu)于MySQL不止數(shù)倍
- 尤其從熱點行更新上看出,MySQL性能僅為Postgres SQL的, 1/8左右,耗時也增加了7倍
三、適用場景,如何選擇?
相對于Postgres MySQL更簡單, 所以有著更高的流行度, 在技術資料,以及技術組件支持上,支持的也更完善一些, 但不意味著它并不是不能替代的, 于筆者而言, MYSQL更像用于中小企業(yè)、個人的一款數(shù)據(jù)庫工具, 因為會的人多, 文檔資料比較完善,所以入手難度低。 但這些并不意味著MYSQL是最好的。

從上圖來看Postgres SQL的發(fā)展勢頭非常迅猛,目前已經(jīng)隱隱有追上MySQL的趨勢, 而MySQL相對而言,使用情況受歡迎度一直呈現(xiàn)下降趨勢。
MySQL適用的場景
MySQL適用于簡單的應用場景,如電子商務、博客、網(wǎng)站等, 大中小型系統(tǒng)均可以使用MySQL, 它最高支持千萬級別到數(shù)億級別的數(shù)據(jù)量, 但是在高性能要求的情況下, 比如較快的響應和較高的吞吐量的時候, MYSQL的性能稍微捉襟見肘, 另外,在查詢條件比較復雜、業(yè)務吞吐量要求不高,響應時長無要求,的時候,可以選擇MYSQL,
Postgres SQL適用的場景
總的來說, Postgre SQL更適合復雜的數(shù)據(jù)結構、高級應用和大規(guī)模數(shù)據(jù)集, 當然如果數(shù)據(jù)規(guī)模比較小, 也可以選擇Postgres SQL, 無論是什么場景,如果你想用Postgres SQL, 總可以找到對應的解決方法, 有且僅有, 在查詢條件比較復雜,的時候不太適用, 因為根據(jù)我們實際線上的業(yè)務表現(xiàn)是 Postgre SQL可能會選錯索引。
四、總結
PostgreSQL相對于MySQL的優(yōu)勢
- Postgre SQL在性能上遠遠好于MYSQL, 通過上面的壓測數(shù)據(jù)即可體現(xiàn),無論是在耗時,還是在整體吞吐量上,有顯著優(yōu)勢
- Postgre SQL在單行更新上有明顯優(yōu)勢,尤其是啟用了HOT UPDATE后, 性能比MYSQL高了一個數(shù)量級
- 在SQL的標準實現(xiàn)上要比MySQL完善,而且功能實現(xiàn)比較嚴謹,比較學院化;
- Postgre SQL主表采用堆表存放,MySQL采用索引組織表,能夠支持比MySQL更大的數(shù)據(jù)量。
- Postgre SQL的主備復制屬于物理復制,相對于MySQL基于binlog的邏輯復制,數(shù)據(jù)的一致性更加可靠,復制性能更高,對主機性能的影響也更小。
- MySQL 的事務隔離級別 repeatable read 并不能阻止常見的并發(fā)更新, 得加鎖才可以, 但悲觀鎖會影響性能, 手動實現(xiàn)樂觀鎖又復雜. 而 Postgre SQL 的列里有隱藏的樂觀鎖 version 字段, 默認的 repeatable read 級別就能保證并發(fā)更新的正確性, 并且又有樂觀鎖的性能.
Postgre SQL之于MySQL相對劣勢:
- Postgre SQL系統(tǒng)表設計相對復雜, 在進行一些系統(tǒng)表的統(tǒng)計、操作等方面比較復雜
- Postgre SQL 的索引選擇方面,選錯的概率稍高一些(實測), 而且不能跟mysql 一樣方便的使用force_index
- Postgre SQL 存在vacuum, 需要結合具體使用場景,來調整vacuum的參數(shù)
作者:winjeg
鏈接:
https://juejin.cn/post/7324362442229891124