常見的四種非關系型數據庫都適合什么業務場景?
大多數NoSQL數據庫的基本理念是面向任務(task-oriented)的數據庫管理系統。如同老生常談:如果你唯一的工具是錘子,那么一切看起來都像釘子(If all you have is ahammer, everything looks like a nail.)。

現在我們有不同種類的錘子、起子、鑿子、鏟子,還有更多的工具來解決數據管理問題。當然,最好的方法是選擇合適的工具來完成不同的工作,如果只用關系數據庫事實上可能會適得其反。除SQL數據庫外,其他的可以分成四類:
- 鍵值存儲(key-value stores)
- 列式存儲(column-family stores)
- 文檔存儲(document stores)
- 圖數據庫(graph databases)
鍵值存儲可能是最簡單的面向任務的NoSQL數據庫。其最初的數據模型并不復雜:主要基于亞馬遜在兩年一度的ACM操作系統研討會(ACM Symposium on Operating SystemsPrinciples)上發布的白皮書,一篇叫Dynamo的論文。在此討論的數據模型就是亞馬遜的購物車系統(Amazon's shopping cart system),該系統要求高可用和高負載。因此,鍵值存儲數據庫的底層數據模型的確很簡單:鍵和值存儲為無模式(schema-less)數據模型。事實上,該系統采用大量的商業硬件搭建成集群,可擴展性非常高,并承載了多個高端應用,比如Amazon等。鍵值存儲的產品還有DynamoDB、Riak、Project Voldemort、Redis、Aerospike等。

列式存儲是另一個面向任務的數據庫解決方案。其數據模型比鍵值存儲稍復雜,包含一個大而稀疏的表結構,其中包括存儲鍵的多個列。與Dynamo系統類似,列式存儲也是源于一個特定公司的特殊需求,即Google公司提出的解決方案,發表在2006年OSDI會議(Operating SystemsDesign and Implementation symposium,操作系統設計與實現研討會)上的BigTable論文中。除谷歌的產品外,還涌現出一批有趣的開源實現,如Apache Cassandra和HBase。大多數情況下,這些系統可結合Map/Reduce批處理來處理高級查詢。
文件存儲:隨著網頁和應用的爆炸式增長,文檔存儲可能是最有名、最常用的NoSQL數據庫類型。顧名思義,文檔存儲中的關鍵概念——文檔,是一個半結構化的信息單元,可以是XML、JSON、YAML、OpenOffice、MS Office,或者其他任何可用的文檔。其存儲和檢索為簡單的無模式方式。文檔存儲產品包括廣受歡迎的MongoDB、Apache CouchDB、MarkLogic和Virtuoso等。

圖數據庫與其他三類有著本質上的差異。圖數據庫所要解決的問題與圖和圖論相關。圖數據庫,例如Neo4j,其目的是為用戶提供一種更好的方法用于管理結構復雜、呈網狀分布的數據。當然,基于圖模型實現的解決方案并不僅有Neo4j,有的產品成熟度不同,有的開源或閉源,例如AllegroGraph、Dex、FlockDB、InfiniteGraph、OrientDB和Sones等。