mongodb,redis,hbase 三者都是nosql数据库,他们的最大区别和不同定位

时间:2021-07-21 08:53:19
作者:Harry Zhu
链接:https://www.zhihu.com/question/30219620/answer/48322171
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

当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的数据。

KyleFeng愤怒的青年...

只在生产环境用过hbase,最大感受是很适合超高量级写入的场景,如果是ssd存储,可以做到极低的延迟。但是在同一个集群上,高写入同时有大量查询,会因为hbase的region经常做split产生抖动,使得查询的耗时不是很稳定。

其实hbase的大杀器是可以无缝集成hadoop的map reduce job。比如你每日有好几个tb的新增数据,可以用map reduce实现当日海量数据的高效聚合运算(简单的像:distinct count,sum,avg等等),并且把运算结果写回到hbase供查询使用。


恰逢期末考试看完屁屁踢,正好在这总结一下:
1.关于NoSQL
比较赞同楼上的回答NoSQL is Not Only SQL
NoSQL的粗线的背景大概是因为随着数据量的扩大,在一些对数据集的分析中,传统的关系型数据库的计算成本变得很大。NoSQL凭借着它高大上的“易扩展、大数据、高可用、高性能、灵活性”,强势登场。
2.关于NoSQL的种类
<img src="https://pic2.zhimg.com/v2-d4c9e3dc336946a73ddccd286b163511_b.png" data-rawwidth="871" data-rawheight="632" class="origin_image zh-lightbox-thumb" width="871" data-original="https://pic2.zhimg.com/v2-d4c9e3dc336946a73ddccd286b163511_r.png">mongodb,redis,hbase 三者都是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

以上。

iseeyou

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不太清楚。

数据库主要根据读写量,并发量决定应用场景吧~