暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mongodb/redis/hbase 有什么相同点和不同点?

渣渣陶 2021-07-16
1409

这个问题是我真实面试被问到的一个问题,觉得出现频率应该还很高,就拿出来重新复习一下

这个问题应该是考察nosql

因为mongodb/redis/hbase 都是nosql,都有各自的定义操作查询使用方法,并且不支持sql语法查询

先看看nosql 的一些知识点

以下内容摘自runoob.com 菜鸟教程
  • 什么是nosql? nosql 指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。

  • NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

  • RDBMS(关系型) vs NOSQL(非关系型)

    RDBMS
    - 高度组织化结构化数据
    - 结构化查询语言(SQL) (SQL)
    - 数据和关系都存储在单独的表中。
    - 数据操纵语言,数据定义语言
    - 严格的一致性
    - 基础事务

    NoSQL
    - 代表着不仅仅是SQL
    - 没有声明性查询语言
    - 没有预定义的模式
    -键 - 值对存储,列存储,文档存储,图形数据库
    - 最终一致性,而非ACID属性
    - 非结构化和不可预知的数据
    - CAP定理
    - 高性能,高可用性和可伸缩性
  • NoSQL的优点/缺点

    优点:
    - 高可扩展性
    - 分布式计算
    - 低成本
    - 架构的灵活性,半结构化数据
    - 没有复杂的关系
    缺点:
    - 没有标准化
    - 有限的查询功能(到目前为止)
    - 最终一致是不直观的程序

再拆开分别看看各自的区别

1.定义:

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
Redis 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

hbase菜鸟教程没搜到,直接去官方hbase.apache.org看吧,--来自百度翻译结果

HBase是Hadoop数据库,一个分布式、可扩展的大数据存储。
当您需要对大数据进行随机、实时读/写访问时使用HBase
这个项目的目标是在商业集群上托管非常大的表,数十亿行,数百万列
HBase是一个开源的、分布式的、版本控制的、非关系型数据库,模仿Google的Bigtable:一个结构化数据分布式存储系统
正如Bigtable利用Google文件系统提供的分布式数据存储一样,HBase在Hadoop和HDFS之上提供了类似Bigtable的功能

总结一下定义上的不同点

MongoDB: 分布式文件存储,非关系型数据库, 最像关系数据库的非关系数据库
Redis: k-v 存储系统,非关系型数据库,v值可以是多种数据类型
HBase: Hadoop数据库,非关系型数据库,基于hadoop和hdfs

2.特点:

摘自知乎:https://www.zhihu.com/question/30219620/answer/137775181

mongodb (文档型数据库)
类SQL语言,支持索引
类SQL语句操作方面目前比HBase具备更多一些优势,有二级索引,支持相比于HBase更复杂的集合查找
BSON的数据结构, 使得处理文档型数据更为直接,支持复杂的数据结构
支持mapreduce,但由于HBase跟Hadoop的结合更为紧密,Mongo在数据分片等mapreduce必须的属性上不如HBase这么直接,需要额外处理。
HBase(列存储)
特别适用于简单数据写入(如“消息类”应用)和海量、结构简单数据的查询(如“详单类”应用)。特别地,适合稀疏表。(个人觉得存个网页内容是极好极好的)
作为MapReduce的后台数据源,以支撑离线分析型应用。

场景:
Facebook的消息类应用,包括Messages、Chats、Emails和SMS系统,用的都是HBase;
淘宝的WEB版阿里旺旺,后台是HBase;
小米的米聊用的也是HBase;
移动某省公司的手机详单查询系统。
(单次分析,只能scan全表或者一个范围内的)
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: BSON,分片,类sql语言,有二级索引
hbase:全表scan效率高,基于hadoop支持海量数据,适用简单数据写入
redis:基于内存,k-v结构,支持set/zset/hash,读写性能快


3.应用场景

mongodb: 
存储网站/日志数据/监控数据/用于对象及JSON数据/用户信息/(小红书id == mongodb的_id)
信息基础设施的持久化缓存层
redis:
热点数据的缓存
限时优惠活动/秒杀
计数相关-接口限制/反爬触发器
排行榜数据缓存/热搜
队列
hbase:
即时在线消息存储 --- 淘宝的WEB版阿里旺旺
电商的实时数据分析
海量数据下的单表扫描场景
写密集型应用

总结一下应用场景上的不同点

mongodb 适用于 存储一些json信息的数据 -- 爬虫结果/json日志/文档信息
redis 适用于 读写性能要求高的,非持久型的数据 -- 秒杀/缓存/热数据/队列
hbase 适用于 海量消息单表扫描效率有要求的 -- 实时数据/web即时消息


差不多今天就先写到这儿,关于这3个数据库,推荐几本书,感兴趣的可以搜一下看看,

《深入学习MongoDB》, 《No数据库入门》, 《Redis设计与实现》,《Hbase 权威指南》《Hbase实战中文版》,《Hbase不睡觉》

也可以给我发私信要pdf文档,  关注公众号回复【联系方式】,成功加好友后,还有海量资料共享送给你!


文章转载自渣渣陶,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论