當前位置: 妍妍網 > 碼農

為什麽高效能場景選用 Postgres SQL 而不推薦使用 MySQL?

2024-02-22碼農

來源|juejin.cn/post/7324362442229891124

👉 歡迎 ,你將獲得: 專屬的計畫實戰 / Java 學習路線 / 一對一提問 / 學習打卡 / 贈書福利

全棧前後端分離部落格計畫 1.0 版本完結啦,2.0 正在更新中 ... , 演示連結 http://116.62.199.48/ ,全程手摸手,後端 + 前端全棧開發,從 0 到 1 講解每個功能點開發步驟,1v1 答疑,直到計畫上線。 目前已更新了219小節,累計34w+字,講解圖:1492張,還在持續爆肝中.. 後續還會上新更多計畫,目標是將Java領域典型的計畫都整一波,如秒殺系統, 線上商城, IM即時通訊,Spring Cloud Alibaba 等等,

一、 資料庫簡介 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.0

  • Postgres SQL:

  • 硬體配置:4核心 16GB記憶體

  • 版本:Postgres SQL 13

  • 圖片

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

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

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

  • 尤其從熱點行更新上看出,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的參數

  • 好書推薦

    探秘雲邊端,揭示原理,實踐邊緣技術:一本真正能夠指導工程師將邊緣計算計畫落地的指南,拿來即用。

    Midjourney完全教程:從關鍵提示到效果出圖,從基礎理論到實戰套用,從工具操作到創意實作,一本書輕松玩轉AI繪畫,領略無限藝術可能。

    👉 歡迎 ,你將獲得: 專屬的計畫實戰 / Java 學習路線 / 一對一提問 / 學習打卡 / 贈書福利

    全棧前後端分離部落格計畫 1.0 版本完結啦,2.0 正在更新中 ... , 演示連結 http://116.62.199.48/ ,全程手摸手,後端 + 前端全棧開發,從 0 到 1 講解每個功能點開發步驟,1v1 答疑,直到計畫上線。 目前已更新了219小節,累計34w+字,講解圖:1492張,還在持續爆肝中.. 後續還會上新更多計畫,目標是將Java領域典型的計畫都整一波,如秒殺系統, 線上商城, IM即時通訊,Spring Cloud Alibaba 等等,


    1. 

    2. 

    3. 

    4. 

    最近面試BAT,整理一份面試資料Java面試BATJ通關手冊,覆蓋了Java核心技術、JVM、Java並行、SSM、微服務、資料庫、數據結構等等。

    獲取方式:點「在看」,關註公眾號並回復 Java 領取,更多內容陸續奉上。

    PS:因公眾號平台更改了推播規則,如果不想錯過內容,記得讀完點一下在看,加個星標,這樣每次新文章推播才會第一時間出現在你的訂閱列表裏。

    「在看」支持小哈呀,謝謝啦