久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

神仙打架:PostgreSQL和MySQL誰武藝超群,?

 張問驊 2020-06-10


本文介紹MySQL和PostgreSQL的一些特性對比,讓大家了解二者的優(yōu)劣,,更好的做出選擇,。當前國內(nèi)的現(xiàn)狀,互聯(lián)網(wǎng)公司使用MySQL的較多,,PostgreSQL的使用比例反而不高,,但相信看到PG的新特性后,你會愛上她,。當然MySQL作為最流行的數(shù)據(jù)庫,,依然會吸引大部分人的眼球。

PostgreSQL標榜自己是世界上最先進的開源數(shù)據(jù)庫,甚至PG粉絲或者一些PGER宣稱,,她可以和Oracle相媲美(雖然PG很強大,,但是和Oracle還是有差距的,當然PG優(yōu)勢也是顯而易見的),,而且沒有那么昂貴的價格和傲慢的客服,。

當然PG功能完善和強大是最早始于9版本,在10版本快速發(fā)展,,增加很多功能和特性,。PostgreSQL是完全由社區(qū)驅(qū)動的開源項目,他的核心代碼,,都是由社區(qū)維護,,商用版本都是基于PG做的二次開發(fā)。

MySQL 聲稱自己是最流行的開源數(shù)據(jù),??船F(xiàn)在國內(nèi)的現(xiàn)狀,稱得上名副其實,。MySQL被賣幾次后,,最終落到Oracle公司的囊中,。正是因此,MySQL之父Monty,,修改了MySQL的源代碼,,創(chuàng)立了MariaDB分支。

說到這里當然不得不提另一個重要的分支,,Percana公司的Percona Server,。Percona公司更擅長MySQL運維,開發(fā)了很多非常實用運維工具,,而且都已經(jīng)開源,,并回饋給社區(qū),像XtraBackup和pt-Toolkits工具,。

簡單對比MySQL和PostgreSQL發(fā)現(xiàn),,MySQL背后是成熟的商業(yè)公司(Oracle有自己的MySQL企業(yè)版,收費,,有許多社區(qū)版沒有的特性),,而PostgreSQL背后是一個龐大的志愿開發(fā)組,相比而言,,PostgreSQL的商業(yè)性質(zhì)更少一些,,他沒有所謂的PostgreSQL企業(yè)版,但是存在基于PG開發(fā)的一些企業(yè)級的PG數(shù)據(jù)庫,。

下面我將從以下幾個方面闡述MySQL和PostgreSQL的異同和優(yōu)劣,,由于筆者水平的限制,不當之處,,還請大家多提意見,。

一,、開源方面

PostgreSQL: The world’s most advanced open source database。

開源協(xié)議:PostgreSQL基于自由的BSD/MIT許可,組織可以使用,、復制,、修改和重新分發(fā)代碼,只需要提供一個版權聲明即可,。

PG的開源協(xié)議特別靈活,任何公司的和個人都可以把PG作為一個產(chǎn)品銷售,,而不需要像MySQL那樣必須修改大部分代碼才可以作為公司的產(chǎn)品,。

MySQL:World’s Most Popular Open Source Database。

開源協(xié)議:核心代碼基于GPL或Commercial License,。

MySQL的開源協(xié)議是基于GPL協(xié)議,任何公司都可以免費使用,,不允許修改后和衍生的代碼做為閉源的商業(yè)軟件發(fā)布和銷售,MySQL的版權在甲骨文手中,,甲骨文可以推了其商業(yè)閉源版本,。

如上圖所示,開源軟件協(xié)議

二,、ACID支持方面

PostgreSQL支持事務的強一致性,事務保證性好,,完全支持ACID特性,。

MySQL只有innodb引擎支持事務,事務一致性保證上可根據(jù)實際需求調(diào)整,,為了最大限度的保護數(shù)據(jù),MySQL可配置雙一模式,,對ACID的支持上比PG稍弱弱,。

三、SQL標準的支持方面

PostgreSQL幾乎支持所有的SQL標準,,支持類型相當豐富。

MySQL只支持部分SQL標準,,相比于PG支持類型稍弱。

四、復制

MySQL的復制是基于binlog的邏輯異步復制,,無法實現(xiàn)同步復制,。

復制模式:

  • 一主一備,。

  • 一主多備,。

  • 級聯(lián)復制,。

  • 循環(huán)復制,。

  • 主主復制。

數(shù)據(jù)流轉(zhuǎn)優(yōu)勢:通過canal增量數(shù)據(jù)的訂閱和消費,,可以同步數(shù)據(jù)到kafka,通過kafka做數(shù)據(jù)流轉(zhuǎn),。

MySQL所有的高可用方案都是基于binlog做的同步,,以及基于MySQL的分布式數(shù)據(jù)也是基于MySQL的binlog實現(xiàn),,binlog是MySQL生態(tài)圈最基本技術實現(xiàn),。

PostgreSQL可以做到同步,異步,,半同步復制,以及基于日志邏輯復制,,可以實現(xiàn)表級別的訂閱和發(fā)布。

