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 SQL

mongodb:我覺得定位是取代關係型資料庫,想當一個主流資料庫。因為他有非結構化、方便擴充欄位、寫性能優於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 SQL

NoSQL的粗線的背景大概是因為隨著數據量的擴大,在一些對數據集的分析中,傳統的關係型資料庫的計算成本變得很大。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的源碼,求大神指教?

TAG:Redis | NoSQL | MongoDB | HBase |