HBase:作為數據存儲,捕獲來自於各種數據源的增量數據。例如,這種數據源可能是網頁爬蟲,可能是記錄用戶看了什么廣告和多長時間的廣告效果數據,也可能是記錄各種參數的時間序列數據
FaceBook使用HBase的計數器來計量人們Like特定網頁的次數。內容原創人和網頁主人可以得到近乎實時的、多少用戶Like他們網頁的數據信息。他們可以因此更敏捷地判斷應該提供什么內容。Facebook 為此創建了一個叫Facebook Insight的系統,該系統需要一個可擴展的存儲系統。公司考慮了很多種可能,包括關系型數據庫、內存數據庫、和Cassandra數據庫,最后決定使用HBase。基於HBase,Facebook 可以很方便地橫向擴展服務規模,提供給數百萬用戶,也可以繼續使用他們已有的運行大規模HBase機群的經驗。該系統每天處理數百億條事件,記錄數百個參數。
1)適合半結構化或非結構化數據,結構會變動的數據
2)記錄非常稀疏的數據
3)多版本數據
4)超大數據量的數據
MongoDB: 日志的采集和存儲,小文件的分布式存儲,類似互聯網微博應用的數據存儲
1)適合無嚴格事務性要求的各種數據,如對象數據,JSON格式數據
2)由於性能非常高,非常適合實時的插入,更新與查找,並具備高度伸縮性
3)適合做緩存
HDFS::適合大文件存儲,可append,但不可修改。適合Hadoop離線數據分析,Apache Spark的數據存儲。
1)HDFS對大量小文件的存儲開銷比較大,適合大文件處理,如果有多個小文件,可以合並為大文件再處理
2)HDFS適用於高吞吐量,而不適合低時間延遲的訪問
3)HDFS適用於流式讀取的方式,不適合多用戶寫入一個文件、隨機寫以及文件的覆蓋操作
4)HDFS更加適合寫入一次,讀取多次的應用場景
mongodb適用於以下場景:
a.網站數據:mongo非常適合實時的插入,更新與查詢,並具備網站實時數據存儲所需的復制及高度伸縮性。
b.緩存:由於性能很高,mongo也適合作為信息基礎設施的緩存層。在系統重啟之后,由mongo搭建的持久化緩存可以避免下層的數據源過載。
c.大尺寸、低價值的數據:使用傳統的關系數據庫存儲一些數據時可能會比較貴,在此之前,很多程序員往往會選擇傳統的文件進行存儲。
d.高伸縮性的場景:mongo非常適合由數十或者數百台服務器組成的數據庫。
e.用於對象及JSON數據的存儲:mongo的BSON數據格式非常適合文檔格式化的存儲及查詢。
不適合的場景:
a.高度事物性的系統:例如銀行或會計系統。傳統的關系型數據庫目前還是更適用於需要大量原子性復雜事務的應用程序。
b.傳統的商業智能應用:針對特定問題的BI數據庫會對產生高度優化的查詢方式。對於此類應用,數據倉庫可能是更合適的選擇。
c.需要SQL的問題。
HDFS適用場景
GB、TB、甚至PB級數據
百萬規模以上的文件數量
10K+節點規模
HBase 建立互聯網索引
1 爬蟲持續不斷地抓取新頁面,這些頁面每頁一行地存儲到BigTable里。
2 MapReduce計算作業運行在整張表上,生成索引,為網絡搜索應用做准備。 搜索互聯網
3 用戶發起網絡搜索請求。 4 網絡搜索應用查詢建立好的索引,或者直接從BigTable直接得到單個文檔。
5 搜索結果提交給用戶。
