【NoSQL數據庫四大類型解析】如何選擇鍵值型數據庫和文檔型數據庫
編者注:本文內容節選自作家兼獨立顧問Dan Sullivan的新作《NoSQL for Mere Mortals》第15章。在本章中,Sullivan介紹了NoSQL數據庫的主要四種類型,以及提出哪些應用適合哪種類型的見解。他還討論了關系型數據庫和NoSQL數據庫設計的區別,以及這兩種技術共同存在的必要性。如有興趣購買,可登錄Informit.com,輸入優惠碼AWDATA35,即可獲得65折優惠。
在關系型數據庫設計中,實體的結構和關系驅動設計,但NoSQL數據庫設計并不是這樣。當然,你也同樣需要對實體和關系進行建模,但是與保持關系模型相比,性能更為重要。
關系性模型的出現與實際需求有關——數據的經常性異常以及新應用程序難以重用現有數據是其出現的主要原因。NoSQL數據庫的出現也有其現實原因——具體來說,就是數據的規模已經無法滿足日益增長的大量讀寫操作。
為了換取讀寫性能的提升,你可能會失去關系型數據庫的一些功能,例如即時一致性以及ACID事務等(雖然并非總是如此)。
本書認為,查詢是數據模型設計的主要驅動力。的確是如此,因為查詢描述了數據的使用方式。要了解不同的NoSQL數據庫是如何滿足用戶的需求,先理解查詢不失為好的著手點。此外,你還需要了解其他因素,如:
讀寫操作的數量
對副本中不一致數據的容忍度
實體之間關系的性質及其影響查詢模式的方式
對于可用性和災難恢復的需求
對數據模型靈活性的需求
對于處理延遲的需求
接下來的部分將介紹一些應用實例以及根據不同需求選擇合適的NoSQL數據庫時所應遵循的標準。
如何選擇鍵值型數據庫(key-value databases)?
鍵值數據庫適用于那些頻繁讀寫,擁有簡單數據模型的應用。鍵值數據庫中存儲的值可以是簡單的標量值,如整數或布爾值,也可以是結構化數據類型,比如列表和JSON結構。
鍵值數據庫通常具有簡單的查詢功能,允許你通過鍵來查找一個值。一般鍵值數據庫都支持搜索功能,這提供了更高的靈活性。開發人員可以選擇使用一些技巧,比如用枚舉鍵來實現范圍查詢,但這些數據庫通常缺乏對于文檔、列族、圖形數據庫的查詢功能。
鍵值數據庫廣泛應用于以下類型的應用:
從關系型數據庫緩存數據來用于提高性能
對Web應用暫時性數據的追蹤,例如購物車數據等
存儲配置和用戶數據信息的移動應用
需要存儲圖片和音頻文件等較大對象的應用
如何選擇文檔型數據庫(document databases)?
文檔型數據庫按照靈活性的標準設計。如果一個應用程序需要存儲不同的屬性以及大量的數據,那么文檔數據庫將會是一個很好的選擇。例如,要在關系數據庫中表示產品,建模者可以使用通用的屬性和額外的表來為每個產品子類型存儲屬性。文檔數據庫卻可以更為簡單的處理這種情況。
文檔數據庫提供嵌入式文檔,這對于非規范化非常有用。文檔數據庫將經常查詢的數據存儲在同一個文檔中,而不是存儲在不同的表中。
此外,文檔數據庫改善了鍵值數據庫的查詢功能和文檔中基于屬性的過濾功能。
由于其靈活性、高性能和易用性,文檔數據庫可能是目前***的NoSQL數據庫。
這些數據庫適用于如下一些用例,包括:
用于后臺具有大量讀寫操作的網站
管理數據類型和變量屬性,比如產品
跟蹤元數據的變量類型
使用JSON數據結構的應用
使用類似結構套結構等非規范化數據的應用程序
微軟Azure和Cloudant等云服務數據庫同樣提供了文檔型數據庫。
在接下來的文章中,我們將繼續介紹如何選擇NoSQL數據庫的另外兩大類型:列族數據庫和圖形數據庫。