當前位置: 妍妍網 > 碼農

為什麽高效能場景選用Postgres SQL 而不是 MySQL

2024-03-18碼農

架構師(JiaGouX)

我們都是架構師!
架構未來,你來不來?


一、 資料庫簡介 TLDR

1.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的開發,受到了廣大使用者的批評。

1.2 PostgreSQL

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

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

Note:

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

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

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


二、效能對比

測試環境

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


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

  1. 在吞吐量上而言,Postgres SQL 在SELECT效能上優於MySQL一倍, 在INSERT上優於4-5倍, UPDATE 則優5-6倍

  2. 從平均耗時上來看, Postgres SQL優於MySQL不止數倍

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


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

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

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

MySQL適用的場景

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

Postgres SQL適用的場景

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


四、總結

PostgreSQL相對於MySQL的優勢

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

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

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

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

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

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

  • Postgre SQL之於MySQL相對劣勢:

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

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

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

  • 如喜歡本文,請點選右上角,把文章分享到朋友圈
    如有想了解學習的技術點,請留言給若飛安排分享

    因公眾號更改推播規則,請點「在看」並加「星標」 第一時間獲取精彩技術分享

    ·END·

    相關閱讀:

    作者:winjeg

    來源:https://juejin.cn/post/7324362442229891124

    版權申明:內容來源網路,僅供學習研究,版權歸原創者所有。如有侵權煩請告知,我們會立即刪除並表示歉意。謝謝!

    架構師

    我們都是架構師!

    關註 架構師(JiaGouX),添加「星標」

    獲取每天技術幹貨,一起成為牛逼架構師

    技術群請 加若飛: 1321113940 進架構師群

    投稿、合作、版權等信箱: [email protected]