數據庫是Linux應用中的主要部分。Linux上的主要數據庫包括:商業數據庫: Oracle、Sybase、DB2、Informix;自由軟件數據庫: MySQL、PostgreSQL、Msql等。
商業數據庫
由于商業數據庫有很好的技術支持,這里只簡單介紹一下。
(1) IBM DB2 (
http://www.software.ibm.com/data/db2/linux/)
(2) Informix (http://www.informix.com/informix/products/linux/) Informix目前支持Linux是Informix SE,ESQL/C,Connect.
(3) Oracle (http://www.oracle.com/iplatform/linux/) Oracle 目前支持Linux的是Oralce 8i 、9i。
(4) Sybase (http://www.sybase.com/products/databaseservers/linux/index.html) Sybase 目前支持Linux的是Adaptive Server Enterprise 11.9.2 。
(5)Ingres (http://www.cai.com/products/betas/ingres_linux/ingresii_qa.htm) CA目前支持Linux的是 Ingres II數據庫.
自由軟件數據庫
1、MYSQL
MysQL是瑞典的T.c.X公司負責開發和維護的,它是一個真正的多用戶、多線程SQL數據庫服務器。MysQL是以一個客戶機/服務器結構實現其功能的,它由一個服務器守護程序mysqld和很多不同的客戶程序和庫組成。SQL是一種標準化的語言,它使得存儲、更新和存取信息更容易。MySQL主要特點是快速、健壯和易用。MySQL的官方發音是“My Ess Que Ell”(不是MY-SEQUEL)。目前MySQL的最新版本是4.04,MySQL的網址是:http://www.mysql.com,MySQL的標志是一個小海豚。見圖-1。
圖-1
(1)MySQL的優點:
1. 它使用的核心線程是完全多線程,支持多處理器。
2. 有多種列類型:1、2、3、4、和8字節長度自有符號/無符號整數、FLOAT、DOUBLE、CHAR、VARCHAR、TEXT、BLOB、DATE、TIME、DATETIME、 TIMESTAMP、YEAR、和ENUM類型。
3. 它通過一個高度優化的類庫實現SQL函數庫并像他們能達到的一樣快速,通常在查詢初始化后不該有任何內存分配。沒有內存漏洞。
4. 全面支持SQL的GROUP BY和ORDER BY子句,支持聚合函數(COUNT()、COUNT(DISTINCT)、AVG()、STD()、SUM()、MAX()和MIN())。你可以在同一查詢中混來自不同數據庫的表。
5. 支持ANSI SQL的LEFT 0UTER JOIN和ODBC。
6. 所有列都有缺省值。你可以用INSERT插入一個表列的子集,那些沒用明確給定值的列設置為他們的決省值。
7. MySQL可以工作在不同的平臺上。支持C、C++、Java、Perl、PHP、Python和TCL API。
(2) MySQL的缺點:
1、 MySQL最大的缺點是其安全系統,主要是復雜而非標準,另外只有到調用mysqladmin來重讀用戶權限時才發生改變。
2、 MySQL的另一個主要的缺陷之一是缺乏標準的RI(Referential Integrity-RI)機制;Rl限制的缺乏(在給定字段域上的一種固定的范圍限制)可以通過大量的數據類型來補償。
3、 MySQL沒有一種存儲過程(Stored Procedure)語言,這是對習慣于企業級數據庫的程序員的最大限制。
4、 MySQL不支持熱備份。
5、 MySQL的價格隨平臺和安裝方式變化。Linux的MySQL如果由用戶自己或系統管理員而不是第三方安裝則是免費的,第三方案則必須付許可費。Unix或Linux 自行安裝 免費 、Unix或Linux 第三方安裝 200美元,
需要一個應用組件 200美元 。
2、mSQL
mSQL(mini SQL)是一個單用戶數據庫管理系統,個人使用免費,商業使用收費。由于它的短小精悍,使其開發的應用系統特別受到互聯網用戶青睞。mSQL(mini SQL)是一種小型的關系數據庫,性能不是太好,對SQL語言的支持也不夠完全,但在一些網絡數據庫應用中是足夠了。 由于mSQL較簡單,在運行簡單的SQL語句時速度比MySQL略快,而MySQL在線程和索引上下了功夫,運行復雜的SQL語句時比mSQL,PostgreSQL等都 要快一些。MSQL的網址是:www.hughes.com.au ,最新版本是3.3。MSQL的標志是一個山羊。見圖-2。
圖-2
安全性方面,mSQL通過ACL文件設定各主機上各用戶的訪問權限,缺省是 全部可讀/寫。mSQL缺乏 ANSI SQL 的大多數特征,它僅僅實現了一個最最少的API,沒有事務和參考完整性。mSQL與Lite(一種類似C的腳本語言,與分發一起發行)緊密結合,可以得到一個稱為 W3-mSQL的一個網站集成包,它是JDBC、ODBC、Perl和PHP API。
3、PostgreSQL
PostgreSQL是屬于"對象-關連"式的數據庫管理系統 (ORDBMS)。PostgreSQL 的前身叫做 Ingres,是于 1977年至1985年間由著名的柏克萊大學所發展出來的。由于PostgreSQL是用C語言寫成的。所以在不同的Unix平臺上移植非常方便。PostgreSQL可以在Linux、FreeBSD、SCO Unix、HP Unix、Solaris、AIX等平臺上運行。PostgreSQ的網址是http://www.postgresql.org/,最新版本是7.2。 PostgreSQL的官方發音是 :Post-gres-Q-L。 PostgreSQ的標志是一個大象。見圖-3
圖-3
(1)PostgreSQL的主要優點:
1、對事務的支持與MySQL相比,經歷了更為徹底的測試。
2、PostgreSQL支持存儲過程,對于一個嚴肅的商業應用來說,作為數據庫本身,有眾多的商業邏輯的存在,此時使用存儲過程可以在較少地增加數據庫服務器的負擔的前提下,對這樣的商業邏輯進行封裝,并可以利用數據庫服務器本身的內在機制對存儲過程的執行進行優化。此外存儲過程的存在也避免了在網絡上大量的原始的SQL語句的傳輸,這樣的優勢是顯而易見的。
3、PostgreSQL支持視圖,視圖的存在同樣可以最大限度地利用數據庫服務器內在的優化機制。而且對于視圖權限的合理使用,事實上可以提供行級別的權限,這是MySQL的權限系統所無法實現的。
4、PostgreSQL支持觸發器,觸發器的存在不可避免的會影響數據庫運行的效率,但是與此同時,觸發器的存在也有利于對商業邏輯的封裝,可以減少應用程序中對同一商業邏輯的重復控制。合理地使用觸發器也有利于保證數據的完整性。
5、PostgreSQL支持約束。約束的作用更多地表現在對數據完整性的保證上,合理地使用約束,也可以減少編程的工作量。
6、PostgreSQL支持子查詢。雖然在很多情況下在SQL語句中使用子查詢效率低下,而且絕大多數情況下可以使用帶條件的多表連接來替代子查詢,但是子查詢的存在在很多時候仍然不可避免。而且使用子查詢的SQL語句與使用帶條件的多表連接相比具有更高的程序可讀性。
7、PostgreSQL支持R-trees這樣可擴展的索引類型,可以更方便地處理一些特殊數據。 支持ODBC。
8、PostgreSQL可以更方便地使用UDF(用戶定義函數)進行擴展。
(2)PostgreSQL的主要缺點:
1、PostgreSQL運行速度明顯低于MySQL,因為MySQL使用了線程,而PostgreSQL使用的是進程。在不同線程之間的環境轉換和訪問公用的存儲區域顯然要比在不同的進程之間要快得多。
2、PostgreSQL目前仍不完全適應24×7小時運行,這是因為你必須每隔一段時間運行一次VACUUM。
3、PostgreSQL在權限系統上不過完善。PostgreSQL只支持對于每一個用戶在一個數據庫上或一個數據表上的INSERT、SELECT和UPDATE/DELETE的授權,而MySQL允許你定義一整套的不同的數據級、表級和列級的權限。
4、由于PostgreSQL生成每頁的速度要比MySQL慢,所以 不足以用來作高流量網站應用。Postgres沒有與MySQL的mysql_insertid()等價的函數調用。如果在MySQL的數據庫中插入一行數據,MySQL將返回這行主關鍵字的ID。而在Postgres中完成這樣一個操作需要繞許多圈子,如果大量應用就會降低效率。
5、PostgreSQL 還欠缺一些比較高端的數據庫管理系統需要的特性,比如對大對象的有效支持,以及查詢緩沖等提高數據庫性能的機制等。
Linux下的數據庫系統還有一些,如dbm 是linux下的一種非關系數據庫,它實際上是文件形式 的哈希表,每一對名字/值項稱為一個記錄. dbm有好幾個版本,如ndbm,gdbm等。
總結:以上我們主要介紹了Linux環境下的一些主要的數據庫,其他自由軟件數據庫還有 Gadfly 、BeagleSQL、Berkely DB、GNU SQL等。你可以到http://www.linux.org網站查看更多的相關內容。
|