Apache Doris是一个现代化的MPP分析型数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。Apache Doris的分布式架构非常简洁,易于运维,并且可以支持10PB以上的超大数据集。
Apache Doris可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。令您的数据分析工作更加简单高效!
Doris 的整体架构和 TiDB 类似,借助 MySQL 协议,用户使用任意 MySQL 的 ODBC/JDBC以及MySQL 的客户端,都可以直接访问 Doris。Doris 中的模块包括 FE 和 BE 两类:FE 主要负责元数据的管理、存储,以及查询的解析等;一个用户请求经过 FE 解析、规划后,具体的执行计划会发送给 BE,BE 则会完成查询的具体执行。BE 节点主要负责数据的存储、以及查询计划的执行。目前平台的 FE 部分主要使用 Java,BE 部分主要使用 C++。
如果从表的角度来看数据结构,用户的一张 Table 会拆成多个 Tablet,Tablet 会存成多副本,存储在不同的 BE 中,从而保证数据的高可用和高可靠。
Doris 的使用方式和 MySQL 类似,创建 database,创建 table,导入数据、执行查询等。具体详见下图:
元数据使用 Memory+Checkpoint+Journal ( 分别是什么?),使用 BTBJE ( 类似于 Raft ) 协议实现高可用性和高可靠性。
Doris 内部自行管理数据的多副本和自动修复。保证数据的高可用、高可靠。在服务器宕机的情况下,服务依然可用,数据也不会丢失。
无外部依赖:
数据库同步操作和异步操作:
同步,是所有的操作都做完,才返回给用户结果;即写完数据库之后,再响应用户,用户体验不好;
异步,不用等所有操作等做完,就响应用户请求;即先相应用户请求,然后慢慢去写数据库,用户体验较好。缓存机制(也就是消息队列),就是异步操作的一个典型应用。
副本自动均衡
传统数据库的扩(缩)容比较麻烦,有时甚至需要重做数据;而 Doris 数据库只需要一条 SQL ( 无须额外操作 ) 即可实现扩(缩)容。
内置监控
使用 Prometheus、Grafana 将监控项指标列出。
MySQL 的兼容性从两方面体现:
兼容 MySQL 的网络协议 ( MySQL Network Protocol )
兼容 MySQL 语法,使用 MySQL 语法可对 Doris 数据库进行查询
2.1 关于 MySQL 语法的兼容性,前文已经描述过,这里不再赘述;
2.2 关于 MySQL 的网络协议的兼容性,举个简单的例子:MySQL 的调度服务器 Proxy,可以直接用作 Doris 的 Proxy。
2.3 Doris 的前端展示,可以使用 MySQL 专属展示器 Tableu。下图就是使用 Tableu 将 Doris 数据可视化的一个范例。
2.4 Doris 与 R 语言可以实现无缝对接,用 R 语言可直接操作 Doris 数据库,进行数据分析、数据挖掘等工作。
MPP 即 Massively Parallel Processing,大规模并行处理,即海量数据并发查询。以下图为例:
执行语句:
SELECT k1,SUM(v1) FROM A,B WHERE A.k2=B.k2 GROUP BY k1 ORDER BY SUM(v1)
该语句包含了合并、聚合计算、排序等多种操作;在执行计划的时候,MPP 将其拆分成多份,分布到每台机器执行,最后再将结果汇总。假如有10台机器,在大数据量下,这种查询执行方式可以使得查询性能达到10倍的提升。
类似于字典搜索查询的键值对格式,Doris 中所有数据分成两列:Key 列和 Value 列。如下图所示,Time、Id、Country 列共同组成 Key 列,Clicks、Cost 列为 Value 列。Key 列有序可进行快速查找,Value 列可以按照具体聚合类型内部完成数据聚合。
Key 列全局有序排列,查询时方便快速定位查找。
Doris 数据模型的一个显著特点是 Key 列全局唯一,因此存在相同 Key 值的不同 Value,则后面的数据与前面的数据自动做 ( SUM,MIN,MAX,REPLACE ) 等聚合处理。例如,下图中绿色方框中的两行,相同的 Key 值对应不同的 Value;因此,新的 Value 到达后,与前数据作 SUM 处理,得到最新的数据,不仅提升效率,还可提高数据处理的准确性。
本部分具体描述相同 Key 值下 Value 值的聚合。
数据的导入是分版本的(例如下图右侧91,92版本),每一个版本之间 Key 相同的数据汇总到中间表中,通过聚合处理最终输出为左侧的 base。
Doris 的数据是按列存储的,每一列单独存放。
查询时,只访问查询涉及的列,大量降低 I/O。
数据类型一致,方便压缩。
数据包建索引,数据即索引。
利用原始过滤条件以及 min、max 和 sum 等智能索引技术,将数据集查询范围尽可能地缩小,大大减少 I/O,提升查询效率。
物化视图是提取某些维度的组合建立对用户透明的却有真实数据的视图表格。Doris 的物化视图可以保证用户在更新时,直接更新原始表,Doris 会保证原表、物化视图原子生效。在查询的时候用户也只需指定原始表,Doris 会根据查询的具体条件,选择适合的物化视图完成查询。
通常用户可以通过物化视图功能完成以下两种功能。
两层分区:
分级存储:
用户可以指定数据放到 SSD 上或者 SATA 盘上,也支持根据 TTL 将冷数据从 SSD 迁移到 SATA 上,高效利用 SSD 提高查询性能。
简介:
ES 的优点是索引,可支持多列索引,甚至可支持全文语义索引(如 term,match,fuzzy 等);然而其缺点是没有分布式计算引擎,不支持 join 等操作
与 ES 相反,Palo 具备丰富的 SQL 计算能力,以及分布式查询能力;然而其索引性能较低,不支持全文索引。
Doris 在 ES 开发的过程中,分别借鉴 ES 和 Palo 的长处,支持了 Elasticsearch 多表 Join 操作,同时引入 Elasticsearch 的语义搜索功能,扩充了 Doris 的查询能力。
类似于上图这样的搜索语句,在 SQL 中比较难以表达,但是在 ES 中较容易实现。
用户数据源经 Kafka 消息队列收集后,可以依次进入到 Doris 中,通过 Doris 做报表展示和决策分析等工作。
优点
3.1 无需额外组件,用户可直接通过命令实现 Kafka 消息订阅。
3.2 精确传输,秒级延迟。
3.3 Doris 可自动感知 Kafka 中 partition 变化,合理调度并发导入。
3.4 在数据导入这一过程中,支持对 Kafka 原始数据做二次处理(如转换,过滤等)。
原子性——即一批数据要么都生效,要么都不生效。
支持单机多盘
向量化执行
UDF ( User Defined Function 用户自定义函数 )
内置 HLL 类型,快速计算 UV