国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
神仙打架:PG和MySQL到底選啥?

本文介紹 MySQL 和 PostgreSQL 的一些特性對(duì)比,讓大家了解二者的優(yōu)劣,更好的做出選擇。

圖片來(lái)自 Pexels


當(dāng)前國(guó)內(nèi)的現(xiàn)狀,互聯(lián)網(wǎng)公司使用 MySQL 的較多,PostgreSQL 的使用比例反而不高,但相信看到 PG 的新特性后,你會(huì)愛(ài)上她。當(dāng)然 MySQL 作為最流行的數(shù)據(jù)庫(kù),依然會(huì)吸引大部分人的眼球。


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

當(dāng)然 PG 功能完善和強(qiáng)大是最早始于 9 版本,在 10 版本快速發(fā)展,增加很多功能和特性。


PostgreSQL 是完全由社區(qū)驅(qū)動(dòng)的開(kāi)源項(xiàng)目,他的核心代碼,都是由社區(qū)維護(hù),商用版本都是基于 PG 做的二次開(kāi)發(fā)。


MySQL 聲稱自己是最流行的開(kāi)源數(shù)據(jù)。看現(xiàn)在國(guó)內(nèi)的現(xiàn)狀,稱得上名副其實(shí)。MySQL 被賣幾次后,最終落到 Oracle 公司的囊中。


正是因此,MySQL 之父 Monty,修改了 MySQL 的源代碼,創(chuàng)立了 MariaDB 分支。

說(shuō)到這里當(dāng)然不得不提另一個(gè)重要的分支,Percana 公司的 Percona Server。


Percona 公司更擅長(zhǎng) MySQL 運(yùn)維,開(kāi)發(fā)了很多非常實(shí)用運(yùn)維工具,而且都已經(jīng)開(kāi)源,并回饋給社區(qū),像 XtraBackup 和 pt-Toolkits 工具。


簡(jiǎn)單對(duì)比 MySQL 和 PostgreSQL 發(fā)現(xiàn),MySQL 背后是成熟的商業(yè)公司(Oracle 有自己的 MySQL 企業(yè)版,收費(fèi),有許多社區(qū)版沒(méi)有的特性),而 PostgreSQL 背后是一個(gè)龐大的志愿開(kāi)發(fā)組。


相比而言,PostgreSQL 的商業(yè)性質(zhì)更少一些,他沒(méi)有所謂的 PostgreSQL 企業(yè)版,但是存在基于 PG 開(kāi)發(fā)的一些企業(yè)級(jí)的 PG 數(shù)據(jù)庫(kù)。


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


1

開(kāi)源方面


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


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


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

MySQL:World’s Most Popular Open Source Database。

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


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

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


2

ACID 支持方面

PostgreSQL 支持事務(wù)的強(qiáng)一致性,事務(wù)保證性好,完全支持 ACID 特性。


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

3

SQL 標(biāo)準(zhǔn)的支持方面


PostgreSQL 幾乎支持所有的 SQL 標(biāo)準(zhǔn),支持類型相當(dāng)豐富。


MySQL 只支持部分 SQL 標(biāo)準(zhǔn),相比于 PG 支持類型稍弱。


4

復(fù)制


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


復(fù)制模式:

  • 一主一備

  • 一主多備

  • 級(jí)聯(lián)復(fù)制

  • 循環(huán)復(fù)制

  • 主主復(fù)制

數(shù)據(jù)流轉(zhuǎn)優(yōu)勢(shì):通過(guò) Canal 增量數(shù)據(jù)的訂閱和消費(fèi),可以同步數(shù)據(jù)到 Kafka,通過(guò) Kafka 做數(shù)據(jù)流轉(zhuǎn)。
MySQL 所有的高可用方案都是基于 binlog 做的同步,以及基于 MySQL 的分布式數(shù)據(jù)也是基于 MySQL 的 binlog 實(shí)現(xiàn),binlog 是 MySQL 生態(tài)圈最基本技術(shù)實(shí)現(xiàn)。
PostgreSQL 可以做到同步,異步,半同步復(fù)制,以及基于日志邏輯復(fù)制,可以實(shí)現(xiàn)表級(jí)別的訂閱和發(fā)布。
復(fù)制模式:
  • 一主一備

  • 一主多備

  • 級(jí)聯(lián)復(fù)制

  • 熱備庫(kù)/流復(fù)制

  • 邏輯復(fù)制

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

5

并發(fā)控制

