您的位置: 首頁 >互聯(lián)網(wǎng) >

網(wǎng)絡(luò)資訊:CouchDB是什么意思

2022-08-09 02:01:21 編輯:邵曼葦 來源:
導(dǎo)讀 Apache CouchDB是一個(gè)開源數(shù)據(jù)庫,專注于易用性。它是一個(gè)使用JSON作為存儲(chǔ)格式,JavaScript作為查詢語言,MapReduce和HTTP作為API的面向...

Apache CouchDB是一個(gè)開源數(shù)據(jù)庫,專注于易用性。它是一個(gè)使用JSON作為存儲(chǔ)格式,JavaScript作為查詢語言,MapReduce和HTTP作為API的面向文檔的NoSQL數(shù)據(jù)庫。其中一個(gè)顯著的功能就是多主復(fù)制。

Apache CouchDB 是一個(gè)開源數(shù)據(jù)庫,專注于易用性和成為”完全擁抱 web 的數(shù)據(jù)庫“。它是一個(gè)使用 JSON 作為存儲(chǔ)格式,JavaScript 作為查詢語言,MapReduce 和 HTTP 作為 API 的面向文檔的 NoSQL 數(shù)據(jù)庫。其中一個(gè)顯著的功能就是多主復(fù)制。

CouchDB 的第一個(gè)版本發(fā)布在 2005 年,在 2008 年成為了 Apache 的項(xiàng)目。

不同于關(guān)系型數(shù)據(jù)庫,CouchDB 沒有將數(shù)據(jù)和關(guān)系存儲(chǔ)在表格里。替代的,每個(gè)數(shù)據(jù)庫是一個(gè)獨(dú)立的文檔集合。每一個(gè)文檔維護(hù)其自己獨(dú)立的數(shù)據(jù)和自包涵的 schema。一個(gè)應(yīng)用程序可能會(huì)訪問多個(gè)數(shù)據(jù)庫,比如其中一個(gè)位于用戶的手機(jī)上,另一個(gè)位于在遠(yuǎn)程的服務(wù)器上。文檔的元數(shù)據(jù)包含版本信息,讓其能夠合并可能因?yàn)閿?shù)據(jù)庫鏈接丟失導(dǎo)致的任何差異。

CouchDB 實(shí)現(xiàn)了一個(gè)多版本并發(fā)控制(MVCC)形式,用來避免在數(shù)據(jù)庫寫操作的時(shí)候?qū)ξ募M(jìn)行加鎖。沖突留給應(yīng)用程序去解決。解決一個(gè)沖突的通用操作的是首先合并數(shù)據(jù)到其中一個(gè)文檔,然后刪除舊的數(shù)據(jù)。

其他功能包括文檔級(jí)別的 ACID 語義和最終一致性,MapReduce,復(fù)制(Replication)。它還支持通過一個(gè)做 Futon 的內(nèi)置 web 應(yīng)用程序來進(jìn)行數(shù)據(jù)庫管理。

歷史

CouchDB(Couch 是 cluster of unreliable commodity hardware 的首字母縮寫)是前 IBM 的 Lotus Notes 開發(fā)者 Damien Katz 創(chuàng)建于 2005 年的一個(gè)項(xiàng)目。Damien Katz 將其定義為“面向大規(guī)模可擴(kuò)展對(duì)象數(shù)據(jù)庫的存儲(chǔ)系統(tǒng)”。他對(duì)該數(shù)據(jù)庫的目標(biāo)是讓其成為互聯(lián)網(wǎng)的數(shù)據(jù)庫,其從底層的設(shè)計(jì)就支持部署 web 應(yīng)用程序。他自己通過將近兩年的時(shí)間創(chuàng)建了該項(xiàng)目同時(shí)將其作為開源項(xiàng)目在 GNU General Public License 下發(fā)布。

