国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

NoSql 分析 hbase,mongodb,redis

2019-11-08 20:40:51
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

不嚴(yán)謹(jǐn)?shù)刂v,Redis定位在”快”,HBase定位于”大”,mongodb定位在”靈活”。 NoSQL的優(yōu)點(diǎn)正好就是SQL的軟肋,而其弱點(diǎn)正好也就是SQL的殺手锏

最大區(qū)別在于,在一般使用情況下,mongodb可以當(dāng)作簡(jiǎn)單場(chǎng)景下的但是性能高數(shù)倍的MySQL, Redis基本只會(huì)用來(lái)做緩存,HBase用來(lái)做離線計(jì)算

Hbase,MongoDB,Redis都屬于nosql型存儲(chǔ)方案。在實(shí)際的項(xiàng)目實(shí)踐上看,他們的系統(tǒng)存儲(chǔ)及處理的數(shù)量由大到小。HBase基于列存儲(chǔ),提供<key, family:qualifier, timestamp>三項(xiàng)坐標(biāo)方式定位數(shù)據(jù),由于其qualifier的動(dòng)態(tài)可擴(kuò)展型(無(wú)需schema設(shè)計(jì),可存儲(chǔ)任意多的qualifier),特別適合存儲(chǔ)稀疏表結(jié)構(gòu)的數(shù)據(jù)(比如互聯(lián)網(wǎng)網(wǎng)頁(yè)類)。HBase不支持二級(jí)索引,讀取數(shù)據(jù)方面只支持通過(guò)key或者key范圍讀取,或者全表掃描。

MongoDb在類SQL語(yǔ)句操作方面目前比HBase具備更多一些優(yōu)勢(shì),有二級(jí)索引,支持相比于HBase更復(fù)雜的集合查找等。BSON的數(shù)據(jù)結(jié)構(gòu)使得處理文檔型數(shù)據(jù)更為直接。MongoDb也支持maPReduce,但由于HBase跟Hadoop的結(jié)合更為緊密,Mongo在數(shù)據(jù)分片等mapreduce必須的屬性上不如HBase這么直接,需要額外處理。 HBase與Mongodb的讀寫性能正好相反,HBase寫優(yōu)于隨機(jī)讀,MongoDB似乎寫性能不如讀性能。 Redis為內(nèi)存型KV系統(tǒng),處理的數(shù)據(jù)量要小于HBase與MongoDB

1.Mongodb bson文檔型數(shù)據(jù)庫(kù),整個(gè)數(shù)據(jù)都存在磁盤中,hbase是列式數(shù)據(jù)庫(kù),集群部署時(shí)每個(gè)familycolumn保存在單獨(dú)的hdfs文件中。

2.Mongodb 主鍵是“_id”,主鍵上面可以不建索引,記錄插入的順序和存放的順序一樣,hbase的主鍵就是row key,可以是任意字符串(最大長(zhǎng)度是 64KB,實(shí)際應(yīng)用中長(zhǎ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ù)庫(kù),而hbase只支持三種查找:通過(guò)單個(gè)row key訪問,通過(guò)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ù)已不同的版本保存下來(lái)而已,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ù)組來(lái)定義多個(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,不過(guò)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ù)范圍來(lái)選擇對(duì)應(yīng)的存取server的,如果用遞增字段很容易熱點(diǎn)server的產(chǎn)生,由于是根據(jù)key的范圍來(lái)自動(dòng)分片的,如果key分布不均衡就會(huì)導(dǎo)致有些key根本就沒法切分,從而產(chǎn)生負(fù)載不均衡。

9.mongodb的讀效率比寫高,hbase默認(rèn)適合寫多讀少的情況,可以通過(guò)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è)影響寫。如果兩值加起來(lái)超過(guò)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è)寫變成了批量寫,大大提高了寫入速度,不過(guò)這樣的話讀的時(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ù)和索引。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 荔波县| 玉山县| 互助| 九龙坡区| 富宁县| 兴化市| 理塘县| 莆田市| 临桂县| 遵义市| 华坪县| 温宿县| 乳源| 鹤山市| 西吉县| 宁国市| 泗阳县| 凤山市| 九龙县| 扎鲁特旗| 辽阳市| 巴南区| 蛟河市| 宁津县| 木里| 康平县| 文昌市| 古丈县| 雷山县| 托克逊县| 开远市| 胶南市| 宝坻区| 丁青县| 华池县| 聊城市| 兴业县| 平乡县| 井研县| 高碑店市| 明光市|