PostgreSQL 通過(guò)其 MVCC 實(shí)現(xiàn)有效地解決了并發(fā)問(wèn)題,從而實(shí)現(xiàn)了非常高的并發(fā)性。
PG 新老數(shù)據(jù)一起存放的基于 XID 的 MVCC 機(jī)制,新老數(shù)據(jù)一起存放,需要定時(shí)觸發(fā) VACUUM,會(huì)帶來(lái)多余的 IO 和數(shù)據(jù)庫(kù)對(duì)象加鎖開(kāi)銷,引起數(shù)據(jù)庫(kù)整體的并發(fā)能力下降。而且 VACUUM 清理不及時(shí),還可能會(huì)引發(fā)數(shù)據(jù)膨脹。
當(dāng)然 PostgreSQL 還有一點(diǎn)影響比較,為了保證事務(wù)的強(qiáng)一致性,未決事務(wù)會(huì)影響所有表 VACUUM 清理,導(dǎo)致表膨脹。
MySQL 僅在 InnoDB 中支持 MVCC。InnoDB 的基于回滾段實(shí)現(xiàn)的 MVCC 機(jī)制,但是 MySQL 的間隙鎖影響較大,鎖定數(shù)據(jù)較多。

6

性能

PostgreSQL

①PostgreSQL 廣泛用于讀寫速度高和數(shù)據(jù)一致性高的大型系統(tǒng)。此外,它還支持各種性能優(yōu)化,當(dāng)然這些優(yōu)化僅在商業(yè)解決方案中可用,例如地理空間數(shù)據(jù)支持,沒(méi)有讀鎖定的并發(fā)性等等。
②PostgreSQL 性能最適用于需要執(zhí)行復(fù)雜查詢的系統(tǒng)。

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

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

MySQL

①M(fèi)ySQL 是廣泛選擇的基于 Web 的項(xiàng)目,需要數(shù)據(jù)庫(kù)只是為了簡(jiǎn)單的數(shù)據(jù)事務(wù)。但是,當(dāng)遇到重負(fù)載或嘗試完成復(fù)雜查詢時(shí),MySQL 通常會(huì)表現(xiàn)不佳。

②MySQL 的讀取速度,在 OLTP 系統(tǒng)中表現(xiàn)良好。
③MySQL+InnoDB 為 OLTP 場(chǎng)景提供了非常好的讀/寫速度??傮w而言,MySQL 在高并發(fā)場(chǎng)景下表現(xiàn)良好。

④MySQL 是可靠的,并且與商業(yè)智能應(yīng)用程序配合良好,因?yàn)樯虡I(yè)智能應(yīng)用程序通常讀取很多。

7

高可用技術(shù)的實(shí)現(xiàn)


PostgreSQL


①基于流復(fù)制的異步、同步主從。

②基于流復(fù)制的 Keepalive。

③基于流復(fù)制的 Repmgr。
④基于流復(fù)制的 patroni+etcd。
⑤共享存儲(chǔ) HA(corosync+pacemaker)。

⑥Postgres-XC。

⑦Postgres-XL。

⑧中間件實(shí)現(xiàn):pgpool、pgcluster、slony、plploxy。

MySQL


①主從復(fù)制。

②主主復(fù)。

③MHA。

④LVS+KEEPALIVE。
⑤MGR 分布式數(shù)據(jù)庫(kù),多點(diǎn)寫入[不建議],基于 Paxos 協(xié)議。

⑥PXC 分布式數(shù)據(jù)庫(kù),多點(diǎn)寫入[不建議],基于令牌環(huán)協(xié)議。
⑦INNODB CLUSTER[8.0 新技術(shù),基于 MGR 實(shí)現(xiàn),上層封裝命令],基于 Paxos 協(xié)議。

⑧中間件實(shí)現(xiàn):Mycat。

8

外部數(shù)據(jù)源


PostgreSQL FDW:[foreign-data wrapper 的一個(gè)簡(jiǎn)稱,可以叫外部封裝。

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

9

數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)類型

PG 主表采用堆表存放,存放的數(shù)據(jù)量較大,數(shù)據(jù)訪問(wèn)方式類似于 Oracle 的堆表。
MySQL 采用索引組織表,MySQL 必須有主鍵索引,所有的數(shù)據(jù)訪問(wèn)都是通過(guò)主鍵實(shí)現(xiàn),二級(jí)索引訪問(wèn)時(shí),需要掃描兩遍索引(主鍵和二級(jí)索引)。

10

PostgreSQL 與 MySQL 優(yōu)劣對(duì)比


PostgreSQL 相對(duì)于 MySQL 的優(yōu)勢(shì)


