mongodb,redis,hbase 三者都是nosql資料庫,他們的最大區別和不同定位是什麼?
mongodb,redis,hbase 三者都是nosql資料庫,他們的最大區別和不同定位是什麼?
當SQL滿足不了你的需求或者SQL 已經不是必須的或者最佳的選擇時,就是你考慮這類NoSQL 的時候了。
當你的內存大於你的數據時,schema也不是太確定時,mongodb在這裡靜靜地等待My SQL轉業戶為了嘗鮮過來看熱鬧的,不改變設計模式,爽在前面痛在後面;
當你唯一追求的就是速度,又對memcached的過於簡單心存芥蒂,剛好內存也比數據多時,redis俏生生站在那裡;
大,好大,太大了,我說的是數據,我們128GB內存雙路CPU25TB存儲只夠一星期的時候,估計就沒有選擇綜合症了,HBase成了唯一或者唯二選擇了。
-----------------------------------------
所以呢,不嚴謹地講,Redis定位在"快",HBase定位於"大",mongodb定位在"靈活"。NoSQL的優點正好就是SQL的軟肋,而其弱點正好也就是SQL的殺手鐧-----------------------------------------最大區別在於,在一般使用情況下,mongodb可以當作簡單場景下的但是性能高數倍的MySQL, Redis基本只會用來做緩存,HBase用來做離線計算Nosql = Not only SQLmongodb:我覺得定位是取代關係型資料庫,想當一個主流資料庫。因為他有非結構化、方便擴充欄位、寫性能優於mysql。萬事萬物有利有弊,mongodb的內存型緩存內容,讓其速度飛快,帶來內存率多,掉電數據問題等,加上自身代碼還有很多bug帶來不如老牌關係型資料庫穩定,特別是在主從等分散式環境,其設計也帶來諸多問題。redis:是一個小而美的資料庫,主要用在key-value 的內存緩存,讀寫性能極佳,list,set,hash等幾種簡單結構使得使用也很簡單。緩存與簡單是其定位,分散式redis架構的出現,讓redis更加廣泛的使用,穩坐緩存第一把交椅。hbase:定位非結構化大數據,可伸縮性好,並不是完全高可用,底層依靠hadoop提供的HDFS,使用時有一整套zookeeper,pig,hive的生態系統。Cassandra可以算一個競爭對手,但Cassandra去中心化的自適應結構又跟Hbase中心化的生態系統完全不同。
MongoDB是文檔型資料庫,使用bson結構,可以更加靈活的處理嵌套結構的數據。是這三個里最接近關係型資料庫的。
Redis是k-v型資料庫,目標是做高效的分散式緩存。數據一般不實時落地。也不適合做存儲和分析。
HBase是列式資料庫,BigTable的一種實現,目標是高效存儲大量數據,支持列壓縮,行事務。適合Schema-less的數據。恰逢期末考試看完屁屁踢,正好在這總結一下:
1.關於NoSQL比較贊同樓上的回答NoSQL is Not Only SQLNoSQL的粗線的背景大概是因為隨著數據量的擴大,在一些對數據集的分析中,傳統的關係型資料庫的計算成本變得很大。NoSQL憑藉著它高大上的「易擴展、大數據、高可用、高性能、靈活性」,強勢登場。2.關於NoSQL的種類3.HBase(列存儲)
兩大用途:- 特別適用於簡單數據寫入(如「消息類」應用)和海量、結構簡單數據的查詢(如「詳單類」應用)。特別地,適合稀疏表。(個人覺得存個網頁內容是極好極好的)
- 作為MapReduce的後台數據源,以支撐離線分析型應用。
場景:Facebook的消息類應用,包括Messages、Chats、Emails和SMS系統,用的都是HBase;淘寶的WEB版阿里旺旺,後台是HBase;小米的米聊用的也是HBase;移動某省公司的手機詳單查詢系統。(單次分析,只能scan全表或者一個範圍內的)
4.MongoDB- 是一個介於關係型和非關係型之間的一個產品吧,類SQL語言,支持索引
- MongoDb在類SQL語句操作方面目前比HBase具備更多一些優勢,有二級索引,支持相比於HBase更複雜的集合查找等。
- BSON的數據結構使得處理文檔型數據更為直接。支持複雜的數據結構
- MongoDb也支持mapreduce,但由於HBase跟Hadoop的結合更為緊密,Mongo在數據分片等mapreduce必須的屬性上不如HBase這麼直接,需要額外處理。
5.Redis
- Redis為內存型KV系統,處理的數據量要小於HBase與MongoDB
- Redis很適合用來做緩存,但除此之外,它實際上還可以在一些「讀寫分離」的場景下作為「讀庫」來用,特別是用來存放Hadoop或Spark的分析結果。
- Redis的讀寫性能在100,000 ops/s左右,時延一般為10~70微妙左右;而HBase的單機讀寫性能一般不會超過1,000ops/s,時延則在1~5毫秒之間。
- Redis的魅力還在於它不像HBase只支持簡單的字元串,他還支持集合set,有序集合zset和哈希hash
MongoDB做高性能資料庫,Redis做緩存,HBase做大數據分析。MongoDB還無法取代關係型資料庫。
傳統關係型資料庫面對數據規模、數據模型複雜時的不足,導致了NoSQL的快速發展,後者易擴展,性能高,支持靈活的數據模型。
MongoDB是高性能、無模式的文檔型資料庫,支持二級索引,非常適合文檔化格式的存儲及查詢。MongoDB的官方定位是通用資料庫,確實和MySQL有些像,現在也很流行,但它還是有事務、join等短板,在事務、複雜查詢應用下無法取代關係型資料庫。
Redis是內存型Key/Value系統,讀寫性能非常好,支持操作原子性,很適合用來做高速緩存。
HBase存儲容量大,一個表可以容納上億行、上百萬列,可應對超大數據量要求擴展簡單的需求。Hadoop的無縫集成,讓HBase的數據可靠性和海量數據分析性能(MapReduce)值得期待。
所以說,關係型資料庫和NoSQL各有優劣,兩者結合,可以覆蓋更多的業務場景。
網易雲提供三副本高可用的[MongoDB](MongoDB 服務_MongoDB 雲端解決方案-網易雲)雲端解決方案,並為備份、監控和性能特別優化,使用[Redis](Redis_緩存服務_key-value在線存儲服務-網易雲)構建高性能緩存,支持數據持久化,使用HBase支持大數據分析。
只在生產環境用過hbase,最大感受是很適合超高量級寫入的場景,如果是ssd存儲,可以做到極低的延遲。但是在同一個集群上,高寫入同時有大量查詢,會因為hbase的region經常做split產生抖動,使得查詢的耗時不是很穩定。
其實hbase的大殺器是可以無縫集成hadoop的map reduce job。比如你每日有好幾個tb的新增數據,可以用map reduce實現當日海量數據的高效聚合運算(簡單的像:distinct count,sum,avg等等),並且把運算結果寫回到hbase供查詢使用。mongodb,redis,hbase 根據CAP分散式理論,三者都是CP型分散式資料庫,能夠保證數據的強一致性和分區容忍性 ,從適用場景來看:
mongodb是文檔存儲資料庫,支持二級索引,但比較消耗內存,查詢功能強大,類似json格式存儲,一般可以用來存放評論等半結構化數據
redis是KV資料庫,不支持二級索引,讀寫性能高,支持list,set等多種數據格式,適合讀多寫少的業務場景,可以用來做緩存系統
hbase是列資料庫,不支持二級索引,寫性能高,適合寫多讀少的業務場景,可用來存儲BI數據
redis特點是k-v, 適合存儲全局變數,比如微信token每兩小時刷新一次,就比較適合用redis存儲,讀也比較方便。mongodb 適合存儲json類型數據,不經常變化,比如排行榜,每天刷新一次,remove一次再從db更新過去。Hbase暫時沒用過。
我的理解就是,mongodb主要是做社交這一類的應用。redis是個in memory cache,主要作為軟體里一個部件來提升整體性能的。hbase不太清楚。
資料庫主要根據讀寫量,並發量決定應用場景吧~推薦閱讀:
※為什麼說HBase是列式資料庫?
※HBase讀性能怎麼樣?
※從百萬級別數據的分析角度,Mysql,Mongodb,Hbase如何選擇?
※怎麼看hadoop的源碼,求大神指教?