一、 數(shù)據(jù)庫簡介 TLDR;
1.1 MySQL MySQL聲稱自己是最流行的開源數(shù)據(jù)庫,它屬于最流行的RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫管理系統(tǒng))應用軟件之一。LAMP中的M指的就是MySQL。構(gòu)建在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ù)庫,屬于關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(ORDBMS), 是以加州大學計算機系開發(fā)的POSTGRES,4.2版本為基礎(chǔ)的對象關(guān)系型數(shù)據(jù)庫管理系統(tǒng), 最初是1985年在加利福尼亞大學伯克利分校開發(fā)的,作為Ingres數(shù)據(jù)庫的后繼。PostgreSQL是完全由社區(qū)驅(qū)動的開源項目。 它提供了單個完整功能的版本,而不像MySQL那樣提供了多個不同的社區(qū)版、商業(yè)版與企業(yè)版。PostgreSQL基于自由的BSD/MIT許可,組織可以使用、復制、修改和重新分發(fā)代碼,只需要提供一個版權(quán)聲明即可。
Note:
MySQL的層級關(guān)系: 實例 -> 數(shù)據(jù)庫 -> 表
Postgres 的層級關(guān)系: 實例 -> 數(shù)據(jù)庫 -> Schema -> 表
schema 可以理解為命名空間,不影響使用
二、性能對比
測試環(huán)境
markdown
復制代碼
MySQL: - 硬件配置: 4核心 16GB內(nèi)存 - 版本: MySQL 8.0 Postgres SQL: - 硬件配置: 4核心 16GB內(nèi)存 - 版本:Postgres SQL 13
此次壓測數(shù)據(jù), SELECT 均為SELECT 按照主鍵查詢, UPDATE按照主鍵進行UPDATE, INSERT則為一次INSERT一行數(shù)據(jù)。從壓測數(shù)據(jù)上來看,我們可以得出以下幾個結(jié)論:
- 在吞吐量上而言,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更簡單, 所以有著更高的流行度, 在技術(shù)資料,以及技術(shù)組件支持上,支持的也更完善一些, 但不意味著它并不是不能替代的, 于筆者而言, 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ù)結(jié)構(gòu)、高級應用和大規(guī)模數(shù)據(jù)集, 當然如果數(shù)據(jù)規(guī)模比較小, 也可以選擇Postgres SQL, 無論是什么場景,如果你想用Postgres SQL, 總可以找到對應的解決方法, 有且僅有, 在查詢條件比較復雜,的時候不太適用, 因為根據(jù)我們實際線上的業(yè)務表現(xiàn)是 Postgre SQL可能會選錯索引。
四、總結(jié)
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)表設(shè)計相對復雜, 在進行一些系統(tǒng)表的統(tǒng)計、操作等方面比較復雜
- Postgre SQL 的索引選擇方面,選錯的概率稍高一些(實測), 而且不能跟mysql 一樣方便的使用force_index
- Postgre SQL 存在vacuum, 需要結(jié)合具體使用場景,來調(diào)整vacuum的參數(shù)
作者:winjeg
鏈接:
https://juejin.cn/post/7324362442229891124