復制模式:

  • 一主一備,。

  • 一主多備。

  • 級聯(lián)復制,。

  • 熱備庫/流復制。

  • 邏輯復制,。

數(shù)據(jù)流轉(zhuǎn)優(yōu)勢:通過邏輯復制實現(xiàn)消息的訂閱和消費,可以同步數(shù)據(jù)到kafka,,通過kafka實現(xiàn)數(shù)據(jù)流轉(zhuǎn)。

五,、并發(fā)控制

PostgreSQL通過其MVCC實現(xiàn)有效地解決了并發(fā)問題,從而實現(xiàn)了非常高的并發(fā)性,。

PG新老數(shù)據(jù)一起存放的基于XID的MVCC機制,新老數(shù)據(jù)一起存放,,需要定時觸 發(fā)VACUUM,會帶來多余的IO和數(shù)據(jù)庫對象加鎖開銷,,引起數(shù)據(jù)庫整體的并發(fā)能力下降,。而且VACUUM清理不及時,還可能會引發(fā)數(shù)據(jù)膨脹,。

當然PostgreSQL還有一點影響比較,,為了保證事務的強一致性,未決事務會影響所有表VACUUM清理,,導致表膨脹,。

MySQL僅在InnoDB中支持MVCC。

innodb的基于回滾段實現(xiàn)的MVCC機制,但是MySQL的間隙鎖影響較大,,鎖定數(shù)據(jù)較多,。

六、性能

1,、PostgreSQL

1)PostgreSQL廣泛用于讀寫速度高和數(shù)據(jù)一致性高的大型系統(tǒng),。此外,它還支持各種性能優(yōu)化,,當然這些優(yōu)化僅在商業(yè)解決方案中可用,,例如地理空間數(shù)據(jù)支持,沒有讀鎖定的并發(fā)性等等,。

2)PostgreSQL性能最適用于需要執(zhí)行復雜查詢的系統(tǒng),。

3)PostgreSQL在OLTP/ OLAP系統(tǒng)中表現(xiàn)良好,讀寫速度以及大數(shù)據(jù)分析方面表現(xiàn)良好,,基于PG的GP數(shù)據(jù)庫,,在數(shù)據(jù)倉庫領域表現(xiàn)良好。

4)PostgreSQL也適用于商業(yè)智能應用程序,,但更適合需要快速讀/寫速度的數(shù)據(jù)倉庫和數(shù)據(jù)分析應用程序,。

2,、MySQL

1)MySQL是廣泛選擇的基于Web的項目,需要數(shù)據(jù)庫只是為了簡單的數(shù)據(jù)事務,。但是,,當遇到重負載或嘗試完成復雜查詢時,MySQL通常會表現(xiàn)不佳,。

2)MySQL的讀取速度,,在OLTP系統(tǒng)中表現(xiàn)良好。

3)MySQL + InnoDB為OLTP場景提供了非常好的讀/寫速度,??傮w而言,MySQL在高并發(fā)場景下表現(xiàn)良好,。

4)MySQL是可靠的,,并且與商業(yè)智能應用程序配合良好,因為商業(yè)智能應用程序通常讀取很多,。

七、高可用技術的實現(xiàn)

1,、PostgreSQL

1)基于流復制的異步,、同步主從。

2)基于流復制的–keepalive,。

3)基于流復制的 –repmgr,。

4)基于流復制的 –patroni+etcd。

5)共享存儲HA(corosync+pacemaker),。

6)Postgres-XC,。

7)Postgres-XL。

8)中間件實現(xiàn):pgpool,、pgcluster,、slony、plploxy,。

2,、MySQL

1)主從復制。

2)主主復,。

3)MHA,。

4)LVS+KEEPALIVE。

5)MGR分布式數(shù)據(jù)庫,,多點寫入[不建議],,基于paxos協(xié)議。

6)PXC分布式數(shù)據(jù)庫,,多點寫入[不建議],,基于令牌環(huán)協(xié)議。

7)INNODB CLUSTER[8.0新技術,,基于MGR實現(xiàn),,上層封裝命令],基于paxos協(xié)議。

8)中間件實現(xiàn):mycat,。

八,、外部數(shù)據(jù)源

PostgreSQL FDW –[foreign-data wrapper的一個簡稱,,可以叫外部封裝。

PostgreSQL不支持多數(shù)據(jù)引擎,。但支持Extension組件擴充,以及通過名為FDW的技術將Oracle,、Hadoop,、MongoDB、SQLServer,、Excel,、CSV文件等作為外部表進行讀寫操作,因此,,可以為大數(shù)據(jù)與關系型數(shù)據(jù)庫提供良好對接,。

MySQL:無。

九,、數(shù)據(jù)存儲和數(shù)據(jù)類型

PG主表采用堆表存放,,存放的數(shù)據(jù)量較大,數(shù)據(jù)訪問方式類似于Oracle的堆表,。

MySQL采用索引組織表,,MySQL必須有主鍵索引,,所有的數(shù)據(jù)訪問都是通過主鍵實現(xiàn),,二級索引訪問時,,需要掃描兩遍索引(主鍵和二級索引)。

十,、PostgreSQL與MySQL優(yōu)劣對比

1、PostgreSQL相對于MySQL的優(yōu)勢

1)在SQL的標準實現(xiàn)上要比MySQL完善,,而且功能實現(xiàn)比較嚴謹,。 

