點選「 IT碼徒 」, 關註,置頂 公眾號
每日技術幹貨,第一時間送達!
一、 資料庫簡介 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的參數
來源:juejin.cn/post/7324362442229891124
— END —
PS:防止找不到本篇文章,可以收藏點贊,方便翻閱尋找哦。
往期推薦