这五种技术,尽管叫法不同:数据库,搜索引擎,数据仓库。其实都是我们应用程序和数据之间的一个中间层。
要理解他们有什么不同,要从他们设计哲学和应用场景来看:
MySQL - 关系型数据库
应用程序 → MySQL(关系型数据库) → 磁盘文件
mysql作为典型的传统关系型数据库,主要有以下特点:
-
提供ACID事务保证
-
支持复杂的关系查询(JOIN、子查询等)
-
结构化数据存储和管理
由于mysql有事务的四大特性,所以它支持需要强一致性的业务的场景,如银行交易系统 ,电商订单管理。
mysql不支持分布式存储所以不适用于海量数据存储(PB级别),也不适用于非结构化数据存储。
Elasticsearch - 搜索和分析引擎
应用程序 → Elasticsearch(搜索引擎) → 倒排索引 + 文档存储
Elastic译为有弹性的,灵活的。
关于Elasticsearch的介绍可以看这个视频:【Elastic Search是什么?Lucene是什么?架构是怎么样的?】 https://www.bilibili.com/video/BV1yb421J7oX/?share_source=copy_web
Elasticsearch利用倒排索引等方法,特点为:
-
解决全文搜索性能问题
-
提供近实时的数据检索
-
支持复杂的聚合分析
适用场景:电商商品搜索,日志分析和监控,应用内全文搜索,实时数据分析。
不适用场景:需要强事务的业务,复杂的关系查询,数据频繁更新的场景。
HBase - 分布式列式存储
应用程序 → HBase(列式存储) → HDFS分布式文件系统
HBase基于HDFS可以实现海量数据存储,以及高并发场景下的实时读写。特点为:
-
海量数据的随机读写
-
线性扩展能力
-
高吞吐的数据存储
适用场景:用户行为日志,存储物联网传感器数据,消息和历史记录,需要随机访问的海量数据。
不适用场景:复杂查询和聚合,需要事务保证,频繁的模式变更 。
Hive - 数据仓库工具
应用程序 → Hive(数据仓库) → SQL接口 → MapReduce/Spark → HDFS
Hive面向数据处理,可以将类似于sql的语言转化为MR程序。特点为:
-
在Hadoop上提供SQL-like查询
-
离线批处理和分析
-
处理超大规模数据集
适用场景:数据仓库和BI分析,离线数据处理,历史数据挖掘,大规模ETL作业。
不适用场景:实时查询,在线事务处理,低延迟应用。
Redis - 内存数据存储
应用程序 → Redis(内存存储) → 内存 + 可选的磁盘持久化
redis作为基于内存储存的Nosql数据库。特点为:
-
提供超高速的数据访问
-
作为缓存层减轻后端数据库压力
-
支持丰富的数据结构和原子操作
本质:内存优先的键值存储
适用场景:缓存,会话存储,消息队列。
不适用场景:数据量超过内存大小,需要复杂查询,需要强事务。