您好,登錄后才能下訂單哦!
本篇文章為大家展示了mongodb與hbase的區(qū)別是什么,代碼簡明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
hbase與mongodb的區(qū)別:
1.Mongodb bson是文檔型數(shù)據(jù)庫,整個(gè)數(shù)據(jù)都存在磁盤中,hbase是列式數(shù)據(jù)庫,集群部署時(shí)每個(gè)familycolumn保存在單獨(dú)的hdfs文件中。
2.Mongodb 主鍵是“_id”,主鍵上面可以不建索引,記錄插入的順序和存放的順序一樣,hbase的主鍵就是row key,可以是任意字符串(最大長度是 64KB,實(shí)際應(yīng)用中長度一般為 10-100bytes),在hbase內(nèi)部,row key保存為字節(jié)數(shù)組。存儲(chǔ)時(shí),數(shù)據(jù)按照Row key的字典序(byte order)排序存儲(chǔ)。設(shè)計(jì)key時(shí),要充分排序存儲(chǔ)這個(gè)特性,將經(jīng)常一起讀取的行存儲(chǔ)放到一起。
字典序?qū)nt排序的結(jié)果是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支持二級(jí)索引,而hbase本身不支持二級(jí)索引。
4.Mongodb支持集合查找,正則查找,范圍查找,支持skip和limit等等,是最像mysql的nosql數(shù)據(jù)庫,而hbase只支持三種查找:通過單個(gè)row key訪問,通過row key的range,全表掃描。
5.mongodb的update是update-in-place,也就是原地更新,除非原地容納不下更新后的數(shù)據(jù)記錄。而hbase的修改和添加都是同一個(gè)命令:put,如果put傳入的row key已經(jīng)存在就更新原記錄,實(shí)際上hbase內(nèi)部也不是更新,它只是將這一份數(shù)據(jù)已不同的版本保存下來而已,hbase默認(rèn)的保存版本的歷史數(shù)量是3。
6.mongodb的delete會(huì)將該行的數(shù)據(jù)標(biāo)示為已刪除,因?yàn)閙ongodb在刪除記錄時(shí)并不是真把記錄從內(nèi)存或文件中remove,而是將該刪除記錄數(shù)據(jù)置空(寫0或特殊數(shù)字加以標(biāo)識(shí))同時(shí)將該記錄所在地址放到一個(gè)list列表“釋放列表”中,這樣做的好就是就是如果有用戶要執(zhí)行插入記錄操作時(shí),mongodb會(huì)首先從該“釋放列表”中獲取size合適的“已刪除記錄”地址返回,這種方法會(huì)提升性能(避免了malloc內(nèi)存操作),同時(shí)mongodb也使用了bucket size數(shù)組來定義多個(gè)大小size不同的列表,用于將要?jiǎng)h除的記錄根據(jù)其size大小放到合適的“釋放列表”中。Hbase的delete是先新建一個(gè)tombstonemarkers,然后讀的時(shí)候會(huì)和tombstonemarkers做merge,在發(fā)生major compaction時(shí)delete的數(shù)據(jù)記錄才會(huì)真正刪除。
7.mongodb和hbase都支持mapreduce,不過mongodb的mapreduce支持不夠強(qiáng)大,如果沒有使用mongodb分片,mapreduce實(shí)際上不是并行執(zhí)行的。
8.mongodb支持shard分片,hbase根據(jù)row key自動(dòng)負(fù)載均衡,這里shard key和row key的選取盡量用非遞增的字段,盡量用分布均衡的字段,因?yàn)榉制际歉鶕?jù)范圍來選擇對(duì)應(yīng)的存取server的,如果用遞增字段很容易熱點(diǎn)server的產(chǎn)生,由于是根據(jù)key的范圍來自動(dòng)分片的,如果key分布不均衡就會(huì)導(dǎo)致有些key根本就沒法切分,從而產(chǎn)生負(fù)載不均衡。
9.mongodb的讀效率比寫高,hbase默認(rèn)適合寫多讀少的情況,可以通過hfile.block.cache.size配置,該配置storefile的讀緩存占用Heap的大小百分比,0.2表示20%。該值直接影響數(shù)據(jù)讀的性能。如果寫比讀少很多,開到0.4-0.5也沒問題。如果讀寫較均衡,0.3左右。如果寫比讀多,果斷默認(rèn)0.2吧。設(shè)置這個(gè)值的時(shí)候,你同時(shí)要參考hbase.regionserver.global.memstore.upperLimit,該值是memstore占heap的最大百分比,兩個(gè)參數(shù)一個(gè)影響讀,一個(gè)影響寫。如果兩值加起來超過80-90%,會(huì)有OOM的風(fēng)險(xiǎn),謹(jǐn)慎設(shè)置。
10.hbase采用的LSM思想(Log-Structured Merge-Tree),就是將對(duì)數(shù)據(jù)的更改hold在內(nèi)存中,達(dá)到指定的threadhold后將該批更改merge后批量寫入到磁盤,這樣將單個(gè)寫變成了批量寫,大大提高了寫入速度,不過這樣的話讀的時(shí)候就費(fèi)勁了,需要merge disk上的數(shù)據(jù)和memory中的修改數(shù)據(jù),這顯然降低了讀的性能。mongodb采用的是mapfile+Journal思想,如果記錄不在內(nèi)存,先加載到內(nèi)存,然后在內(nèi)存中更改后記錄日志,然后隔一段時(shí)間批量的寫入data文件,這樣對(duì)內(nèi)存的要求較高,至少需要容納下熱點(diǎn)數(shù)據(jù)和索引。
上述內(nèi)容就是mongodb與hbase的區(qū)別是什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。