有一些數據的最佳表現形式是文檔(document)。也就是說,不要把這些數據分散到多個表、節點或實體中,將這些信息收集到一個非規範化(也就是文檔)的結構中會更有意義。儘管兩個或兩個以上的文檔有可能會彼此產生關聯,可是一般來說,文檔是獨立的實體。可以按照這種方式優化並處理文檔的數據庫,咱們稱之爲文檔數據庫。數據庫
例如,假設咱們要編寫一個應用程序來獲取大學生的成績單,可能須要根據學生的名字來查詢其成績單,或者根據一些通用的屬性來查詢成績單。可是,每一個學生是相互獨立的,任意的兩個成績單之間沒有必要相互關聯。儘管咱們可以使用關係型數據庫模式來獲取成績單數據(也許你曾經這樣作過),但文檔型數據庫可能纔是更好的方案。網絡
文檔數據庫不是通用的數據庫,它們所擅長解決的是一個很小的問題集。
有些數據具備明顯的關聯關係,文檔型數據庫並無針對存儲這樣的數據進行優化。例如,社交網絡表現了應用中不一樣的用戶之間是如何創建關聯的,這種狀況就不適合放到文檔型數據庫中。優化
文檔型數據庫會將數據存儲到粗粒度的文檔中,而圖數據庫會將數據存儲到多個細粒度的節點中,這些節點之間經過關係創建關聯。由於數據的結構是圖,因此能夠遍歷關聯關係以查找數據中你所關心的內容,這在其餘數據庫中是很難甚至沒法實現的。文檔
例如,社交網絡圖譜,在社交網絡中,公司、員工、技能的信息,這些都是節點,它們之間的關係和朋友之間的關係都是邊,在這裏面圖數據庫能夠作一些很是複雜的公司之間關係的查詢。好比說公司到員工、員工到其餘公司,從中找相似的公司、類似的公司,均可以在這個系統內完成。遍歷
Redis 是一種特殊類型的數據庫,它被稱之爲 key-value 存儲。顧名思義,key-value 存儲保存的是鍵值對。實際上,key-value 存儲與哈希 Map 有很大的類似性。能夠不太誇張地說,它們就是持久化的哈希 Map。
當你思考這一點的時候,可能會意識到,對於哈希 Map 或者 key-value 存儲來講,其實並無太多的操做。咱們能夠將某個 value 存儲到特定的 key 上,而且可以根據特定 key,獲取 value。差很少也就是這樣了。程序