亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

mongodb和hbase的區別

小晨
560
2021-07-05 14:00:16
欄目: 云計算

mongodb和hbase的區別:1、mongodb bson屬于文檔型數據庫,而hbase是列式數據庫;2、mongodb主鍵是“_id”,而hbase主鍵是row key,能夠是任意字符;3、mongodb支持二級索引,而hbase本身不支持二級索引;4、mongodb支持多種查找方法,而hbase僅只支持三種查找方法;5、兩者之間的修改命令不同,mongodb使用update命令,而hbase的修改和添加都是put命令;6、兩者之間的delete命令操作流程不同;7、mongodb支持shard分片,而hbase則是根據row key自動負載均衡;8、讀寫效率不同,mongodb中讀效率比寫高,而hbase默認適合寫多讀少情況;9、思想不同,mongodb采用的是mapfile+Journal思想,而hbase采用的是LSM思想。

mongodb和hbase的區別

具體內容分析如下:

1.Mongodb bson文檔型數據庫,整個數據都存在磁盤中,hbase是列式數據庫,集群部署時每個familycolumn保存在單獨的hdfs文件中。

2.Mongodb 主鍵是“_id”,主鍵上面可以不建索引,記錄插入的順序和存放的順序一樣,hbase的主鍵就是row key,可以是任意字符串(最大長度是 64KB,實際應用中長度一般為 10-100bytes),在hbase內部,row key保存為字節數組。存儲時,數據按照Row key的字典序(byte order)排序存儲。設計key時,要充分排序存儲這個特性,將經常一起讀取的行存儲放到一起。

字典序對int排序的結果是1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99。要保持整形的自然序,行鍵必須用0作左填充。

3.Mongodb支持二級索引,而hbase本身不支持二級索引

4.Mongodb支持集合查找,正則查找,范圍查找,支持skip和limit等等,是最像mysql的nosql數據庫,而hbase只支持三種查找:通過單個row key訪問,通過row key的range,全表掃描

5.mongodb的update是update-in-place,也就是原地更新,除非原地容納不下更新后的數據記錄。而hbase的修改和添加都是同一個命令:put,如果put傳入的row key已經存在就更新原記錄,實際上hbase內部也不是更新,它只是將這一份數據已不同的版本保存下來而已,hbase默認的保存版本的歷史數量是3。

6.mongodb的delete會將該行的數據標示為已刪除,因為mongodb在刪除記錄時并不是真把記錄從內存或文件中remove,而是將該刪除記錄數據置空(寫0或特殊數字加以標識)同時將該記錄所在地址放到一個list列表“釋放列表”中,這樣做的好就是就是如果有用戶要執行插入記錄操作時,mongodb會首先從該“釋放列表”中獲取size合適的“已刪除記錄”地址返回,這種方法會提升性能(避免了malloc內存操作),同時mongodb也使用了bucket size數組來定義多個大小size不同的列表,用于將要刪除的記錄根據其size大小放到合適的“釋放列表”中。Hbase的delete是先新建一個tombstonemarkers,然后讀的時候會和tombstonemarkers做merge,在 發生major compaction時delete的數據記錄才會真真刪除。

7.mongodb和hbase都支持mapreduce,不過mongodb的mapreduce支持不夠強大,如果沒有使用mongodb分片,mapreduce實際上不是并行執行的

8.mongodb支持shard分片,hbase根據row key自動負載均衡,這里shard key和row key的選取盡量用非遞增的字段,盡量用分布均衡的字段,因為分片都是根據范圍來選擇對應的存取server的,如果用遞增字段很容易熱點server的產生,由于是根據key的范圍來自動分片的,如果key分布不均衡就會導致有些key根本就沒法切分,從而產生負載不均衡。

9.mongodb的讀效率比寫高,hbase默認適合寫多讀少的情況,可以通過hfile.block.cache.size配置,該配置storefile的讀緩存占用Heap的大小百分比,0.2表示20%。該值直接影響數據讀的性能。如果寫比讀少很多,開到0.4-0.5也沒問題。如果讀寫較均衡,0.3左右。如果寫比讀多,果斷默認0.2吧。設置這個值的時候,你同時要參考hbase.regionserver.global.memstore.upperLimit,該值是memstore占heap的最大百分比,兩個參數一個影響讀,一個影響寫。如果兩值加起來超過80-90%,會有OOM的風險,謹慎設置。

10.hbase采用的LSM思想(Log-Structured Merge-Tree),就是將對數據的更改hold在內存中,達到指定的threadhold后將該批更改merge后批量寫入到磁盤,這樣將單個寫變成了批量寫,大大提高了寫入速度,不過這樣的話讀的時候就費勁了,需要merge disk上的數據和memory中的修改數據,這顯然降低了讀的性能。mongodb采用的是mapfile+Journal思想,如果記錄不在內存,先加載到內存,然后在內存中更改后記錄日志,然后隔一段時間批量的寫入data文件,這樣對內存的要求較高,至少需要容納下熱點數據和索引。

0
包头市| 永胜县| 黄陵县| 枣庄市| 渝北区| 阳新县| 隆子县| 通海县| 淅川县| 长顺县| 成武县| 宿迁市| 泊头市| 武汉市| 和顺县| 琼结县| 甘南县| 博乐市| 苏州市| 玛多县| 余姚市| 新兴县| 谢通门县| 通州区| 铜梁县| 双流县| 巢湖市| 诏安县| 六盘水市| 通山县| 余干县| 东台市| 建平县| 桑日县| 阜南县| 迁西县| 奉节县| 辽阳市| 海南省| 滦平县| 睢宁县|