①在 SQL 的標(biāo)準(zhǔn)實(shí)現(xiàn)上要比 MySQL 完善,而且功能實(shí)現(xiàn)比較嚴(yán)謹(jǐn)。 

②存儲(chǔ)過(guò)程的功能支持要比 MySQL 好,具備本地緩存執(zhí)行計(jì)劃的能力。

③對(duì)表連接支持較完整,優(yōu)化器的功能較完整,支持的索引類型很多,復(fù)雜查詢能力較強(qiáng)。

④PG 主表采用堆表存放,MySQL 采用索引組織表,能夠支持比 MySQL 更大的數(shù)據(jù)量。 
⑤PG 的主備復(fù)制屬于物理復(fù)制,相對(duì)于 MySQL 基于 binlog 的邏輯復(fù)制,數(shù)據(jù)的一致性更加可靠,復(fù)制性能更高,對(duì)主機(jī)性能的影響也更小。
⑥MySQL 的存儲(chǔ)引擎插件化機(jī)制,存在鎖機(jī)制復(fù)雜影響并發(fā)的問(wèn)題,而 PG 不存在。 

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

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

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

⑩PostgreSQL 源代碼寫的很清晰,易讀性比 MySQL 強(qiáng)太多了。 

?PostgreSQL 通過(guò) PostGIS 擴(kuò)展支持地理空間數(shù)據(jù)。地理空間數(shù)據(jù)有專用的類型和功能,可直接在數(shù)據(jù)庫(kù)級(jí)別使用,使開(kāi)發(fā)人員更容易進(jìn)行分析和編碼。 
?可擴(kuò)展型系統(tǒng),有豐富可擴(kuò)展組件,作為 Contribute 發(fā)布。 

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

?PostgreSQL 完全免費(fèi),而且是 BSD 協(xié)議,如果你把 PostgreSQL 改一改,然后再拿去賣錢,也沒(méi)有人管你。

這一點(diǎn)很重要,這表明了 PostgreSQL 數(shù)據(jù)庫(kù)不會(huì)被其它公司控制。相反,MySQL 現(xiàn)在主要是被 Oracle 公司控制。

MySQL 相對(duì)于 PG 的優(yōu)勢(shì)

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

②MySQL 采用索引組織表,這種存儲(chǔ)方式非常適合基于主鍵匹配的查詢、刪改操作,但是對(duì)表結(jié)構(gòu)設(shè)計(jì)存在約束。

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

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

⑤MySQL 的存儲(chǔ)引擎插件化機(jī)制,使得它的應(yīng)用場(chǎng)景更加廣泛,比如除了 InnoDB 適合事務(wù)處理場(chǎng)景外,Myisam 適合靜態(tài)數(shù)據(jù)的查詢場(chǎng)景。

11

總結(jié)

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

MySQL 和 PostgreSQL 復(fù)雜的開(kāi)源關(guān)系型數(shù)據(jù)庫(kù),本文只是作者根據(jù)自己經(jīng)驗(yàn)寫的對(duì) PG 和 MySQL 的理解,難免有不當(dāng)之處,不當(dāng)之處還請(qǐng)大家多多指正。
MySQL 在國(guó)內(nèi)的發(fā)展已然很成熟,但是如果你轉(zhuǎn)向 PostgreSQL,會(huì)發(fā)現(xiàn)不一樣的天地,學(xué)院派的風(fēng)格,豐富的功能,肯定會(huì)給你帶來(lái)不一樣的驚喜。

大咖來(lái)了


【時(shí)間】7 月 15,晚 8:00 

【講師】李洋·雪松控股集團(tuán)首席信息官

【直播】“金融安全 3.0”:新金融時(shí)代安全風(fēng)險(xiǎn)剖析與防范

【福利】答題贈(zèng)書—《決勝金融安全 3.0 時(shí)代:新金融+新科技+新安全》

作者:郭慶慧

編輯:陶家龍

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
神仙打架:PostgreSQL和MySQL誰(shuí)武藝超群?
你了解世界上功能最強(qiáng)大的開(kāi)源數(shù)據(jù)庫(kù)嗎?
PostgreSQL一專多長(zhǎng)的全棧數(shù)據(jù)庫(kù)
PostgreSQL與MySQL比較
2020年10月DB-Engines排行:商業(yè)開(kāi)源平分秋色 并駕齊驅(qū)四大天王
[使用Python監(jiān)控Oracle索引]將Oracle已使用過(guò)索引存入MySQL中
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服