1.HBase依賴于HDFS,HBase按照列族将資料存儲在不同的hdfs檔案中;MongoDB直接存儲在本地磁盤中,MongoDB不分列,整個文檔都存儲在一個(或者說一組)檔案中 (存儲)
2.Mongodb支援二級索引,而hbase本身不支援二級索引(查詢)
3.HBase一個region隻有一個HRegionServer對外提供服務,一旦這個region無法服務,則查詢會失敗;MongoDB的shards(類似于region)支援負載均衡,可以實作高可用 (存儲)
4.HBase根據檔案的大小來控制region的分裂,在hbase内部,存儲時,資料按照Row key的字典序(byte order)排序存儲;MongoDB根據負載來決定shards的分裂
5.mongodb的update是update-in-place,也就是原地更新,除非原地容納不下更新後的資料記錄。而hbase的修改和添加都是同一個指令:put,如果put傳入的row key已經存在就更新原記錄,實際上hbase内部也不是更新,它隻是将這一份資料已不同的版本儲存下來而已,hbase預設的儲存版本的曆史數量是3。
6.mongodb和hbase都支援mapreduce,不過mongodb的mapreduce很弱
7.mongodb支援shard分片,hbase根據row key自動負載均衡,這裡shard key和row key的選取盡量用非遞增的字段,盡量用分布均衡的字段
8.mongodb的讀效率比寫高,hbase預設适合寫多讀少的情況,可以通過hfile.block.cache.size配置 (查詢)
9.hbase采用的LSM思想(Log-Structured Merge-Tree),就是将對資料的更改hold在記憶體中,達到指定的threadhold後将該批更改merge後批量寫入到磁盤,單個寫變成批量寫,大大提高了寫入速度,讀需要merge disk和memory中的資料,讀的性能會有少量損失。mongodb采用的是mapfile+Journal思想,如果記錄不在記憶體,先加載到記憶體,然後在記憶體中更改後記錄日志,然後隔一段時間批量的寫入data檔案,這樣對記憶體的要求較高,至少需要容納下熱點資料和索引