Apache Doris 在美团外卖数仓中的应用实践
既然变化维的历史数据预计算成本巨大,最好的办法就是现用现算,但现用现算需要强大的并行 计算能力。OLAP的实现有MOLAP、ROLAP、HOLAP三种形式,MOLAP以Cube为表现形式,但计 算与管理成本较高。ROLAP需要强大的关系型DB引擎支撑。长期以来,由于传统关系型DBMS的 数据处理能力有限,所以ROLAP模式受到很大的局限性。随着分布式、并行化技术成熟应用,MP P引擎逐渐表现出强大的高吞吐、低时延计算 下去重指标的实时统计,效率较高。 ROLAP :基于实时的大规模并行计算,对集群的要求较高。MPP引擎的核心是通过将数据分散,以实现 CPU、IO、内存资源的分布,来提升并行计算能力。在当前数据存储以磁盘为主的情况下,数据S can需要的较大的磁盘IO,以及并行导致的高CPU,仍然是资源的短板。因此,高频的大规模汇 总统计,并发能力将面临较大挑战,这取决于集群硬件方面的并行计算能力。传统去重算法需要 大量计算资源,实 Engine)和Apache ORCFile (存储格式,编码和压缩)的技术。 Doris的系统架构如下,主要分为FE和BE两个组件,FE主要负责查询的解析、编译、优化、调度 和元数 据管理;BE主要负责查询的执行和数据存储。关于Doris的更多技术细节,可参考其官方文档。 Doris的特点: 同时支持高并发点查询和高吞吐的Ad-hoc查询。 同时支持离线批量导入和实时数据导入。 同时支持明细和聚合查询。0 码力 | 8 页 | 429.42 KB | 1 年前3Doris的数据导入机制以及原子性保证
杨政国 百度资深研发工程师 Doris Committer 01 Doris简介 导入的问题 02 03 Doris中的导入 使用案例 04 Doris简介 01 • 基于MPP(大规模并行处理)架构的分析型数据库 01 Doris简介 • 性能卓越,PB级别数据毫秒/秒级响应 • 适用于高并发、低延时下的多维分析、实时报表等场景 • 由百度自研,2017年开源,2018年贡献给Apache社区后更名为 (C++) BE (C++) BE (C++) 整体架构简单,产品易用 • 高度兼容MySQL协议 • 主从架构,不依赖任何其他组件 • FE负责解析/生成/调度查询计划 • BE负责执行查询计划、数据存储 • 任何节点都可线性扩展 01 Doris 简介 导入的问题 02 典型应用场景——OLAP分析 数据源 数据应用 数据存储 对象存储BOS OLTP WEB端日志 表示数据状态,是否已经生效 • txnId: Doris 内部事务id,用来唯一标示一次导入事务 03 Doris 中的导入 03 Doris 中的导入 LABEL 导入任务 的标识 查看对应 导入任务 的执行情 况 用户可以 自定义 防止用户 重复导入 同一批次 数据使用 相同的label Label • 为了保证At-Most-Once 语意, 用户同一批次数据需要使用相同的Label0 码力 | 33 页 | 21.95 MB | 1 年前3百度智能云 Apache Doris 文档
操作是一个同步操作,返回结果即表示操作结束。用户需要根据返回结果的不同,进行对应的处理。 1. 执行成功,结果集为空 如果 insert 对应 select 语句的结果集为空,则返回如下: 表示执行成功。 表示没有数据被导入。 2. 执行成功,结果集不为空 在结果集不为空的情况下。返回结果分为如下几种情况: 1. Insert 执行成功并可见: 表示执行成功。 表示总共有4行数据被导入。 表示被过滤的行数。 同时会返回一个 数据不可见是一个临时状态,这批数据最终是一定可见的 数据不可见是一个临时状态,这批数据最终是一定可见的 可以通过如下语句查看这批数据的可见状态: 返回结果中的 列如果为 ,则表述数据可见。 3. 执行失败 执行失败表示没有任何数据被成功导入,并返回如下: 其中 显示失败原因。后面的 url 可以用于查询错误的数据: 可以查看到具体错误行。 2. 超时时间 INSERT 操作的超时时间由 会话变量 操作不能指定过滤阈值( )。默认的过滤阈值为 1,即素有错误行都可以被 忽略。 对于有要求数据不能够被过滤的业务场景,可以通过设置 会话变量 为 来确保当有数据被过滤掉的 时候, 不会被执行成功。 5. 性能问题 不见使用 方式进行单行的插入。如果必须这样使用,请将多行数据合并到一个 INSERT 语句中进行批量提交。 ROUTINE-LOAD ROUTINE LOAD ROUTINE0 码力 | 203 页 | 1.75 MB | 1 年前3SelectDB案例 从 ClickHouse 到 Apache Doris
数仓层:语义层接收 SQL 触发计算或查询任务。数仓从 DWD 到 DWS 的计算逻 辑将在语义层中进行定义,且以单个指标和标签的形式进行定义,之后由语义层来 发送命令,生成 SQL 命令给数仓层执行计算。 加速层:从语义层接收配置、触发导入任务,比如加速哪些指标与标签均由语义层 指导。 应用层:向语义层发起逻辑查询,由语义层选择引擎,生成物理 SQL。 架构优势: 写入压力。 通过以上导入优化方案,极大地降低了存储成本, TDW 无需维护两份冗余的数据,Kafka 也只需保存最新待导入的数据。同时该方案整体实时性更好且可控,并且大宽表聚合在 Flink 中执行,可灵活加入各种 ETL 逻辑,离线和实时可对多个开发逻辑进行复用,灵活度较高。 数据模型选择 目前我们生产环境所使用的版本为 Apache Doris 1.1.3,我们对其所支持的 Unique es_optimize,以开启优化开关; 数据写入 ES 时,新增 BK 列用来存储主键 ID Hash 后的分桶序号,算法和 Doris 的分桶算法相同(CRC32); BE 生成 Bucket Join 执行计划,将分桶序号下发到 BE ScanNode 节点,并下推到 ES; ES 对查询出的数据进行 Bitmap 压缩,并将数据的多批次获取优化为一次获取,减 少网络 IO 开销; 0 码力 | 12 页 | 1.55 MB | 1 年前3
共 4 条
- 1