棄用mysql:用Postgres SQL取而代之 !真香!
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
01.數(shù)據(jù)庫簡(jiǎn)介 互聯(lián)網(wǎng)上都稱MySQL是當(dāng)前業(yè)內(nèi)最流行的開源數(shù)據(jù)庫,它屬于最流行的RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫管理系統(tǒng))應(yīng)用數(shù)據(jù)庫軟件之一。LAMP中的M指的就是MySQL。構(gòu)建在LAMP上的應(yīng)用都會(huì)使用MySQL. MySQL最初是由MySQL AB開發(fā)的,然后在2008年以10億美金的價(jià)格賣給了Sun公司,Sun公司又在2010年被Oracle收購。Oracle收購導(dǎo)致MySQL的出現(xiàn)兩個(gè)版本:商業(yè)版和社區(qū)版。對(duì)于后者,由于Oracle控制了MySQL的開發(fā),受到了廣大使用者的批評(píng)。 PostgreSQL PostgreSQL標(biāo)榜自己是世界上最先進(jìn)的開源數(shù)據(jù)庫,屬于關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(ORDBMS), 是以加州大學(xué)計(jì)算機(jī)系開發(fā)的POSTGRES,4.2版本為基礎(chǔ)的對(duì)象關(guān)系型數(shù)據(jù)庫管理系統(tǒng), 最初是1985年在加利福尼亞大學(xué)伯克利分校開發(fā)的,作為Ingres數(shù)據(jù)庫的后繼。PostgreSQL是完全由社區(qū)驅(qū)動(dòng)的開源項(xiàng)目。它提供了單個(gè)完整功能的版本,而不像MySQL那樣提供了多個(gè)不同的社區(qū)版、商業(yè)版與企業(yè)版。PostgreSQL基于自由的BSD/MIT許可,組織可以使用、復(fù)制、修改和重新分發(fā)代碼,只需要提供一個(gè)版權(quán)聲明即可。 Note: MySQL的層級(jí)關(guān)系是:實(shí)例 -> 數(shù)據(jù)庫 -> 表 Postgres 的層級(jí)關(guān)系:實(shí)例 -> 數(shù)據(jù)庫 -> Schema -> 表 schema 可以理解為命名空間,具體不影響使用 02.性能對(duì)比 本次壓測(cè)的數(shù)據(jù), SELECT 均為SELECT 按照主鍵查詢, UPDATE按照主鍵進(jìn)行UPDATE, INSERT則為一次INSERT一行數(shù)據(jù)。從壓測(cè)數(shù)據(jù)上來看,我們可以得出以下幾個(gè)結(jié)論: 吞吐量:Postgres SQL 在SELECT性能上優(yōu)于MySQL一倍, 在INSERT上優(yōu)于4-5倍, UPDATE 則優(yōu)5-6倍 平均耗時(shí):Postgres SQL優(yōu)于MySQL不止數(shù)倍 熱點(diǎn)行更新:,MySQL性能僅為Postgres SQL的, 1/8左右,耗時(shí)也增加了7倍。 03.場(chǎng)景及選擇 MYSQL相對(duì)于Postgres更簡(jiǎn)單, 所以它可能有著更高的流行度和知名度, 并且在技術(shù)資料,以及一些技術(shù)組件支持上,支持的也更完善很多, 但這并不是說它不能替代的, 對(duì)于作者而言, MYSQL更比較像用于中小企業(yè)以及個(gè)人的一款數(shù)據(jù)庫工具, 因?yàn)闀?huì)的人多, 文檔資料就相對(duì)于而言比較的完善,所以學(xué)習(xí)的難度低。但這些并不意味著MYSQL就是最好的。 從圖片上來看Postgres SQL的發(fā)展勢(shì)頭著實(shí)是非常迅猛的,且目前已經(jīng)隱隱有追上MySQL的趨勢(shì), 而對(duì)于MySQL而言,在使用情況及受歡迎成都來看是一直呈現(xiàn)下降趨勢(shì)。 MySQL比較適用于一些簡(jiǎn)單的應(yīng)用場(chǎng)景,比如電子商務(wù)、博客、網(wǎng)站等等,以及大中小型系統(tǒng)均可以使用MySQL作為數(shù)據(jù)存儲(chǔ)使用, 它最高支持千萬級(jí)別到數(shù)億級(jí)別的數(shù)據(jù)量, 但是在高性能要求的情況下, 需要比較較快的響應(yīng)和較高的吞吐量的時(shí)候, MYSQL的性能稍微捉襟見肘, 另外,在查詢條件比較復(fù)雜、業(yè)務(wù)吞吐量要求不高,響應(yīng)時(shí)長無要求,的時(shí)候,可以選擇MYSQL, 所以,相對(duì)于MYSQL來說, Postgre SQL更適合復(fù)雜的數(shù)據(jù)結(jié)構(gòu)、高級(jí)應(yīng)用和大規(guī)模數(shù)據(jù)集, 當(dāng)然如果數(shù)據(jù)規(guī)模比較小, 也可以選擇Postgres SQL, 不管是基于什么場(chǎng)景,如果你想用Postgres SQL, 就總可以找到其對(duì)應(yīng)的解決方法, 有且僅有在查詢條件比較復(fù)雜的時(shí)候不太適用, 因?yàn)楦鶕?jù)我們實(shí)際線上的業(yè)務(wù)表現(xiàn)是 Postgre SQL可能會(huì)選錯(cuò)索引。 04.最后 Postgre SQL性能上遠(yuǎn)遠(yuǎn)好于MYSQL, 通過上面的壓測(cè)數(shù)據(jù)即可體現(xiàn),無論是在耗時(shí),還是在整體吞吐量上,有顯著優(yōu)勢(shì) Postgre SQL在單行更新上有明顯優(yōu)勢(shì),尤其是啟用了HOT UPDATE后, 性能比MYSQL高了一個(gè)數(shù)量級(jí) 在SQL的標(biāo)準(zhǔn)實(shí)現(xiàn)上要比MySQL完善,而且功能實(shí)現(xiàn)比較嚴(yán)謹(jǐn),比較學(xué)院化; Postgre SQL主表采用堆表存放,MySQL采用索引組織表,能夠支持比MySQL更大的數(shù)據(jù)量。 Postgre SQL的主備復(fù)制屬于物理復(fù)制,相對(duì)于MySQL基于binlog的邏輯復(fù)制,數(shù)據(jù)的一致性更加可靠,復(fù)制性能更高,對(duì)主機(jī)性能的影響也更小。 MySQL 的事務(wù)隔離級(jí)別 repeatable read 并不能阻止常見的并發(fā)更新, 得加鎖才可以, 但悲觀鎖會(huì)影響性能, 手動(dòng)實(shí)現(xiàn)樂觀鎖又復(fù)雜. 而 Postgre SQL 的列里有隱藏的樂觀鎖 version 字段, 默認(rèn)的 repeatable read 級(jí)別就能保證并發(fā)更新的正確性, 并且又有樂觀鎖的性能. Postgre SQL系統(tǒng)表設(shè)計(jì)相對(duì)復(fù)雜, 在進(jìn)行一些系統(tǒng)表的統(tǒng)計(jì)、操作等方面比較復(fù)雜 Postgre SQL 的索引選擇方面,選錯(cuò)的概率稍高一些(實(shí)測(cè)), 而且不能跟mysql 一樣方便的使用force_index Postgre SQL 存在vacuum, 需要結(jié)合具體使用場(chǎng)景,來調(diào)整vacuum的參數(shù) 該文章在 2024/2/19 14:41:56 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |