大數據技術棧裡的數據庫種類繁多,在海量數據存儲方面各有各的優勢。各種大數據數據庫需要根據特定的應用場景來具體分析使用哪一種,本文將系統的整理一下各種NoSQL數據庫的功能區別、使用場景以及企業應用情況,希望能給該領域的開發者提供一定的參考。
數據庫種類
目前市場上主要有以下NoSQL數據庫:
MongoDB、HBase、Redis、Cassandra、Neo4J、Riak、Memcached、Amazon’s Dynamo、Project Voldemort、CouchDB、RavenDB、Infinite Graph、OrientDB等。
鍵值(Key-Value)數據庫
鍵值數據庫就像在傳統語言中使用的哈希表。你可以通過 key 來添加、查詢或者刪除數據,鑑於使用主鍵訪問,所以會獲得不錯的性能及擴展性。
1、主流產品
Riak、Redis、Memcached、Amazon’s Dynamo、Project Voldemort。
2、使用場景
儲存用戶信息,比如會話、配置文件、參數、購物車等等。這些信息一般都和 ID(鍵)掛鉤,這種情景下鍵值數據庫是個很好的選擇。
3、不適合使用場景
1)取代通過鍵查詢,而是通過值來查詢。Key-Value 數據庫中根本沒有通過值查詢的途徑。
2)需要儲存數據之間的關係。在 Key-Value 數據庫中不能通過兩個或以上的鍵來關聯數據。
3)事務的支持。在 Key-Value 數據庫中故障產生時不可以進行回滾。
4、應用公司
GitHub (Riak)、BestBuy (Riak)、Twitter (Redis和Memcached)、StackOverFlow (Redis)、 Instagram (Redis)、Youtube (Memcached)、Wikipedia(Memcached)。
面向文檔(Document-Oriented)數據庫
面向文檔數據庫會將數據以文檔的形式儲存。每個文檔都是自包含的數據單元,是一系列數據項的集合。每個數據項都有一個名稱與對應的值,值既可以是簡單的數據類型,如字符串、數字和日期等;也可以是複雜的類型,如有序列表和關聯對象。數據存儲的最小單位是文檔,同一個表中存儲的文檔屬性可以是不同的,數據可以使用 XML、JSON 或者 JSONB 等多種形式存儲。
1、主流產品
MongoDB、CouchDB、RavenDB。
2、使用場景
1)日誌。企業環境下,每個應用程序都有不同的日誌信息。Document-Oriented 數據庫並沒有固定的模式,所以我們可以使用它儲存不同的信息。
2)分析。鑑於它的弱模式結構,不改變模式下就可以儲存不同的度量方法及添加新的度量。
3、不適合使用場景
在不同的文檔上添加事務。Document-Oriented 數據庫並不支持文檔間的事務,如果對這方面有需求則不應該選用這個解決方案。
4、應用公司
SAP (MongoDB)、Codecademy (MongoDB)、Foursquare (MongoDB)、NBC News (RavenDB)。
列存儲(Wide Column Store/Column-Family)數據庫
列存儲數據庫將數據儲存在列族(column family)中,一個列族存儲經常被一起查詢的相關數據。舉個例子,如果我們有一個 Person 類,我們通常會一起查詢他們的姓名和年齡而不是薪資。這種情況下,姓名和年齡就會被放入一個列族中,而薪資則在另一個列族中。
1、主流產品
Cassandra、HBase。
2、使用場景
1)日誌。因為我們可以將數據儲存在不同的列中,每個應用程序可以將信息寫入自己的列族中。
2)博客平臺。我們儲存每個信息到不同的列族中。舉個例子,標籤可以儲存在一個,類別可以在一個,而文章則在另一個。
3、不適合使用場景
1)如果我們需要 ACID 事務。Vassandra 就不支持事務。
2)原型設計。如果我們分析Cassandra 的數據結構,我們就會發現結構是基於我們期望的數據查詢方式而定。在模型設計之初,我們根本不可能去預測它的查詢方式,而一旦查詢方式改變,我們就必須重新設計列族。
4、應用公司
Ebay (Cassandra)、Instagram (Cassandra)、NASA (Cassandra)、Twitter (Cassandra and HBase)、Facebook (HBase)、Yahoo!(HBase)。
圖(Graph-Oriented)數據庫
圖數據庫允許我們將數據以圖的方式儲存。實體會被作為頂點,而實體之間的關係則會被作為邊。比如我們有三個實體,Steve Jobs、Apple 和 Next,則會有兩個“Founded by”的邊將 Apple 和 Next 連接到 Steve Jobs。
1、主流產品
Neo4J、Infinite Graph、OrientDB。
2、使用場景
1)在一些關係性強的數據中。
2)推薦引擎。如果我們將數據以圖的形式表現,那麼將會非常有益於推薦的制定。
3、不適合使用場景
不適合的數據模型。圖數據庫的適用範圍很小,因為很少有操作涉及到整個圖。
4、應用公司
Adobe (Neo4J)、Cisco (Neo4J)、T-Mobile (Neo4J)。
閱讀更多 加米穀大數據 的文章