解讀NoSQL文檔數(shù)據(jù)庫:工作原理、優(yōu)缺點
譯文【51CTO.com快譯】文檔存儲數(shù)據(jù)庫被認為是所有NoSQL數(shù)據(jù)庫類型中最復(fù)雜的。它們采用JSON格式來存儲數(shù)據(jù),而不是采用典型的行和列結(jié)構(gòu)。
NoSQL數(shù)據(jù)庫是大多數(shù)日?;ヂ?lián)網(wǎng)使用的基礎(chǔ)。從Twiiter使用FlockDB到亞馬遜的DynamoDB,我們每天都會遇到NoSQL。
作為市面上流行的數(shù)據(jù)庫模型之一,文檔存儲的工作方式與鍵值(key-value)非常相似,因為文檔是以信息的特定鍵來存儲的。有意思的是,Windows注冊表就是文檔存儲數(shù)據(jù)庫,因此它是很強大的數(shù)據(jù)模型。
文檔數(shù)據(jù)庫的工作原理
表面上,文檔數(shù)據(jù)庫背后的想法是,您可以在文檔中存儲任何類型的信息。這意味著您可以混合搭配所需的任何類型的數(shù)據(jù),不必擔(dān)心數(shù)據(jù)庫無法解析它。實際上,大多數(shù)文檔數(shù)據(jù)庫仍往往使用某種形式的模式、文件格式和某種預(yù)定義結(jié)構(gòu)。
相比關(guān)系型SQL數(shù)據(jù)庫,文檔存儲沒有與SQL同樣的缺點和限制。這意味著處理手頭的信息要容易得多,查詢執(zhí)行也要容易得多。出人意料的是,您在SQL數(shù)據(jù)庫中可以執(zhí)行的同一種操作也可以在文檔存儲數(shù)據(jù)庫中執(zhí)行,比如刪除、添加和查詢。
如前所述,每個文檔都需要某種類型的鍵,這是通過唯一ID提供給它的。在任何過程中提供唯一ID時,直接讀取和處理文檔本身中的信息,而不是逐列取出信息。
說到文檔數(shù)據(jù)庫(以及所有NoSQL數(shù)據(jù)庫),要注意的一點是,它們的安全性往往比SQL數(shù)據(jù)庫差一點。因此,您需要考慮數(shù)據(jù)庫安全,而加強安全的一種方法是使用SAST。 SAST即靜態(tài)應(yīng)用程序安全測試,直接查看源代碼以查找漏洞。您還可以運行DAST(動態(tài)版本),同樣有助于避免NoSQL注入攻擊。
文檔數(shù)據(jù)庫的優(yōu)點
文檔存儲的最大優(yōu)點可能是,所有內(nèi)容都在一個數(shù)據(jù)庫當(dāng)中,而不是信息分散在多個鏈接數(shù)據(jù)庫中。因此,與SQL數(shù)據(jù)庫相比,您可以獲得更好的性能,只要不使用關(guān)系型流程。鏈接文檔會大大增添復(fù)雜性,使用起來令人沮喪,引用在文檔存儲數(shù)據(jù)庫中其實效果不好。
不像每個信息都有一個字段的傳統(tǒng)數(shù)據(jù)庫,即使沒有任何內(nèi)容,文檔存儲數(shù)據(jù)庫也更加靈活。實際上,不需要文檔有一致性,您就可以存儲大量數(shù)據(jù),基本上沒有問題。
同樣,由于文檔存儲更靈活,因此集成新數(shù)據(jù)根本不是問題。與必須將任何新類型的信息添加到所有數(shù)據(jù)集的關(guān)系數(shù)據(jù)庫相比,文檔存儲數(shù)據(jù)庫只需要添加到幾個數(shù)據(jù)集即可。
更具體地說,由于可以在不造成任何停機的情況下修改模式,或者由于您將來可能不知道用戶需求,因此文檔存儲數(shù)據(jù)庫非常適合這些應(yīng)用:
- 大型電子商務(wù)平臺(比如亞馬遜)
- 博客網(wǎng)站(比如Twitter)
- 內(nèi)容管理系統(tǒng)(WordPress和Windows注冊表)
- 分析平臺
文件數(shù)據(jù)庫的缺點
雖然大多數(shù)文檔存儲數(shù)據(jù)庫已存在了一段時間,但除了小圈子和數(shù)據(jù)庫自己的維基或論壇外,仍沒有太多的說明文檔。加上有太多的文檔存儲數(shù)據(jù)庫可供選擇,有時不深入研究,很難找到特定的信息。
此外,由于缺乏熟悉性而導(dǎo)致配置錯誤,或由于使用單個節(jié)點,數(shù)據(jù)有可能丟失。另一個問題是,文檔存儲數(shù)據(jù)庫其實不適合運行多個復(fù)雜的操作或復(fù)雜的查詢。
最后,文檔數(shù)據(jù)庫(和所有NoSQL數(shù)據(jù)庫)快速發(fā)展,這個事實多少成了一把雙刃劍。與SQL相對完善、不會有太大變化相比,如果您沒有熱情或興趣,NoSQL可能很難跟上步伐。
流行文檔數(shù)據(jù)庫的例子
MongoDB:作為主要的NoSQL數(shù)據(jù)庫引擎之一,它不僅應(yīng)用廣泛,還使用類似JSON的機制,有自己的查詢語言。這篇指南全面介紹了MongoDB的基礎(chǔ)知識。
Elasticsearch:基于文檔存儲數(shù)據(jù)模型的搜索引擎。它用于搜索數(shù)據(jù)庫并建立索引,學(xué)習(xí)起來也非常簡單。
CouchDB:與Ubuntu和Facebook一起使用,它使用Javascript,用Erlang編寫。
BaseX:一種基于XML的輕量級DBM,開源,使用Java。
結(jié)論
文檔存儲數(shù)據(jù)模型大受歡迎、廣泛使用有充分理由,這歸因其靈活性。隨著數(shù)據(jù)庫應(yīng)用變得越來越復(fù)雜,能夠輕松添加數(shù)據(jù)集或擴大規(guī)模意味著整體麻煩更少、項目更易于處理。
文檔存儲還有助于數(shù)據(jù)分析,因為公司可以輕松存儲眾多信息供日后使用。由于幾個文檔存儲數(shù)據(jù)庫在添加圖形接口(比如MongoDB),因此可以更輕松地查找原本可能不明顯的信息和模式。
原文標題:Understanding NoSQL Document Databases,作者:Alex Williams
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】