在 2008 年 2 月,其成為 Apache Incubator 項(xiàng)目,同時(shí)其許可協(xié)議變更為 Apache License。幾個(gè)月后,其升級(jí)為頂級(jí)項(xiàng)目。這促使了其第一個(gè)穩(wěn)定版在 2010 年 7 月發(fā)布。

在 2012 年初期,Damien Katz 離開了項(xiàng)目專注于 Couchbase Server。不過該項(xiàng)目還在繼續(xù)進(jìn)行中,在 2012 年 4 月發(fā)布了 1.2 版本,2013 年 4 月發(fā)布了 1.3 版本。

CouchDB 將數(shù)據(jù)存儲(chǔ)為“文檔”,其為用 JSON 表示的有一個(gè)或者多個(gè)字段/值的對(duì)。字段的值可以是簡(jiǎn)單的東西比如字符串,數(shù)字,或者時(shí)間;但是數(shù)組和字典同樣也可以使用。CouchDB 中的每一個(gè)文檔有一個(gè)唯一的 id 但是沒有必須的文檔 schema。

CouchDB 提供了 ACID 語義,其通過多版本并發(fā)控制的形式來實(shí)現(xiàn),意味著 CouchDB 能夠處理大量的并發(fā)讀寫而不會(huì)產(chǎn)生沖突。

Map/Reduce 視圖 和 索引

存儲(chǔ)的數(shù)據(jù)通過視圖進(jìn)行組裝。在 CouchDB 中,每一個(gè)視圖都是由作為 map/reduce 操作中的 Map 部分的 JavaScript 函數(shù)構(gòu)成。該函數(shù)接受一個(gè)文檔并且將其轉(zhuǎn)換為一個(gè)單獨(dú)的值來返回。CouchDB 能夠?qū)σ晥D進(jìn)行索引,同時(shí)在文檔新增,修改,刪除的時(shí)候?qū)@些索引進(jìn)行更新。

支持復(fù)制的分布式架構(gòu)

CouchDB 的設(shè)計(jì)基于支持雙向的復(fù)制(同步)和離線操作。這意味著多個(gè)復(fù)制能夠?qū)ν粩?shù)據(jù)有其自己的拷貝,可以進(jìn)行修改,之后將這些變更進(jìn)行同步。

所有的數(shù)據(jù)都有一個(gè)唯一的通過 HTTP 暴露出來的 URI。REST 使用 HTTP 方法 POST,GET,PUT 和 DELETE 來操作對(duì)應(yīng)的四個(gè)基本 CRUD(Create,Read,Update,Delete)操作來操作所有的資源。

最終一致性

CouchDB 保證最終一致性,使其能夠同時(shí)提供可用性和分割容忍。

離線支持

CoucbDB 能夠同步復(fù)制到可能會(huì)離線的終端設(shè)備(比如智能手機(jī)),同時(shí)當(dāng)設(shè)置再次在線時(shí)處理數(shù)據(jù)同步。

CouchDB 內(nèi)置了一個(gè)的叫做 Futon 的通過 web 訪問的管理接口。

使用案例、產(chǎn)品部署

CouchDB 的復(fù)制和同步強(qiáng)大功能讓其能夠使用在無法保證網(wǎng)絡(luò)鏈接但是應(yīng)用程序必須繼續(xù)在離線模式工作的移動(dòng)設(shè)備。


免責(zé)聲明:本文由用戶上傳,如有侵權(quán)請(qǐng)聯(lián)系刪除!

最新文章

精彩推薦

圖文推薦

點(diǎn)擊排行

2016-2022 All Rights Reserved.平安財(cái)經(jīng)網(wǎng).復(fù)制必究 聯(lián)系QQ280 715 8082   備案號(hào):閩ICP備19027007號(hào)-6

本站除標(biāo)明“本站原創(chuàng)”外所有信息均轉(zhuǎn)載自互聯(lián)網(wǎng) 版權(quán)歸原作者所有。