Apache Doris 介绍
发表于 2019-07-27 13:42
一、Doris
Doris是一个分布式的、面向查询的分布式数据库。主要部分是SQL,它在内部使用MPP技术。
什么是 MPP?
MPP ( Massively Parallel Processing ),是一种大规模并行处理。在数据库非共享集群中,每个节点都有一个独立的磁盘存储系统和一个内存系统。根据数据库模型和应用程序特性将业务数据划分为多个节点。数据节点通过专用网络或商用通用网络相互连接,并相互协作计算,以提供整个数据库服务。非共享数据库集群具有完全可伸缩性、高可用性、高性能、高性价比和资源共享等优点。简单地说,MPP将任务并行地分布到多个服务器和节点。在完成对每个节点的计算后,将各个部分的结果汇总在一起,得到最终的结果(类似于Hadoop)。
Doris主要解决PB级数据量(如果高于PB级,不建议使用Doris solution,可以考虑使用Hive等工具)来解决结构化数据。查询时间通常以秒或毫秒为顺序。
Doris是由百度大数据开发的(前身为百度Palo, 2018年加入Apache社区后更名为Doris)。在百度中,使用了200多条产品线,部署了1000多台机器,单个业务可以达到最大几百字节。
在百度为Apache社区贡献了Doris之后,许多外部用户也成为了Doris的用户,如新浪微博、美团、小米等知名企业。
二、Doris 定位
在数据分析处理框架中,Doris主要从事在线层面的数据服务,主要从事数据分析方面的服务。
Doris的目标是实现低成本(主要针对商业产品)、线性可伸缩性、支持云部署、高可用性、高查询性能和高负载性能。
简要介绍两个百度内部业务中 Doris 的应用案例:
A. 百度统计在线报表
B. 百度另一内部业务的多维分析
可以手动拖拽维度、指标等,进行查询。
▌适用场景 & 案例介绍
一、适用场景
1、对数据分析、统计
数据分析可以大致分为两类:一类倾向于报表类,另一类倾向于多维分析。
2、报表
报表类型数据分析、数据分析和查询模式相对固定,后台SQL模式往往是确定的。对于这样的场景,选择使用MySQL存储结果数据,用户可以选择执行批处理并从接口发送邮件。在Doris平台中,报表类查询延迟通常低于第二级。
3、多维分析
这里提到的多维分析还要求数据是结构化的,并且适合于相对灵活的场景,例如数据分析条件和聚合维度。数据分析通常定义为多维分析。与报表类分析相比,多维分析的查询延迟稍微慢一些,约为10秒。
二、具体案例
案例分析 1:百度统计
百度statistics为站长提供了多种分析服务,如流量分析、网站分析、受众分析等。服务网站数量超过450W,日均查询量达到1500W, QPS (Querie / s)峰值超过1400,日均新增数据量超过2TB;数据导入频率为5分钟,平均查询延迟为30ms。
案例分析 2:百度云系统
1、百度云交易系统
百度云交易系统主要提供订单、账单、扣款、交易流程等TB级数据的存储和实时查询服务。数据量约为12TB,每5分钟导入一次。
2、百度云数据中心
百度云数据中心主要提供百度云业务分析、产品分析、用户分析等分析服务;提供多维(100+)分析,高性能(秒)BI能力;百度云数据中心每日处理数据量约为1T(略小于百度统计量,查询效率略高于百度统计量),分钟级导入。以下是百度云数据中心页面截图:
▌Doris 整体架构
一、Doris 整体架构
Doris的总体架构类似于TiDB。使用MySQL协议,用户可以使用任何MySQL ODBC/JDBC和MySQL客户机直接访问Doris。Doris中的模块包括FE和BE。FE主要负责元数据的管理和存储,以及查询的解析。在用户请求FE进行解析和计划之后,特定的执行计划将被发送到be, be将完成。查询的特定执行。BE节点主要负责数据的存储和查询计划的执行。目前,平台的FE部分主要使用Java, BE部分主要使用c++。
二、Doris 数据分布
如果从表的角度来看数据结构,用户的表将被分割成多个平板,平板将被存储在多个副本中,并存储在不同的BEs中,以确保高可用性和高可靠性。
三、Doris 的使用方式
Doris 的使用方式和 MySQL 类似,创建 database,创建 table,导入数据、执行查询等。具体详见下图:
▌Doris 关键技术
一、数据可靠性
1、元数据使用 Memory+Checkpoint+Journal ( 分别是什么?),使用 BTBJE ( 类似于 Raft ) 协议实现高可用性和高可靠性。
2、Doris在内部管理数据的多个副本,并自动修复它。确保数据的高可用性和高可靠性。在服务器停机的情况下,服务仍然可用,数据没有丢失。
二、易运维
无外部依赖:
Doris 部署无外部依赖,只需要部署 BE 和 IBE 即可搭建起一个集群。
支持 Online Schema Change
支持在线更改表模式(添加和删除列,创建Rollup),不会影响当前服务,不会阻塞读、写等;这个执行是异步的(用户不需要一直盯着它看)
数据库同步操作和异步操作:
同步,所有操作完成后,结果返回给用户;也就是说,写完数据库后,用户得到响应,用户体验不佳;
异步,不等待所有操作等,相应的用户请求;也就是说,相应的用户请求,然后慢慢写到数据库中,用户体验会更好。缓存机制(即消息队列)是用于异步操作的典型应用程序。
1、副本自动均衡
传统数据库的扩(缩)容比较麻烦,有时甚至需要重做数据;而 Doris 数据库只需要一条 SQL ( 无须额外操作 ) 即可实现扩(缩)容。
2、内置监控
使用 Prometheus、Grafana 将监控项指标列出。
下图为 Doris 默认配置面板:
三、MySQL 兼容性
MySQL 的兼容性从两方面体现:
1、兼容 MySQL 的网络协议 ( MySQL Network Protocol )
2、兼容 MySQL 语法,使用 MySQL 语法可对 Doris 数据库进行查询
关于 MySQL 语法的兼容性,前文已经描述过,这里不再赘述;
对于MySQL网络协议兼容性,举个简单的例子:MySQL的调度服务器代理可以直接用作Doris代理。
Doris 的前端展示,可以使用 MySQL 专属展示器 Tableu。下图就是使用 Tableu 将 Doris 数据可视化的一个范例。
Doris 与 R 语言可以实现无缝对接,用 R 语言可直接操作 Doris 数据库,进行数据分析、数据挖掘等工作。
四、支持 MPP
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 数据模型
一、Doris 数据模型特点
1、键值对存储形式:
与字典搜索查询的键值对格式类似,Doris中的所有数据都被分成两列:键列和值列。如下图所示,Time、Id和Country列一起构成键列,而click和Cost列是Value列。Key列用于快速查找,Value列可根据特定的聚合类型用于内部数据聚合。
2、Key 列全局有序排列,查询时方便快速定位查找。
Doris数据模型的一个显著特性是Key列是全局惟一的,因此对于相同的键值有不同的值,然后随后的数据自动与之前的数据聚合(SUM、MIN、MAX、REPLACE)。例如,在下面的图中绿色框中的两行中,相同的Key值对应不同的值;因此,在新值到达后,与之前的数据一起处理SUM,得到最新的数据,这不仅提高了效率,而且提高了数据。加工精度。
二、聚合计算说明:
本部分具体描述相同 Key 值下 Value 值的聚合。
数据以不同的版本导入(例如,下图右侧的91和92版本)。将每个版本间Key 值相同的数据汇总到中间表中,通过聚合得到的结果是左侧的base。
三、按列存储
1、Doris 的数据是按列存储的,每一列单独存放。
2、查询时,只访问查询涉及的列,大量降低 I/O。
3、数据类型一致,方便压缩。
4、数据包建索引,数据即索引。
5、利用原始过滤条件和min、max、sum等智能索引技术,尽可能减小数据集查询范围,大大降低了I/O,提高了查询效率。
四、物化视图
物化视图是提取特定维度以创建对用户透明但具有真实数据的视图表的组合。Doris的物化视图确保用户在更新时直接更新原始表,Doris将确保原始表和物化视图atom生效。查询时,用户只需要指定原始表,Doris将根据查询的具体条件选择适当的物化视图来完成查询。
通常用户可以通过物化视图功能完成以下两种功能。
1、更换索引列进行重排列
2、针对指定列做聚合查询
五、两层分区与分级存储
两层分区:
1、为了方便新旧数据的分离,使用不同的存储介质(如使用SSD的新数据、历史数据SATA)
2、分区减少了大量不必要的重复BE / CE的历史数据,节省了大量的IO和CPU开销
3、两层分区方法简化了表的扩展,并简化了碎片调整(例如,在早期不需要建立太多的碎片,并且碎片数量可以随着业务的增长随时调整)
分级存储
用户可以指定要放在ssd或SATA磁盘上的数据。它还支持基于TTL将冷数据从SSD迁移到SATA,并有效地使用SSD提高查询性能。
六、Doris 在 Elasticsearch 的应用
简介:
1、ES的优点是索引,支持多列索引,甚至支持全文语义索引(如术语、匹配、模糊等);然而,它的缺点是没有分布式计算引擎,并且不支持join之类的操作。
2、与ES相反,Palo具有丰富的SQL计算能力和分布式查询能力;但是,它的索引性能很低,不支持全文本索引。
3、在ES开发过程中,Doris充分利用了ES和Palo的优势,支持Elasticsearch多表连接操作,引入了Elasticsearch的语义搜索功能,扩展了Doris的查询能力。
使用方式:
第一步:建立一张 ES 的外部表。
第二步:在 ES 外部表中导入一些数据:
第三步:使用和 ES 一样的搜索语句,进行全文检索查询:
类似于上图这样的搜索语句,在 SQL 中比较难以表达,但是在 ES 中较容易实现。
七、Kafka 消息队列加载
1、Doris 内部支持订阅 Kafka 数据流,实现直接对接 Kafka:
2、用户数据源经 Kafka 消息队列收集后,可以依次进入到 Doris 中,通过 Doris 做报表展示和决策分析等工作。
3、优点
无需额外组件,用户可直接通过命令实现 Kafka 消息订阅。
精确传输,秒级延迟。
Doris 可自动感知 Kafka 中 partition 变化,合理调度并发导入。
在数据导入这一过程中,支持对 Kafka 原始数据做二次处理(如转换,过滤等)。
八、Doris 其他特性
原子性——即一批数据要么都生效,要么都不生效。
支持单机多盘
向量化执行
UDF ( User Defined Function 用户自定义函数 )
内置 HLL 类型,快速计算 UV
评论 (0人参与)
最新评论