SQL
SQL是结构化查询语言,用于管理关系数据库管理系统(RDBMS)。SQL的操作范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。
- 一个被设计用来操作关系数据库内数据的语言。
RDBMS
关系数据库管理系统是管理关系数据库的数据库管理系统,关系数据库是将数据间的关系以数据库表的形式加以表达,并将数据存储在表格中以便于查询。最常用的关系型数据库管理系统就是MySQL,而SQL(Structured Query Language)是一种用于管理和操作关系型数据库的标准语言。MySQL使用SQL语言来管理和访问数据,SQL提供了对数据的基本操作(例如查询、插入、更新和删除)以及对数据约束和事务处理的支持。
- Mysql是数据库管理系统,SQL是用户操作数据的语言,其数据存储在服务器本地由文件系统支持。
Redis
-
redis是一个高性能的
key-value
内存数据库,Redis 支持的数据结构丰富,包括hash、set、list等。 -
一般用作数据库、缓存和消息中间件。
-
Redis 数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据。
Mongo
-
能存储海量数据,但是不支持事务
-
MongoDB 数据结构比较单一,但是支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。
-
MongoDB 数据存在内存,由 linux系统 mmap 实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。
HDFS
HDFS是Hadoop分布式文件系统,主要用于对海量文件信息进行存储和管理,也就是解决大数据文件(如TB乃至PB级)的存储问题。相比于传统存在服务器上的文件系统,HDFS将文件分成很多数据块存储在网络中的很多服务器上。并行存储和读取。
- 一个把数据切块分布式保存、并行式操作的文件系统。
MapReduce
MapReduce是Hadoop的最初的计算框架,它将大规模的数据分割成多个小块并在集群中分布式地运行计算和处理任务。MapReduce将计算分为两个阶段,即Map和Reduce。其中Map阶段将数据处理成键值对,Reduce阶段将相同键的结果合并为一个结果。
- Hadoop的最初的计算框架,基本实现对HDFS分布式地运行计算和处理任务的能力。
Spark
Spark是一套独立的基于Hadoop的数据处理框架,相较于使用MapReduce引擎具有更快的处理速度。Spark可以作为工具让Hive仓库系统调用它分析数据,Spark自身也可以直接使用来分析处理数据,并且能够支持各种数据来源(RDDs、parquet文件、JSON数据集、Hive表)
计算引擎 | Spark | mapreduce | 备注 |
---|---|---|---|
计算方式 | 内存计算 | IO读写 | 迭代计算过程中,MR需要不断IO,而spark引入了RDD+DAG,使计算过程基于内存完成,提升了处理性能 |
任务调度 | 线程级别 | 进程级别 | spark可以通过复用线程池中的线程减少启动、关闭task所需要的消耗 |
- Hadoop计算框架的更新版本,优化处理方式速度更快。
Hive
Hive是基于Hadoop的数据仓库系统,其本身不提供存储、不提供计算引擎,专注于简化对数据分析处理的过程,其使用类SQL语言HQL查询存储在HDFS中的数据。Hive会将生成Hive表(为HDFS上的文件赋予数据库表、列的语义,保存对应的元数据供查询时使用),在获得查询命令时根据Hive表编译命令。在Hive中进行数据处理时,会通过HQL将查询语句转换成MapReduce作业在Hadoop集群中运行。
- Hive就是个壳子,里面什么东西都不是它的,它只不过整合暴露了一个易于使用的接口让你好写查询语句。
- Hive本身不提供存储,使用Hadoop分布式文件系统HDFS存储。
- Hive本身不提供计算引擎,而是使用Hadoop生态的MapReduce或Spark计算。
- 相比于sql来说,hive更注重于大量数据的查询分析上,几乎不对数据进行增删改的操作。适合离线批量处理,延迟比较大(用于周期性的执行分析),不适合用于在线的需要实时分析结果的场景。
ClickHouse
ClickHouse是用于实时分析大数据的列式数据库管理系统(DBMS)。它被设计成具有高速度和扩展性,能够处理PB级别的数据。
- ClickHouse是MPP架构,强调充分发挥单机性能,没有真正的分布式表,ClickHouse的分布式表只是本地表的代理,对分布式表的查询都会被转换为对本地表的查询。Hive的数据存储于分布式文件系统,因此Hive的计算引擎Spark在执行计算任务时,需要依据数据分布进行调度。在必要时,Spark可以通过CBO将数据重新排序后再分散到多台机器执行,以实现复杂的查询。
- ClickHouse的优化重点在如何提高单机的处理能力,而Spark的优化重点在于如何提高分布式的协作效率。
- 面向列的DBMS,列相似数据连续存储,利好数据压缩。
- 向量化引擎。
- 适合在线查询:响应速度快延迟极低
- 实时的数据更新。
- 支持SQL。
名称 | Hive壳子 | RDBMS(MySQL) | DBMS(Clickhouse) |
---|---|---|---|
查询语言 | HQL(类SQL) | SQL | 支持SQL |
数据存储 | 依赖HDFS | 服务器本地文件系统 | 可单可分布 |
数据格式 | 用户自定义 | 系统定义 | |
数据更新 | 少改添 | 增删改查 | 增删改查 |
计算模型 | mapreduce | excutor执行引擎 | |
设计理念 | 对海量数据做数据挖掘 | 实时查询 | 海量数据快查 |
实时性 | 差 | 好 | 好 |
拓展性 | 分布式框架扩展方便 | 相对较差 | 好 |
有无索引 | 无(全查) | 有 | 一级索引 |
Elasticsearch
Elasticsearch是一个近实时的分布式搜索分析引擎,Elasticsearch通常会和其它两个开源组件Logstash(日志采集)和Kibana(仪表盘)一起提供端到端的日志/搜索分析的功能,常常被简称为ELK。
Elasticsearch只有搜索能力没有存储能力,底层存储完全构建在Lucene之上。Lucene是一个文本搜索引擎,Lucene通常是以文件(大部分是json文件)的形式来存储数据的,每个文件都代表着一个索引,将文档中的数据建立倒排索引,以便加快搜索速度。
- Elasticsearch是一个Lucene的Plus版本,扩展了Lucene的单机搜索能力,使其具有分布式的搜索和分析能力。
- 可以处理半结构化和非结构化的数据,例如日志、文档、JSON等。
- 继承了Lucene最重要的核心(全文检索功能):适用倒排索引,每个字段都可被索引且可用于搜索,海量数据下近实时实现秒级的响应,基于Lucene的开源搜索引擎,为全文检索、高亮、搜索推荐等提供了检索能力。
- 常用于日志处理。
- 常用于指标分析:Elasticsearch可以聚合大量指标数据,并提供高效的统计分析服务。比如统计订单量、爬虫爬取不同电商的某个商品数据,分析各个平台的历史价格、购买力等。
- 搜寻引擎:可用于搜索网站、产品、文档、应用程序、收藏夹或任何其他带有文本的内容。
HBase
Hbase是一个分布式的、基于列的Hadoop的NoSQL数据库,主要适用于海量明细数据(十亿、百亿)的随机实时查询,如日志明细、交易清单、轨迹行为等。
-
HBase是建立在HDFS之上,HDFS是文件系统,而HBase是数据库系统。
-
HBase有表、行和列的概念。定位一行数据会有一个唯一的值,这个叫做行键(RowKey)。而HBase的列(Column)归属到列族(Column Family)中,先找列族,后找列。
一条数据结构 rowKey Column Family UserInfo1 UserInfo2 Column name sex age birth Value 1 Tom male 18 1999 在
id=1
这行数据中,有Info1
、Info2
两个列族,名下分别有name
、sex
、age
、birth
四个列名,在读取时分别使用Info1:name
、Info1:sex
、Info2:age
、Info2:brith
-
HBase存储数据的结构可以非常灵活。HBase表的每一行中,列的组成都是灵活的,行与行之间的列不需要相同,甚至能完全不同。一个列族下可以任意添加新列名,不受任何限制。
-
HBase以Key-Value形式列式存储,Key由RowKey(行键)+ColumnFamily(列族)+Column(列)+TimeStamp时间戳版本+KeyType(类型)组成,而Value就是存储的值。
Key RowKey ColumnFamily Column TimeStamp KeyType 例子 1 UserInfo1 name 1690372353000 KeyType Value Tom -
Hbase的主要特点
- 海量数据存储
- 存储记录的多个历史版本,比如地理位置列、天气温度列等
- 高性能、高可靠性
-
Hbase的主要应用场景
- 每天写入量巨大,而相对读数量较小的应用 – 日志系统
- 海量数据(亿万条记录)的最底层数据源
- 对性能和可靠性要求非常高的应用
- 需要存储历史记录场景
Kafka
Kafka是一个快速,可扩展,耐用和容错的发布/订阅的消息传递系统。
Kafka基本概念
-
Producer–生产者
向Kafka集群中的broker发布消息。
-
Broker–服务代理
Kafka集群包含一个或多个服务器,这种服务器被称为broker。broker直接使用磁盘进行存储,线性读写,速度快。
-
Consumer–消费者
从Kafka集群中的broker拉取(pull)数据并进行处理。
-
Topic & Partition–话题
- Topic在逻辑上可以被认为是一个queue,每条消费都必须指定它的Topic,可以简单理解为必须指明把这条消息放进哪个queue里。
- 物理上把Topic分成一个或多个Partition,每个Partition在物理上对应一个文件夹,该文件夹下存储这个Partition的所有消息和索引文件。
Kafka业务场景
- 日志收集 – 可以收集各种服务的日志,通过Kafka以统一接口服务的方式接受消息进行存储
- 消息系统 – 邮件或短信系统