當前位置: 妍妍網 > 碼農

為什麽高效能場景選用PostgreSQL而不是MySQL?

2024-02-26碼農

一、 資料庫簡介(TL;DR)

1.MySQL

MySQL聲稱自己是最流行的開源資料庫,它屬於最流行的RDBMS(Relational Database Management System,關聯式資料庫管理系統)套用軟體之一。LAMP中的M指的就是MySQL,構建在LAMP上的套用都會使用MySQL。

MySQL最初是由MySQL AB開發的,然後在2008年以10億美金的價格賣給了Sun公司,Sun公司又在2010年被Oracle收購。Oracle收購導致MySQL的出現兩個版本:商業版和社群版。對於後者,由於Oracle控制了MySQL的開發,受到了廣大使用者的批評。

2.PostgreSQL

PostgreSQL標榜自己是世界上最先進的開源資料庫,屬於關系型資料庫管理系統(RDBMS),是以加州大學電腦系開發的POSTGRES,4.2版本為基礎的物件關系型資料庫管理系統, 最初是1985年在加利福尼亞大學柏克萊分校開發的,作為Ingres資料庫的後繼。 PostgreSQL是完全由社群驅動的開源計畫。

它提供了單個完整功能的版本,而不像MySQL那樣提供了多個不同的社群版、商業版與企業版。PostgreSQL基於自由的BSD/MIT授權,組織可以使用、復制、修改和重新分發程式碼,只需要提供一個版權聲明即可。

Note:

MySQL的層級關系:例項 -> 資料庫 -> 表

Postgres 的層級關系:例項 -> 資料庫 -> Schema -> 表

schema 可以理解為名稱空間,不影響使用

二、效能對比

測試環境:

MySQL- 硬體配置:4核心 16GB記憶體- 版本:MySQL 8.0PostgresSQL- 硬體配置:4核心 16GB記憶體- 版本:PostgresSQL 13

此次壓測數據,SELECT 均為SELECT 按照主鍵查詢,UPDATE按照主鍵進行UPDATE,INSERT 則為一次 INSERT 一行數據。從壓測數據上來看,我們可以得出以下幾個結論:

  • 在吞吐量上而言,PostgreSQL 在SELECT效能上優於MySQL一倍, 在INSERT上優於4-5倍, UPDATE 則優5-6倍。

  • 從平均耗時上來看,PostgreSQL優於MySQL不止數倍。

  • 尤其從熱點行更新上看出,MySQL效能僅為PostgreSQL的1/8左右,耗時也增加了7倍。

  • 三、適用場景,如何選擇?

    相對於PostgreSQL,MySQL更簡單,所以有著更高的流行度,在技術資料以及技術元件支持上,支持得也更完善一些,但不意味著它並不是不能替代的。於筆者而言, MYSQL更像用於中小企業、個人的一款資料庫工具,因為會的人多,文件資料比較完善,所以入手難度低。但這些並不意味著MYSQL是最好的。

    從上圖來看PostgreSQL的發展勢頭非常迅猛,目前已經隱隱有追上MySQL的趨勢,而MySQL相對而言,使用情況受歡迎度一直呈現下降趨勢。

    1.MySQL適用的場景

    MySQL適用於簡單的套用場景,如電子商務、部落格、網站等,大中小型系統均可以使用MySQL,它最高支持千萬級別到數億級別的數據量,但是在高效能要求的情況下,比如較快的響應和較高的吞吐量的時候,MYSQL的效能稍微捉襟見肘。另外,在查詢條件比較復雜、業務吞吐量要求不高,響應時長無要求的時候,可以選擇MYSQL。

    2.PostgreSQL適用的場景

    總的來說, PostgreSQL更適合復雜的數據結構、高級套用和大規模數據集。當然如果數據規模比較小,也可以選擇PostgreSQL,無論是什麽場景,如果你想用PostgreSQL,總可以找到對應的解決方法。有且僅有在查詢條件比較復雜的時候不太適用,因為根據我們實際線上的業務表現是PostgreSQL可能會選錯索引。

    四、總結

    1.PostgreSQL相對於MySQL的優勢

  • PostgreSQL在效能上遠遠好於MYSQL,透過上面的壓測數據即可體現,無論是在耗時,還是在整體吞吐量上,有顯著優勢。

  • PostgreSQL在單行更新上有明顯優勢,尤其是啟用了HOT UPDATE後,效能比MYSQL高了一個數量級。

  • 在SQL的標準實作上要比MySQL完善,而且功能實作比較嚴謹,比較學院化。

  • PostgreSQL主表采用堆表存放,MySQL采用索引組織表,能夠支持比MySQL更大的數據量。

  • PostgreSQL的主備復制屬於物理復制,相對於MySQL基於binlog的邏輯復制,數據的一致性更加可靠,復制效能更高,對主機效能的影響也更小。

  • MySQL 的事務隔離級別 repeatable read 並不能阻止常見的並行更新,得加鎖才可以,但悲觀鎖會影響效能,手動實作樂觀鎖又復雜。而 Postgre SQL 的列裏有隱藏的樂觀鎖 version 欄位,預設的 repeatable read 級別就能保證並行更新的正確性,並且又有樂觀鎖的效能。

  • 2.PostgreSQL之於MySQL相對劣勢

  • PostgreSQL系統表設計相對復雜, 在進行一些系統表的統計、操作等方面比較復雜。

  • PostgreSQL 的索引選擇方面,選錯的機率稍高一些(實測),而且不能跟mysql 一樣方便地使用force_index。

  • PostgreSQL 存在vacuum,需要結合具體使用場景,來調整vacuum的參數。

  • 作者丨winjeg

    來源丨 稀土金塊: juejin.cn/post/7324362442229891124

    dbaplus社群歡迎廣大技術人員投稿,投稿信箱: [email protected]