您的位置:軟件測試 > 開源軟件測試 > 開源軟件測試解決方案 >
探索 CouchDB 針對 Web 應(yīng)用程序的面向文檔數(shù)據(jù)庫
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時間:[ 2012/12/14 15:47:59 ] 推薦標(biāo)簽:

關(guān)系數(shù)據(jù)庫定義的結(jié)構(gòu)非常嚴(yán)格,并且也通過嚴(yán)格的方式維護(hù)軟件應(yīng)用程序的數(shù)據(jù)。Apache 的開源 CouchDB 為儲存數(shù)據(jù)提供一種新方法,即使用不需要模式的面向文檔的數(shù)據(jù)庫模型。與關(guān)系模型高度結(jié)構(gòu)化的數(shù)據(jù)儲存不同,CouchDB 使用基于 JavaScript 的視圖模型生成結(jié)構(gòu)化聚合,以半結(jié)構(gòu)化的方式儲存數(shù)據(jù),并從這些半結(jié)構(gòu)化文檔報告結(jié)果。CouchDB 一開始是以 Web 應(yīng)用程序為主要目標(biāo)而開發(fā)的,并且希望發(fā)展成為用于開發(fā) Web 應(yīng)用程序的標(biāo)準(zhǔn)數(shù)據(jù)庫。

什么是 CouchDB?

CouchDB 是一個開源的面向文檔的數(shù)據(jù)庫管理系統(tǒng),可以通過 RESTful JavaScript Object Notation (JSON) API 訪問。術(shù)語 “Couch” 是 “Cluster Of Unreliable Commodity Hardware” 的首字母縮寫,它反映了 CouchDB 的目標(biāo)具有高度可伸縮性,提供了高可用性和高可靠性,即使運(yùn)行在容易出現(xiàn)故障的硬件上也是如此。CouchDB 初是用 C++ 編寫的,但在 2008 年 4 月,這個項目轉(zhuǎn)移到 Erlang OTP 平臺進(jìn)行容錯測試。

CouchDB 可以安裝在大部分 POSIX 系統(tǒng)上,包括 Linux® 和 Mac OS X。盡管目前還不正式支持 Windows®,但現(xiàn)在已經(jīng)著手編寫 Windows 平臺的非官方二進(jìn)制安裝程序。CouchDB 可以從源文件安裝,也可以使用包管理器安裝(比如在 Mac OS X 上使用 MacPorts)。

CouchDB 是一個 Apache Software Foundation 開源項目,根據(jù) Apache 許可 V2.0 發(fā)布。這個開源許可允許在其他軟件中使用這些源代碼,并根據(jù)需要進(jìn)行修改,但前提是遵從版權(quán)需知和免責(zé)聲明。與許多其他開源許可一樣,這個許可允許用戶根據(jù)需求使用、修改和分發(fā)該軟件。不一定由同一個許可包含所有修改,因為我們僅維護(hù)一個 Apache 代碼使用許可需知。

面向文檔的數(shù)據(jù)庫和關(guān)系數(shù)據(jù)庫之間的區(qū)別

對很多人而言,剛接觸面向文檔數(shù)據(jù)庫管理系統(tǒng)這個概念時很難理解它,尤其是長期與關(guān)系數(shù)據(jù)庫打交道的人員。這是因為這兩個模型相似的地方很少。

顧名思義,面向文檔數(shù)據(jù)庫是由一系列自包含的文檔組成的。這意味著相關(guān)文檔的所有數(shù)據(jù)都儲存在該文檔中 — 而不是關(guān)系數(shù)據(jù)庫的關(guān)系表中。事實上,面向文檔的數(shù)據(jù)庫中根本不存在表、行、列或關(guān)系。這意味著它們是與模式無關(guān)的;不需要在實際使用數(shù)據(jù)庫之前定義嚴(yán)格的模式。如果某個文檔需要添加一個新字段,它僅需包含該字段,從而不影響到數(shù)據(jù)庫中的其他文檔。因此,文檔不必為沒有值的字段儲存空數(shù)據(jù)值。

即將推出的書 CouchDB: The Definitive Guide(見 參考資料)使用名片作為 “現(xiàn)實的文檔”,并介紹了與關(guān)系數(shù)據(jù)庫相比,如何在面向文檔的數(shù)據(jù)庫中描述它。在關(guān)系數(shù)據(jù)庫中,您需要使用 4 個以上的表來儲存這些數(shù)據(jù):一個 “Person” 表、一個 “Company” 表、一個 “Contact Details” 表和一個用于儲存名片本身的表。這些表都有嚴(yán)格定義的列和鍵,并且使用一系列的連接(join)組裝數(shù)據(jù)。

雖然這樣做的優(yōu)勢是每段數(shù)據(jù)都有一個惟一真實的版本,但這為以后的修改帶來不便。此外,也不能修改其中的記錄以用于不同的環(huán)境。例如,一個人可能有傳真號碼,而另一個人沒有。在名片上不應(yīng)該顯示 “傳真:沒有”,而是忽略任何關(guān)于傳真的細(xì)節(jié)。

在面向文檔的數(shù)據(jù)庫中,每個名片都儲存在各自的文檔中,并且每個文檔都可以定義它需要使用的字段。因此,對于沒有傳真號碼的人而言,不需要定義傳真的值,而對于有傳真號碼的人,則根據(jù)他們的意愿定義該值。

這兩種數(shù)據(jù)庫的另一個不同點(diǎn)是惟一標(biāo)識符的儲存。在關(guān)系數(shù)據(jù)庫中通常可以使用主鍵,它由一個自動遞增特性或序列生成器生成。當(dāng)然,這些標(biāo)識符僅相對于所使用的表或數(shù)據(jù)庫是惟一的 — 其他表或數(shù)據(jù)庫還可以使用它們。如果同時對不同網(wǎng)絡(luò)上的兩個數(shù)據(jù)庫執(zhí)行更新操作,這兩個數(shù)據(jù)庫不會同時準(zhǔn)確地獲取下一個惟一標(biāo)識符。CouchDB 沒有自動遞增或序列特性。相反,它為每個文檔分配一個通用惟一標(biāo)識符(Universally Unique Identifier,UUID),這杜絕了其他數(shù)據(jù)庫意外地選擇相同的惟一標(biāo)識符的情況。

面向文檔數(shù)據(jù)庫和關(guān)系數(shù)據(jù)庫的另一個重要區(qū)別是面向文檔數(shù)據(jù)庫不支持連接。因此 CouchDB 中沒有主鍵和外鍵,沒有基于連接的鍵。這并不意味著不能從 CouchDB 數(shù)據(jù)庫獲取一組關(guān)系數(shù)據(jù)。一個稱為視圖的特性允許您為沒有在數(shù)據(jù)庫中定義的文檔創(chuàng)建一種任意關(guān)系。這意味著您能夠獲得典型的 SQL 聯(lián)合查詢的所有好處,但又不需要在數(shù)據(jù)庫層預(yù)定義它們的關(guān)系。

一定要注意,雖然面向文檔數(shù)據(jù)庫的操作方式不同于關(guān)系數(shù)據(jù)庫,但這并不意味著它們是可以替換的。CouchDB 的目的并不是替換關(guān)系數(shù)據(jù)庫,而是為那些更適合使用面向文檔模型(而不是傳統(tǒng)的關(guān)系數(shù)據(jù)模型)的項目提供一種選擇,比如 wikis、博客和文檔管理系統(tǒng)。

上一頁12下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd