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