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

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

什么是 CouchDB?

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

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

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

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

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

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

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

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

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

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

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

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

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