圖-1 Mysql 標(biāo)志 MySQL的技術(shù)特點(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。
MaxDB是2003年SAP公司和MySQL AB公司合作之后SAP DB新的名稱。MaxDB是一款重量級的、獲得SAP R/3認(rèn)證,適宜于聯(lián)機(jī)事務(wù)處理和聯(lián)機(jī)分析處理等多種業(yè)務(wù)類型的高可用性、高可靠性和極具伸縮性的數(shù)據(jù)庫,支持大容量的用戶和并發(fā)業(yè)務(wù)操作,采用多線程多進(jìn)程的服務(wù)器設(shè)計,支持多處理器的應(yīng)用,并通過集群和熱部署提供高可靠性,支持TB級的海量數(shù)據(jù),支持企業(yè)級的數(shù)據(jù)同步和復(fù)制等復(fù)雜應(yīng)用。
2. PostgreSQL
PostgreSQL是一種運(yùn)行在Unix和Linux操作系統(tǒng)(在NT平臺借助Cygnus也可以運(yùn)行)平臺上的免費(fèi)的開放源碼的關(guān)系數(shù)據(jù)庫。最早是由美國加州大學(xué)伯克利分校開發(fā)的,開始只是作為一個演示系統(tǒng)發(fā)表,但是隨著時間的推移,逐步分發(fā),得到很多實(shí)際的應(yīng)用,才逐步流行起來。PostgreSQ的網(wǎng)址是http://www.postgresql.org/,最新版本是2005年10月4日發(fā)布的8.0.4。PostgreSQL的官方發(fā)音是:Post-gres-Q-L。 PostgreSQ的標(biāo)志是一個大象,見圖-2。
圖4 PostgreSQL 標(biāo)志 PostgreSQL的技術(shù)特點(diǎn):
1. 支持SQL。作為關(guān)系數(shù)據(jù)庫,它支持SQL89標(biāo)準(zhǔn)也支持部分SQL92大部分功能。
2. 有豐富的數(shù)據(jù)類型。許多數(shù)據(jù)類型是一些商業(yè)數(shù)據(jù)庫都沒有提供的。
3. 面向?qū)ο?。它包含了一些面向?qū)ο蟮募夹g(shù),如繼承和類。
4. 支持大數(shù)據(jù)庫,它不同于一般的桌面數(shù)據(jù)庫,能夠支持幾乎不受限制大小的數(shù)據(jù)庫,而且性能穩(wěn)定。
5. 方便集成web,提供一些接口方便 PHP,Perl等語言操作數(shù)據(jù)庫。
6. 事務(wù)處理。相對一些其他免費(fèi)數(shù)據(jù)庫如MySQL,他提供了事務(wù)處理,可以滿足一些商業(yè)領(lǐng)域的數(shù)據(jù)需要。
7. PostgreSQL運(yùn)行速度明顯低于MySQL。因?yàn)镸ySQL使用了線程,而PostgreSQL使用的是進(jìn)程。在不同線程之間的環(huán)境轉(zhuǎn)換和訪問公用的存儲區(qū)域顯然要比在不同的進(jìn)程之間要快得多。
3. Firebird
2000年7月,Borland(即現(xiàn)在的Inprise)公司公布了其數(shù)據(jù)庫產(chǎn)品Interbase的源代碼。Firebird數(shù)據(jù)庫就是從該數(shù)據(jù)庫中派生出來的。當(dāng)時,Interbase是與客戶/服務(wù)器版本的Delphi產(chǎn)品捆綁在一些銷售的?,F(xiàn)在,Interbase已經(jīng)變成了一只開放源碼中的“火鳥”。 Firebird 網(wǎng)址是http://firebird.sourceforge.net/ ,最新版本是2005年8月5日發(fā)布的1.5.3。的標(biāo)志是一只“火鳥”,見圖-3。
圖-3 Firebird 標(biāo)志 Firebird的技術(shù)特點(diǎn)
Firebird相對MySQL和PostgreSQL來說比較小,其RPM版本只有3.0MB。這也使其可以稱得上是理想的“嵌入式數(shù)據(jù)庫”,可用于與其它應(yīng)用程序服務(wù)器和應(yīng)用程序捆綁。Firebird具有大部分成熟數(shù)據(jù)庫所具有的功能,比如支持存儲過程、SQL兼容等。如果用戶有使用DB2或PostgreSQL的經(jīng)驗(yàn),就會發(fā)現(xiàn)Firebird與它們的語法非常相似,數(shù)據(jù)類型和數(shù)據(jù)處理方式也很類似。 Firebird的設(shè)計思想是小型、快速和最小化的管理。這對于需要一個數(shù)據(jù)庫用于存儲數(shù)據(jù),但又不想花太多時間來調(diào)整數(shù)據(jù)性能的開發(fā)人員很適用。實(shí)際上在很多情況下,我們并不需要存儲程序或復(fù)雜的表之間的關(guān)聯(lián)。這時會發(fā)現(xiàn)Firebird在大小和功能之間找到了一個理想的平衡點(diǎn)。
現(xiàn)在有兩個版本的Firebird服務(wù)器軟件可供下載,分別是Firebird Super Server和Firebird Classic Server。簡單來說,二者的區(qū)別在于設(shè)計的方法不同。Super Server使用線程同時為多個客戶連接提供服務(wù),而Classic Server使用的則是Interbase的方法,采用為每個連接提供一個獨(dú)立服務(wù)器進(jìn)程的方式。如果想對二者的區(qū)別有更多的了解,可查看http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_ss_vs_classic。對于“嵌入式數(shù)據(jù)庫”的用戶,這兩個版本之間沒有太大的區(qū)別。從理論上講,如果應(yīng)用程序的用戶很多,那么Super Server將是一個較好的選擇。
4. 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)址是:http://www.hughes.com.au ,最新版本是2005年5月8日發(fā)布的3.7。MSQL的標(biāo)志是一個鹿。見圖-2。
圖4 mSQL 標(biāo)志
mSQL的技術(shù)特點(diǎn):
安全性方面,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。
嵌入式數(shù)據(jù)庫
嵌入式數(shù)據(jù)庫的名稱來自其獨(dú)特的運(yùn)行模式。這種數(shù)據(jù)庫嵌入到了應(yīng)用程序進(jìn)程中,消除了與客戶機(jī)服務(wù)器配置相關(guān)的開銷。嵌入式數(shù)據(jù)庫實(shí)際上是輕量級的,在運(yùn)行時,它們需要較少的內(nèi)存。它們是使用精簡代碼編寫的,對于嵌入式設(shè)備,其速度更快,效果更理想。嵌入式運(yùn)行模式允許嵌入式數(shù)據(jù)庫通過 SQL 來輕松管理應(yīng)用程序數(shù)據(jù),而不依靠原始的文本文件。嵌入式數(shù)據(jù)庫還提供零配置運(yùn)行模式,這樣可以啟用其中一個并運(yùn)行一個快照。
5. Berkeley DB
像MySQL這類基于C/S結(jié)構(gòu)的關(guān)系型數(shù)據(jù)庫系統(tǒng)雖然代表著目前數(shù)據(jù)庫應(yīng)用的主流,但卻并不能滿足所有應(yīng)用場合的需要。有時我們需要的可能只是一個簡單的基于磁盤文件的數(shù)據(jù)庫系統(tǒng)。這樣不僅可以避免安裝龐大的數(shù)據(jù)庫服務(wù)器,而且還可以簡化數(shù)據(jù)庫應(yīng)用程序的設(shè)計。Berkeley DB正是基于這樣的思想提出來的。官方網(wǎng)址是:http://www.sleepycat.com/ ,最新版本是2005年8月5日發(fā)布的4.3。的標(biāo)志是一只“貓”,見圖-4。
圖5 Berkeley DB 標(biāo)志
的技術(shù)特點(diǎn):
Berkeley DB是一個開放源代碼的內(nèi)嵌式數(shù)據(jù)庫管理系統(tǒng),能夠?yàn)閼?yīng)用程序提供高性能的數(shù)據(jù)管理服務(wù)。應(yīng)用它程序員只需要調(diào)用一些簡單的API就可以完成對數(shù)據(jù)的訪問和管理。與常用的數(shù)據(jù)庫管理系統(tǒng)(如MySQL和Oracle等)有所不同,在Berkeley DB中并沒有數(shù)據(jù)庫服務(wù)器的概念。應(yīng)用程序不需要事先同數(shù)據(jù)庫服務(wù)建立起網(wǎng)絡(luò)連接,而是通過內(nèi)嵌在程序中的Berkeley DB函數(shù)庫來完成對數(shù)據(jù)的保存、查詢、修改和刪除等操作。
Berkeley DB為許多編程語言提供了實(shí)用的API接口,包括C、C++、Java、Perl、Tcl、Python和PHP等。所有同數(shù)據(jù)庫相關(guān)的操作都由Berkeley DB函數(shù)庫負(fù)責(zé)統(tǒng)一完成。這樣無論是系統(tǒng)中的多個進(jìn)程,或者是相同進(jìn)程中的多個線程,都可以在同一時間調(diào)用訪問數(shù)據(jù)庫的函數(shù)。而底層的數(shù)據(jù)加鎖、事務(wù)日志和存儲管理等都在Berkeley DB函數(shù)庫中實(shí)現(xiàn)。它們對應(yīng)用程序來講是完全透明的。俗話說:“麻雀雖小五臟俱全。”Berkeley DB函數(shù)庫本身雖然只有300KB左右,但卻能夠用來管理多達(dá)256TB的數(shù)據(jù),并且在許多方面的性能還能夠同商業(yè)級的數(shù)據(jù)庫系統(tǒng)相抗衡。就拿對數(shù)據(jù)的并發(fā)操作來說,Berkeley DB能夠很輕松地應(yīng)付幾千個用戶同時訪問同一個數(shù)據(jù)庫的情況。此外,如果想在資源受限的嵌入式系統(tǒng)上進(jìn)行數(shù)據(jù)庫管理,Berkeley DB可能就是惟一正確的選擇了。
Berkeley DB作為一種嵌入式數(shù)據(jù)庫系統(tǒng)在許多方面有著獨(dú)特的優(yōu)勢。首先,由于其應(yīng)用程序和數(shù)據(jù)庫管理系統(tǒng)運(yùn)行在相同的進(jìn)程空間當(dāng)中,進(jìn)行數(shù)據(jù)操作時可以避免繁瑣的進(jìn)程間通信,因此耗費(fèi)在通信上的開銷自然也就降低到了極低程度。其次,Berkeley DB使用簡單的函數(shù)調(diào)用接口來完成所有的數(shù)據(jù)庫操作,而不是在數(shù)據(jù)庫系統(tǒng)中經(jīng)常用到的SQL語言。這樣就避免了對結(jié)構(gòu)化查詢語言進(jìn)行解析和處理所需的開銷。
6. SQLite
SQLite 是 D. Richard Hipp 用 C 語言編寫的開源嵌入式數(shù)據(jù)庫引擎。它是完全獨(dú)立的,不具有外部依賴性。它是作為 PHP V4.3 中的一個選項(xiàng)引入的,構(gòu)建在 PHP V5 中。SQLite 支持多數(shù) SQL92 標(biāo)準(zhǔn),可以在所有主要的操作系統(tǒng)上運(yùn)行,并且支持大多數(shù)計算機(jī)語言。SQLite 還非常健壯。其創(chuàng)建者保守地估計 SQLite 可以處理每天負(fù)擔(dān)多達(dá) 100,00 次點(diǎn)擊率的 Web 站點(diǎn),并且 SQLite 有時候可以處理 10 倍于上述數(shù)字的負(fù)載。SQLite 的網(wǎng)址是,最新版本是2005年9月24日發(fā)布的3.2.7 。SQLite的標(biāo)志是一只羽毛,見圖-5。
圖6 SQLite標(biāo)志 SQLite的技術(shù)特點(diǎn):
SQLite 對 SQL92 標(biāo)準(zhǔn)的支持包括索引、限制、觸發(fā)和查看。SQLite 不支持外鍵限制,但支持原子的、一致的、獨(dú)立和持久 (ACID) 的事務(wù)(后面會提供有關(guān) ACID 的更多信息)。這意味著事務(wù)是原子的,因?yàn)樗鼈円赐耆珗?zhí)行,要么根本不執(zhí)行。事務(wù)也是一致的,因?yàn)樵诓灰恢碌臓顟B(tài)中,該數(shù)據(jù)庫從未被保留。事務(wù)還是獨(dú)立的,所以,如果在同一時間在同一數(shù)據(jù)庫上有兩個執(zhí)行操作的事務(wù),那么這兩個事務(wù)是互不干擾的。而且事務(wù)是持久性的,所以,該數(shù)據(jù)庫能夠在崩潰和斷電時幸免于難,不會丟失數(shù)據(jù)或損壞。SQLite 通過數(shù)據(jù)庫級上的獨(dú)占性和共享鎖定來實(shí)現(xiàn)獨(dú)立事務(wù)處理。這意味著當(dāng)多個進(jìn)程和線程可以在同一時間從同一數(shù)據(jù)庫讀取數(shù)據(jù),但只有一個可以寫入數(shù)據(jù)。在某個進(jìn)程或線程向數(shù)據(jù)庫執(zhí)行寫入操作之前,必須獲得獨(dú)占鎖定。在發(fā)出獨(dú)占鎖定后,其他的讀或?qū)懖僮鲗⒉粫侔l(fā)生。
總結(jié):
目前的開源數(shù)據(jù)庫還不能在功能和處理能力方面追上商業(yè)級產(chǎn)品,但價格的侵蝕力無法回避,開源數(shù)據(jù)庫迅速增長的市場份額甚至讓數(shù)據(jù)庫領(lǐng)域的三巨頭,Oracle、IBM、微軟都感到忐忑不安。開源數(shù)據(jù)庫的用戶在增長,并正在被越來越多的用戶所采用。在嵌入式數(shù)據(jù)庫領(lǐng)域,開源數(shù)據(jù)庫優(yōu)勢更加明顯。分析師稱開放源碼正在迅速被數(shù)據(jù)庫技術(shù)所采用。開放源碼“從2000年被懷疑到2005年已經(jīng)發(fā)展成為全球的主流技術(shù)”。低成本甚至免費(fèi)的開源數(shù)據(jù)庫時代即將來臨。