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