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