2)存儲過程的功能支持要比MySQL好,具備本地緩存執(zhí)行計劃的能力,。

3)對表連接支持較完整,,優(yōu)化器的功能較完整,支持的索引類型很多,,復雜查詢能力較強,。

4)PG主表采用堆表存放,,MySQL采用索引組織表,,能夠支持比MySQL更大的數(shù)據(jù)量,。 

5)PG的主備復制屬于物理復制,,相對于MySQL基于binlog的邏輯復制,數(shù)據(jù)的一致性更加可靠,,復制性能更高,對主機性能的影響也更小,。

6)MySQL的存儲引擎插件化機制,,存在鎖機制復雜影響并發(fā)的問題,而PG不存在,。 

7)PG對可以實現(xiàn)外部數(shù)據(jù)源查詢,,數(shù)據(jù)源的支持類型豐富。 

8)PG原生的邏輯復制可以實現(xiàn)表級別的訂閱發(fā)布,,可以實現(xiàn)數(shù)據(jù)通過kafka流轉(zhuǎn),,而不需要其他的組件。 

9)PG支持三種表連接方式,,嵌套循環(huán),,哈希連接,,排序合并,而MySQL只支持嵌套循環(huán),。 

10)PostgreSQL源代碼寫的很清晰,,易讀性比MySQL強太多了,。 

11)PostgreSQL通過PostGIS擴展支持地理空間數(shù)據(jù)。地理空間數(shù)據(jù)有專用的類型和功能,,可直接在數(shù)據(jù)庫級別使用,,使開發(fā)人員更容易進行分析和編碼。 

12)可擴展型系統(tǒng),,有豐富可擴展組件,,作為contribute發(fā)布。 

13)PostgreSQL支持JSON和其他NoSQL功能,,如本機XML支持和使用HSTORE的鍵值對,。它還支持索引JSON數(shù)據(jù)以加快訪問速度,特別是10版本JSONB更是強大,。 

14)PostgreSQL完全免費,,而且是BSD協(xié)議,如果你把PostgreSQL改一改,,然后再拿去賣錢,,也沒有人管你,這一點很重要,,這表明了PostgreSQL數(shù)據(jù)庫不會被其它公司控制,。相反,MySQL現(xiàn)在主要是被Oracle公司控制,。

2,、MySQL相對于PG的優(yōu)勢

1)innodb的基于回滾段實現(xiàn)的MVCC機制,相對PG新老數(shù)據(jù)一起存放的基于XID的MVCC機制,,是占優(yōu)的,。新老數(shù)據(jù)一起存放,需要定時觸 發(fā)VACUUM,,會帶來多余的IO和數(shù)據(jù)庫對象加鎖開銷,,引起數(shù)據(jù)庫整體的并發(fā)能力下降。而且VACUUM清理不及時,,還可能會引發(fā)數(shù)據(jù)膨脹,。

2)MySQL采用索引組織表,這種存儲方式非常適合基于主鍵匹配的查詢,、刪改操作,,但是對表結構設計存在約束。

3)MySQL的優(yōu)化器較簡單,,系統(tǒng)表,、運算符、數(shù)據(jù)類型的實現(xiàn)都很精簡,,非常適合簡單的查詢操作,。

4)MySQL相對于PG在國內(nèi)的流行度更高,,PG在國內(nèi)顯得就有些落寞了。

5)MySQL的存儲引擎插件化機制,,使得它的應用場景更加廣泛,,比如除了innodb適合事務處理場景外,myisam適合靜態(tài)數(shù)據(jù)的查詢場景,。

總結

總體上來說,,開源數(shù)據(jù)庫都不是很完善,商業(yè)數(shù)據(jù)庫oracle在架構和功能方面都還是完善很多的,。從應用場景來說,,PG更加適合嚴格的企業(yè)應用場景(比如金融、電信,、ERP,、CRM),但不僅僅限制于此,,PostgreSQL的json,,jsonb,hstore等數(shù)據(jù)格式,,特別適用于一些大數(shù)據(jù)格式的分析,;而MySQL更加適合業(yè)務邏輯相對簡單、數(shù)據(jù)可靠性要求較低的互聯(lián)網(wǎng)場景(比如google,、facebook,、alibaba),當然現(xiàn)在MySQL的在innodb引擎的大力發(fā)展,,功能表現(xiàn)良好,。

MySQL和PostgreSQL復雜的開源關系型數(shù)據(jù)庫,本文只是作者根據(jù)自己經(jīng)驗寫的對PG和MySQL的理解,,難免有不當之處,不當之處還請大家多多指正,。

MySQL在國內(nèi)的發(fā)展已然很成熟,,但是如果你轉(zhuǎn)向PostgreSQL,會發(fā)現(xiàn)不一樣的天地,,學院派的風格,,豐富的功能,肯定會給你帶來不一樣的驚喜,。

作者丨郭慶慧
來源丨東方龍馬(ID:OLM-FWH)

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多