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