PouchDB是一個(gè)受Apache CouchDB啟發(fā)的開(kāi)源JavaScript數(shù)據(jù)庫(kù)。可以完美運(yùn)行在瀏覽器中。
PouchDB設(shè)計(jì)的初衷是,幫助Web開(kāi)發(fā)者構(gòu)建能在本地離線運(yùn)行的App,一如在線時(shí)運(yùn)行的一樣。
它能讓應(yīng)用程序離線時(shí)存儲(chǔ)數(shù)據(jù),并在回到線上時(shí)與服務(wù)器兼容,同步數(shù)據(jù),保持用戶數(shù)據(jù)的同步。
PouchDB是CouchDB的JavaScript實(shí)現(xiàn),目標(biāo)是實(shí)現(xiàn)可以和CouchDB相媲美的API,可以在瀏覽器和Node.js運(yùn)行。
CouchDB是由Damien Katz于2015年寫的NoSQL數(shù)據(jù)庫(kù),現(xiàn)在由Apache軟件基金會(huì)負(fù)責(zé)維護(hù)。如果你是一個(gè)JavaScript開(kāi)發(fā)者,你可能每天都在用CouchDB,因?yàn)樗暮诵募夹g(shù)驅(qū)動(dòng)著npm。
現(xiàn)在,有兩個(gè)數(shù)據(jù)庫(kù)的血緣可以追溯到CouchDB:Couchbase,和Cloudant。他們都是從CouchDB分離出來(lái)的產(chǎn)品。
然而,這三種數(shù)據(jù)庫(kù)都是使用了相同的CouchDBsync協(xié)議。這意味著PouchDB可與這三個(gè)數(shù)據(jù)庫(kù)配合使用。
換句話說(shuō),這些數(shù)據(jù)庫(kù)像是電話運(yùn)營(yíng)商,而CouchDB同步協(xié)議是底層的基礎(chǔ)技術(shù)。
現(xiàn)在已經(jīng)有這么多SQL、NoSQL數(shù)據(jù)庫(kù)了:MongoDB、PostgreSQL、MySQL等。那么為什么我們選擇實(shí)現(xiàn)CouchDB,而不是別的呢?
CouchDB的優(yōu)勢(shì)有兩點(diǎn):HTTP和sync。
HTTP:小而簡(jiǎn)單的協(xié)議
當(dāng)我們使用數(shù)據(jù)庫(kù)時(shí),經(jīng)常需要在數(shù)據(jù)庫(kù)和客戶端的應(yīng)用之間寫類似轉(zhuǎn)換層的東西,將數(shù)據(jù)庫(kù)的查詢語(yǔ)句轉(zhuǎn)化成RESTful的HTTP調(diào)用。這些工作在編寫的每一個(gè)App中被一次次開(kāi)發(fā)重復(fù)著。
CouchDB將我們拯救了出來(lái)!通過(guò)我們的客戶端App,可以直接和數(shù)據(jù)庫(kù)通訊。它使用HTTP作為主要的通訊方式,沒(méi)有特殊的協(xié)議,沒(méi)有特殊的驅(qū)動(dòng):只有REST和HTTP。你可以通過(guò)你的瀏覽器,curl或像Postman這樣的REST客戶端直接和CouchDB連接。
換句話說(shuō),CouchDB是真正“為Web而生的數(shù)據(jù)庫(kù)”。
Sync:CouchDB的殺手級(jí)特性
CouchDB另一個(gè)特性是,它從底向上都被設(shè)計(jì)成完全同步友好的數(shù)據(jù)庫(kù)。
舉個(gè)例子,如果你擔(dān)心客戶端應(yīng)用的潛在危險(xiǎn),你可以直接在歐洲設(shè)一個(gè)CouchDB,再在北美搞一個(gè),亞洲搞一個(gè)。在這些數(shù)據(jù)庫(kù)之間開(kāi)啟雙向復(fù)制之后,客戶端就可以使用其中任何一個(gè)。
PouchDb使這一切都可以運(yùn)行在你的瀏覽器里。
PaulMest:我已經(jīng)使用PouchDB作為React Native應(yīng)用的數(shù)據(jù)庫(kù)6個(gè)月了,用SQLite數(shù)據(jù)庫(kù)作為后端的存儲(chǔ),這樣我們就可以使用設(shè)備更多的存儲(chǔ)空間,而不只是50M。它工作得非常好,在一個(gè)離線緩存中維護(hù)數(shù)據(jù),然后再同步到Digtal Ocean上的CouchDB 2.0。 讓它在React native里工作非常有挑戰(zhàn)性。讓我們的系統(tǒng)跟上PouchDB的更新也非常有挑戰(zhàn)性。實(shí)際上我們使用PouchDB 5.4.5,因?yàn)?.x版本中有breaking change,我還沒(méi)有時(shí)間去搞明白哪里不兼容。PouchDB社區(qū)(尤其是Nolan lawson)非常活躍,給出示例、聽(tīng)取反饋回答問(wèn)題等都非常積極。
ojanik:我們已經(jīng)在產(chǎn)品環(huán)境中使用PouchDB大約15個(gè)月了。當(dāng)初選擇它是因?yàn)檫@是一個(gè)綠色軟件,它給了我們兩個(gè)優(yōu)勢(shì):簡(jiǎn)單的離線支持、實(shí)時(shí)同步功能,配合后端的程序很方便。因?yàn)檫@個(gè)東西實(shí)際上就是一個(gè)帶有本地緩存的Web App,部署新版本非常簡(jiǎn)單。
在架構(gòu)方面,我們有大約有250個(gè)用戶,每個(gè)都有獨(dú)立的Couch數(shù)據(jù)庫(kù)。我們還沒(méi)有評(píng)估Couch 2.0,使用的還是Couch 1.6.
然而,我們?cè)谑褂玫倪^(guò)程中,還是遇到了一些問(wèn)題:
本站文章版權(quán)歸原作者及原出處所有 。內(nèi)容為作者個(gè)人觀點(diǎn), 并不代表本站贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé),本站只提供參考并不構(gòu)成任何投資及應(yīng)用建議。本站是一個(gè)個(gè)人學(xué)習(xí)交流的平臺(tái),網(wǎng)站上部分文章為轉(zhuǎn)載,并不用于任何商業(yè)目的,我們已經(jīng)盡可能的對(duì)作者和來(lái)源進(jìn)行了通告,但是能力有限或疏忽,造成漏登,請(qǐng)及時(shí)聯(lián)系我們,我們將根據(jù)著作權(quán)人的要求,立即更正或者刪除有關(guān)內(nèi)容。本站擁有對(duì)此聲明的最終解釋權(quán)。