PostgreSQL叫板MySQL 開源數(shù)據(jù)庫的楚漢爭霸
原創(chuàng)【51CTO經(jīng)典譯文】當(dāng)談到開源數(shù)據(jù)庫時,MySQL獲得了業(yè)界大部分的注意力,51CTO數(shù)據(jù)庫頻道之前也曾報道過《MySQL等開源數(shù)據(jù)庫受熱捧 傳統(tǒng)數(shù)據(jù)庫何去何從》。MySQL是一個易于使用的數(shù)據(jù)庫,同時有許多開源的Web應(yīng)用程序都是直接在它上面開發(fā)的。不過也有異樣的聲音,比如PostgreSQL創(chuàng)始人:MySQL衰退屬必然。
另外一種主要的開源數(shù)據(jù)庫是PostgreSQL,雖然它也是眾所周知的,但是卻沒有獲得像MySQL所得到的認(rèn)可。這是很不幸的,因為在這兩者中,相比MySQL,PostgreSQL能提供更加安全、更加可靠、數(shù)據(jù)也更加完整的服務(wù)。
但是,這同樣也有一定的缺陷。PostgreSQL對于設(shè)置和使用的要求比較高,它利用的是特殊權(quán)限、底層操作系統(tǒng)的安全性以及數(shù)據(jù)庫內(nèi)提供的角色(roles)和特權(quán)。如果你對這些東西不夠了解的話,會使得PostgreSQL的使用變得困難。但一旦你掌握了它們,你就可以像使用MySQL一樣很容易的使用PostgreSQL。
與MySQL相類似,PostgreSQL的工作基于這樣一種原則,即特定的用戶有特定的數(shù)據(jù)訪問權(quán)限。在PostgreSQL里,這些被稱之為“角色(roles)”,通過采用CREATE ROLE, ALTER ROLE, and DROP ROLE這些語句可以創(chuàng)建和管理它們。和MySQL不同的是,這些“角色”可以映射和綁定到系統(tǒng)的用戶,這就意味著它可以利用不同形式的體系認(rèn)證:ident server authentication、LDAP server authentication、PAM和Kerberos。而對于本地連接,你也可以通過使用這些文件體系的權(quán)限來確定誰可以訪問Unix域套接字,以及它的位置。
PostgreSQL中,訪問控制的方法是使用pg_hba.conf。對于身份識別,也可采用pg_ident.conf;這可以用于將數(shù)據(jù)庫用戶映射到本地用戶。假如用戶“joe”是允許訪問的PostgreSQL用戶數(shù)據(jù)庫“joe”和“電子商務(wù)”。pg_hba.conf文件包含如下:
# TYPE | DATABASE | USER | CIDR-ADDRESS | METHOD |
local | all | all | ident map=esite | |
host | all | all | 127.0.0.1/32 | ident map=esite |
而pg_ident.conf可能會包括:
# MAPNAME | SYSTEM-USERNAME | PG-USERNAME |
esite
|
joe
|
joe
|
esite
|
joe
|
ecommerce
|
esite
|
postgres
|
joe
|
這就允許系統(tǒng)用戶“joe”作為“joe”或者“ecommerce.”來訪問數(shù)據(jù)庫。它也允許系統(tǒng)“postgres”用戶以“joe”的身份連接到數(shù)據(jù)庫。同時強(qiáng)化對于名字為“esite”識別方法的映射類型,如在pg_ident.conf中所定義的那樣。這就意味著在本地類型(Unix域套接字)和本地TCP/IP地址(127.0.0.1)中,只有joe和postgres能夠連接到數(shù)據(jù)庫。沒有其他的用戶有權(quán)來訪問它。
這種識別方法是一種很好的方式,用于控制哪一個本地用戶可以連接到哪一個數(shù)據(jù)庫。這種方法只對本地主機(jī)(TCP/IP 或者UNIX 域套接字)的連接起作用,而對于遠(yuǎn)程控制是無效的。
雖然對于那些習(xí)慣使用MySQL的人來說這看起來似乎有點混亂,但目前對具有這種認(rèn)證精度的數(shù)據(jù)庫的需求確是實實在在的。MySQL只支持基于登錄證書的身份驗證,而這些證書只由數(shù)據(jù)庫本身進(jìn)行儲存和管理。
另一方面,PostgreSQL不僅允許這種采用密碼機(jī)制的身份驗證,而且允許采用無密碼的身份驗證。這些驗證機(jī)制包括像討論的認(rèn)證機(jī)制、PAM(其中規(guī)定了許多有意思的驗證方案)以及LDAP 和 Kerberos。Kerberos是一種在MySQL使用多年的方式(事實上,出現(xiàn)于2004年11月的MySQL錯誤#6733就需要得到Kerberos的支持)。許多公司的偏好Kerberos和LDAP密碼存儲目錄,這就使得PostgreSQL成為了一個引人關(guān)注的數(shù)據(jù)庫。
還有其他很多特色使得PostgreSQL更加適用于企業(yè)。雖然安全性很重要,但除此之外PostgreSQL對于數(shù)據(jù)完整性、訪問控制、ACID規(guī)則以及其他一些重要方面的關(guān)注和支持,都很好的解釋了在眾多的數(shù)據(jù)庫管理者中為什么PostgreSQL享有如此高的贊譽(yù)。
相關(guān)閱讀
PostgreSQL是以加州大學(xué)伯克利分校計算機(jī)系開發(fā)的 POSTGRES,版本 4.2為基礎(chǔ)的對象關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(ORDBMS)。 POSTGRES 領(lǐng)先的許多概念只是在非常遲的時候才出現(xiàn)在商業(yè)數(shù)據(jù)庫中。
PostgreSQL 是最初的伯克利的代碼的一個開放源碼的繼承人。
它支持大部分 SQL:2003 標(biāo)準(zhǔn)并且提供了許多其他現(xiàn)代特性:復(fù)雜查詢、外鍵、觸發(fā)器、視圖、事務(wù)完整性、多版本并發(fā)控制
同樣,PostgreSQL 可以用許多方法擴(kuò)展,比如, 通過增加新的:數(shù)據(jù)類型、函數(shù)、操作符、聚集函數(shù)、索引方法、過程語言。并且,因為許可證的靈活,任何人都可以以任何目的免費使用,修改,和分發(fā) PostgreSQL, 不管是私用,商用,還是學(xué)術(shù)研究使用。
原文標(biāo)題:Why PostgreSQL is a better enterprise database than MySQL
【編輯推薦】