在一百年前,人類的第一臺(tái)計(jì)算機(jī)還沒能誕生,黑紙白字是人們記錄信息的唯一方式,檔案館是信息的集結(jié)地,數(shù)據(jù)分析還只能通過人工的分類,檢索來完成。1951年Univac系統(tǒng)使用磁帶和穿孔卡片作為數(shù)據(jù)存儲(chǔ),成為人類向大數(shù)據(jù)邁進(jìn)的里程碑。
從文件系統(tǒng)發(fā)展到數(shù)據(jù)庫系統(tǒng),人們對(duì)于數(shù)據(jù)信息處理能力越來越強(qiáng),出現(xiàn)了以做數(shù)據(jù)庫發(fā)家的甲骨文公司(即IOE中的O:Oracle),也有很多種免費(fèi)、開源的數(shù)據(jù)庫供我們使用。在現(xiàn)實(shí)生活中,包括Facebook、優(yōu)步等企業(yè)都選擇了開源、免費(fèi)的數(shù)據(jù)庫。其中,MySQL與Postgres已經(jīng)成為最受歡迎的兩種免費(fèi)數(shù)據(jù)庫,他們之間有有什么異同呢?7月末,優(yōu)步公司宣布將數(shù)據(jù)庫從Postgres切換到MySQL,個(gè)中原因又是什么呢?
從Postgres(PG)
到MySQL(以上圖片來自:eng.uber.com)
根據(jù)優(yōu)步官方解釋,此次更換數(shù)據(jù)庫的原因是Postgres數(shù)據(jù)復(fù)制效率低下,Postgres更新已有行的效率低于MySQL,Postgres需要重寫每一個(gè)行索引,而MySQL只更新改變的索引。也就是說,此次更換的原因并非孰優(yōu)孰劣,MySQL與Postgres各有自己的特點(diǎn)。
PostgreSQL
索引:PostgreSQL取決于存儲(chǔ)引擎。MyISAM:BTREE,InnoDB:BTREE。同時(shí)PG可以使用函數(shù)和條件索引。相比之下,MySQL支持B-樹、哈希、R-樹和Gist索引。在索引的復(fù)制能力方面MySQL更優(yōu),這也成為優(yōu)步更換數(shù)據(jù)庫的重要原因。
一致性:數(shù)據(jù)的一致性是衡量一個(gè)數(shù)據(jù)庫優(yōu)劣的重點(diǎn),PostgreSQL是完全支持ACID特性的,它對(duì)于數(shù)據(jù)庫訪問提供了強(qiáng)大的安全性 保證,充分利用了企業(yè)安全工具,如Kerberos與OpenSSL等。在MySQL中,開發(fā)人員可以將服務(wù)器設(shè)定為嚴(yán)格SQL模式才能達(dá)到目的,否則可能會(huì)產(chǎn)生不規(guī)范數(shù)據(jù)。
穩(wěn)定性:PostgreSQL的穩(wěn)定性極強(qiáng),Innodb等引擎在崩潰、斷電之類的災(zāi)難場(chǎng)景下抗打擊能力有了長(zhǎng)足進(jìn)步,然而很多MySQL用戶都遇到過Server級(jí)的數(shù)據(jù)庫丟失的場(chǎng)景——mysql系統(tǒng)庫是MyISAM的,相比之下,PG數(shù)據(jù)庫這方面要好一些。當(dāng)然,對(duì)于MySQL而言,不同的版本穩(wěn)定性也不盡相同,MySQL官方網(wǎng)站會(huì)提供穩(wěn)定版本下載,開發(fā)環(huán)境使用的MySQL版本應(yīng)該和生產(chǎn)中的大版本一致,用戶可選擇最新的穩(wěn)定版本。
MySQL
應(yīng)該說這兩種數(shù)據(jù)庫都是開源、免費(fèi)并能運(yùn)行在多個(gè)操作系統(tǒng)上的,無論是可擴(kuò)展性、數(shù)據(jù)的一致性和可靠性都比較穩(wěn)定。但二者在應(yīng)用環(huán)境、場(chǎng)景和部分特性上不盡相同。二者沒有完全意義上的好壞,從整個(gè)發(fā)展過程來講,最初PostgreSQL的發(fā)展速度較慢,導(dǎo)致MySQL一度成為霸主,如今,雙方各有優(yōu)劣,都成為不同應(yīng)用場(chǎng)景下的最優(yōu)數(shù)據(jù)庫。
自從MySQL被收購后,雖然仍保持開源的姿態(tài),但實(shí)際上都有專業(yè)的工程師在碼代碼,發(fā)展也十分迅速,并出現(xiàn)了Standard、Enterprise、Classic、Cluster、Embedded與Community等多個(gè)版本,Twitter、Facebook與Wikipedia都是MySQL的忠實(shí)用戶。PostgreSQL則一直標(biāo)榜自己為最先進(jìn)的開源數(shù)據(jù)庫,同時(shí)它又比MySQL出現(xiàn)的早了九年,讓它在教育和部分國外企業(yè)中備受歡迎,同時(shí)其數(shù)據(jù)一致性與完整性也是PostgreSQL的高優(yōu)先級(jí)特性。
總的來說,MySQL更為靈活,PostgreSQL更為可靠,用戶在選擇時(shí)一定要慎重,畢竟切換數(shù)據(jù)庫是一件費(fèi)力且不討好的事情。