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