先說:從不知道哪里轉(zhuǎn)載過來的烫沙,只能有一點基本的認識琳要,了解一點特性。 項目里用的的時候妒潭,還是靠js召锈、typescript 和go的couchdb庫
Tags: apache旁振,開源,NoSQL涨岁,json拐袜,JavaScript(查詢語言),mapreduce+http(API)梢薪,多主復(fù)制(wt)
- 每個數(shù)據(jù)庫是一個獨立的文檔集合(而不是表)蹬铺。每一個文檔維護其自己獨立的數(shù)據(jù)和自包涵的schema。
- CoucbDB實現(xiàn)了一個多版本并發(fā)控制(MVCC)形式秉撇,用來避免在數(shù)據(jù)庫寫操作的時候?qū)ξ募M行加鎖甜攀。沖突留給應(yīng)用程序去解決秋泄。解決一個沖突的通用操作的是首先合并數(shù)據(jù)到其中一個文檔,然后刪除舊的數(shù)據(jù)规阀。
- 每次將變動保存到數(shù)據(jù)庫中時還會分配一個修訂號(rev)恒序。
- The combination of a map and a reduce function is called a view in CouchDB terminology.
- 其他功能包括文檔級別的ACID語義和最終一致性,MapReduce谁撼,復(fù)制(Replication)歧胁。它還支持通過一個做Futon的內(nèi)置web應(yīng)用程序來進行數(shù)據(jù)庫管理。
ACID厉碟,是指數(shù)據(jù)庫管理系統(tǒng)(DBMS)在寫入/更新資料的過程中喊巍,為保證事務(wù)(transaction)是正確可靠的,所必須具備的四個特性:原子性(atomicity箍鼓,或稱不可分割性)崭参、一致性(consistency)、隔離性(isolation款咖,又稱獨立性)何暮、持久性(durability)。
在數(shù)據(jù)庫系統(tǒng)中之剧,一個事務(wù)是指:由一系列數(shù)據(jù)庫操作組成的一個完整的邏輯過程郭卫。例如銀行轉(zhuǎn)帳,從原賬戶扣除金額背稼,以及向目標賬戶添加金額贰军,這兩個數(shù)據(jù)庫操作的總和,構(gòu)成一個完整的邏輯過程蟹肘,不可拆分词疼。這個過程被稱為一個事務(wù),具有ACID特性帘腹。
MapReduce贰盗,是Google提出的一個軟件架構(gòu)指定一個Map(映射)函數(shù),用來把一組鍵值對映射成一組新的鍵值對阳欲,指定并發(fā)的Reduce(歸納)函數(shù)舵盈,用來保證所有映射的鍵值對中的每一個共享相同的鍵組。
CouchDB的設(shè)計基于支持雙向的復(fù)制(同步)和離線操作球化。這意味著多個復(fù)制能夠?qū)ν粩?shù)據(jù)有其自己的拷貝秽晚,可以進行修改,之后將這些變更進行同步筒愚。
功能(wiki)
文檔存儲
CouchDB將數(shù)據(jù)存儲為“文檔”赴蝇,其為用JSON表示的有一個或者多個字段/值的對。字段的值可以是簡單的東西比如字符串巢掺,數(shù)字句伶,或者時間劲蜻;但是數(shù)組和字典同樣也可以使用。CouchDB中的每一個文檔有一個唯一的id但是沒有必須的文檔schema考余。Map/Reduce 視圖 和 索引
存儲的數(shù)據(jù)通過視圖進行組裝先嬉。在CouchDB中,每一個視圖都是由作為map/reduce操作中的Map部分的JavaScript函數(shù)構(gòu)成秃殉。該函數(shù)接受一個文檔并且將其轉(zhuǎn)換為一個單獨的值來返回坝初。CouchDB能夠?qū)σ晥D進行索引,同時在文檔新增,修改绢要,刪除的時候?qū)@些索引進行更新吏恭。
支持復(fù)制的分布式架構(gòu)REST API
所有的數(shù)據(jù)都有一個唯一的通過HTTP暴露出來的URI。REST使用HTTP方法 POST重罪,GET樱哼,PUT和DELETE來操作對應(yīng)的四個基本CRUD(Create,Read剿配,Update搅幅,Delete)操作來操作所有的資源。最終一致性
CouchDB保證最終一致性呼胚,使其能夠同時提供可用性和分區(qū)容忍茄唐。離線支持
CoucbDB能夠同步復(fù)制到可能會離線的終端設(shè)備(比如智能手機),同時當設(shè)置再次在線時處理數(shù)據(jù)同步蝇更。
CouchDB內(nèi)置了一個的叫做Futon的通過web訪問的管理接口沪编。
view/design_view
couchdb有一個go庫年扩,但可能不夠用蚁廓,不過可以再包裝一下