数据库(Database)
- 数据库是存储数据的容器
- 数据库是一个结构化的数据集合,用于存储和组织数据,提供数据的持久化存储和查询功能
- 数据库管理系统(DBMS)用于管理数据库,包括数据的增删改查、事务管理、安全性控制等。
举例
- 关系型数据库:MySQL、Oracle、SQL Server
- NoSQL数据库:MongoDB、Redis
- 列式数据库:ClickHouse、HBase
数据源(Data Source)
- 数据源是指数据的来源,可以是任何存储、生成或传输数据的地方或系统
- 通常来说,数据源更倾向于指代数据的原始来源,如数据库、日志、API接口等
- 数据源提供数据,但不一定包含数据的结构化格式和管理功能(也就是不一定包括底层数据存储引擎)
- 数据可以存储在各种形式中,如结构化数据库、非结构化文本、图像/视频文件等。
举例
- 日志文件(Kafka)、数据库、API接口、传感器数据等
数据存储引擎(Data Storage Engine)
- 数据存储引擎负责数据的物理存储和管理。
- 数据存储引擎提供数据的持久化存储和高效的数据访问功能
举例
- HDFS(Hadoop Distributed File System)、Amazon S3、Google Cloud Storage、Apache Cassandra 等
数据查询引擎(Data Query Engine)
- 数据查询引擎负责执行数据查询、分析和处理操作
- 数据查询引擎允许用户从数据源中提取数据,并执行复杂的查询和分析操作
举例
- Apache Hive(基于MR)、Apache Spark、Trino(Presto)、Impala、Elasticsearch 等
- MapReduce(MR):MapReduce 是一个分布式数据处理框架,用于将大规模数据集并行处理成一个键/值对的集合。它通常用于大规模数据的处理和计算任务,涉及数据的转换、映射、归约等操作。
- Apache Tez:Tez 是一个更高层次的计算引擎,用于优化和加速复杂数据处理任务。也可以作为 Hive 查询的执行引擎。
- Presto (Trino):Presto(现今更名为 Trino)是一个高性能、分布式 SQL 查询引擎,用于实时查询和分析大规模数据。它支持连接多种数据源,执行复杂的 SQL 查询,并提供高效的数据查询操作。可以代替 Hive 来执行复杂的 SQL 查询任务。
数据处理引擎(Data Processing Engine)
- 数据处理引擎用于执行数据处理、转换、计算和建模任务,处理原始数据并生成派生数据或新的数据集。
- 专注于处理和转换数据,进行ETL(Extract, Transform, Load)操作、数据清洗、加工、计算和模型训练等。
举例
- Apache Spark、Apache Flink、Apache Beam
关系和区别:
- 关系:数据库通常用于存储和管理数据;数据源是数据的原始来源;数据存储引擎负责数据的物理存储;数据查询引擎负责执行数据查询和分析。
- 区别:数据库是一种软件,用于存储和管理数据;数据源是数据的来源;数据存储引擎是数据的存储支持;数据查询引擎用于对数据进行查询和分析。
解读
上面更像是一个概念介绍,因为它们之间往往不是独立存在,而是相互依赖的关系,比如 ClickHouse 和 StarRocks 可以作为专注于数据存储引擎和数据查询引擎的系统
又或者Impala 和 Elasticsearch 在数据处理和分析领域扮演不同的角色,可以根据其主要功能来划分它们属于查询引擎还是处理引擎。