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