前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >面试官最爱问:Doris如何通过表模型设计提升查询性能100倍?

面试官最爱问:Doris如何通过表模型设计提升查询性能100倍?

作者头像
一臻数据
发布于 2024-12-24 07:51:09
发布于 2024-12-24 07:51:09
23300
代码可运行
举报
文章被收录于专栏:一臻数据一臻数据
运行总次数:0
代码可运行

面对每天几十上百亿条的数据流入,Doris如何合理地设计存储模型?这是摆在每位数据工程师面前的一道必答题。 合适的表模型设计就像建筑的地基,一旦根基不稳,上层再华丽的架构都会成为空中楼阁。明细模型能留存全量数据但查询吃力,主键模型擅长实时更新但不适合预聚合,聚合模型查询飞快但失去了灵活性...每种模型都像是把双刃剑,用好了锦上添花,用错了徒增烦恼。 今天,一起来学习Doris不同表模型的应用场景,让你在处理海量数据时胸有成竹,不再迷茫。

玩转Doris表模型,让数据如鱼得水

不知道你有没有遇到过这样的场景:

刚接手一个数据分析项目,面对纷繁复杂的业务需求,一筹莫展 - 是选择明细模型保留所有原始数据,还是用聚合模型提升查询性能?数据需要更新时,又该如何选择合适的主键模型?

说实话,在Doris表模型的选择上,我也曾走过不少弯路。曾经因为盲目追求查询性能而处处使用聚合模型,结果遇到临时性的多维分析需求时,才发现数据的灵活性被极大地限制了。

数据就像流水,需要一个恰当的容器来承载。Doris提供了三种表模型,就像三种不同的容器,各自有着独特的特点和适用场景。今天,我们就一起深入了解这三种表模型,掌握它们的使用艺术。

明细模型:原汁原味的数据记录

明细模型是最简单直观的表模型,它保留了数据的原始面貌。就像一部高清纪录片,每一帧画面都清晰完整地记录下来。

日志分析系统中,我们会记录用户的每次点击、每次操作、每条错误信息。这些数据没有聚合的需求,也不需要保证唯一性,使用明细模型再合适不过。它不仅能够保存全量数据,还能按照指定的列进行排序,方便后续的查询分析。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE user_logs
(
    timestamp  DATETIME,
    user_id    BIGINT,
    action     VARCHAR(32),
    device     VARCHAR(64),
    location   VARCHAR(128)
)
DUPLICATE KEY(timestamp, user_id)
DISTRIBUTED BY HASH(user_id);

主键模型:数据更新的绝佳选择

在用户画像系统中,我们需要存储用户的基础信息、标签属性等数据。这些数据会随着用户行为不断更新,需要保证每个用户ID只对应一条最新记录。主键模型通过保证key列的唯一性,完美地满足了这一需求。

新版本的Doris(2.1以后)默认采用写时合并实现,极大地提升了查询性能。它就像一个智能管家,在数据写入时就完成了整理工作,确保查询时能够快速找到需要的信息。

聚合模型:报表分析的核心引擎

聚合模型是Doris中最富特色的表模型,它通过预聚合机制大幅提升了查询性能。让我们通过一个电商分析场景来深入理解它的魅力。

假设我们需要统计各个商家的每日销售额。在传统模式下,每次查询都需要扫描所有订单数据再做聚合,面对海量数据时性能往往难以满足需求。而使用聚合模型,我们可以这样设计:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE shop_sales
(
    shop_id     BIGINT,
    sale_date   DATE,
    province    VARCHAR(32),
    total_amount DECIMAL(16,2) SUM,
    order_count BIGINT SUM,
    user_count  BIGINT COUNT_DISTINCT
)
AGGREGATE KEY(shop_id, sale_date, province);

这个设计有几个精妙之处:

  • Key列(shop_id, sale_date, province)定义了数据聚合的粒度
  • Value列使用不同的聚合函数,满足多样化的分析需求
  • 数据在导入时就开始预聚合,大幅减少存储空间和查询时间

模型选择实战指南

模型选择思路

经过多年的实践,X总结出一套模型选择的思路:

1.数据特征分析

  • 评估数据的规模、更新频率、查询模式等特征。比如对于物联网设备上报的传感器数据,由于数据量巨大且无需更新,明细模型是不错的选择。

2.性能目标权衡

  • 写入速度: 明细模型 > 主键模型 > 聚合模型
  • 查询性能: 主键模型(写时合并) > 聚合模型 > 明细模型
  • 灵活性: 明细模型 > 主键模型 > 聚合模型

3.场景匹配度

  • 日志分析、审计追踪 -> 明细模型
  • 用户画像、配置中心 -> 主键模型(写时合并)
  • 指标分析、报表统计 -> 聚合模型

模型应用技巧

1.聚合模型性能优化

使用agg_state类型处理复杂聚合,它能在保持灵活性的同时提供优秀的性能:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE user_metrics
(
    user_id BIGINT,
    metric_date DATE,
    visit_stats agg_state<group_concat(string)> generic
)
AGGREGATE KEY(user_id, metric_date);

2.主键模型更新优化

对于频繁更新的场景,启用部分列更新能显著提升性能:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE user_profile
(
    user_id BIGINT,
    nickname VARCHAR(32),
    avatar VARCHAR(256),
    tags VARCHAR(1024)
)
UNIQUE KEY(user_id)
PROPERTIES(
    "enable_unique_key_merge_on_write" = "true",
    "enable_unique_key_partial_update" = "true"
);

掌握了这些技巧,相信你已经能够从容基于Doris应对各种数据分析场景。

欢迎在评论区分享你在使用Doris表模型时的心得体会。下一篇,我们将深入探讨Doris的其它特性,敬请期待!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一臻数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL 数据类型深度全栈实战,天花板玩法层出不穷!
在 MySQL 数据库的世界里,数据类型是构建高效、可靠数据库的基石。选择合适的数据类型,不仅能节省存储空间,还能提升数据查询和处理的性能
羑悻的小杀马特.
2025/05/11
420
MySQL 数据类型深度全栈实战,天花板玩法层出不穷!
悄悄学习Doris,偷偷惊艳所有人 | Apache Doris四万字小总结
DorisDB是由Apache Doris核心研发团队打造的新一代企业级MPP数据库。它继承了Apache Doris项目十多年研发成果,累积了线上数千台服务器稳定运行经验,并在此基础上,对传统MPP数据库进行了开创性的革新。
王知无-import_bigdata
2021/09/22
7.7K1
深入解析实时数仓Doris:三大数据模型详解
在 Doris 中,数据以表(Table)的形式进行逻辑上的描述。 一张表包括行(Row)和列(Column)。Row 即用户的一行数据。Column 用于描述一行数据中不同的字段。
公众号:码到三十五
2024/04/02
2K0
下一代实时数据库:Apache Doris 【七】数据模型
Doris 的数据模型主要分为 3 类:Aggregate 、Uniq 、Duplicate
Maynor
2023/12/20
5090
硬刚Doris系列」Apache Doris基本使用和数据模型
我们使用 event_day 列作为分区列,建立3个分区: p201706, p201707, p201708
王知无-import_bigdata
2022/06/05
2.7K0
硬刚Doris系列」Apache Doris基本使用和数据模型
「硬刚Doris系列」Doris高级用法
Rollup 可以理解为 Table 的一个物化索引结构。物化 是因为其数据在物理上独立存储,而 索引 的意思是,Rollup可以调整列顺序以增加前缀索引的命中率,也可以减少key列以增加数据的聚合度。
王知无-import_bigdata
2022/06/05
2.1K0
StarRocks学习-初识
StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。
chimchim
2022/11/13
2.4K0
StarRocks学习-初识
"氮气加速器"- 同步物化视图,让查询速度"飞"起来
深夜凌晨两点,数据工程师小张还在加班处理各种复杂的数据分析需求。"这个查询速度也太慢了,都等了半天了还没出结果..." 他揉了揉疲惫的双眼,忍不住吐槽。这不,又收到产品经理的"红色感叹号"消息:"那个实时大屏怎么又卡住了?"
一臻数据
2024/12/24
650
"氮气加速器"- 同步物化视图,让查询速度"飞"起来
Doris 是如何支持多维分析的?什么是预聚合?
在 Apache Doris 中,多维分析(OLAP)是一种重要的功能,它允许用户从多个维度对数据进行查询和分析。Doris 通过多种技术手段支持多维分析,包括预聚合(Pre-Aggregation)、物化视图(Materialized Views)和索引优化等。
代码小李
2025/01/26
1410
告别复杂SQL:数据分析的降维打击
在大数据分析领域,窗口函数已经成为数据分析师手中不可或缺的利器。你是否遇到过需要计算销售同比环比、计算用户留存率、对数据进行分组排名这类分析需求?Apache Doris的窗口函数能够优雅地解决这些复杂的分析场景。
一臻数据
2024/12/24
1260
告别复杂SQL:数据分析的降维打击
GBase 数据库的性能优化与扩展性分析
数据库性能优化是保障系统高效运行的重要课题。在现代化企业应用中,GBase 系列数据库(如 GBase8a、GBase8s、GBase8c)凭借其强大的功能和灵活性,成为企业构建高性能数据库解决方案的优选。本文将从性能优化与扩展性设计的角度,深入探讨 GBase 数据库的核心技术和实际应用。
用户11381600
2024/12/09
1150
查询性能提升 10 倍、存储空间节省 65%,Apache Doris 半结构化数据分析方案及典型场景
随着业务的蓬勃发展,各企业对数据处理的灵活性和可扩展性提出了更高的要求。在此背景下,JSON、XML 等半结构化数据凭借其较强的灵活性在众多企业得到广泛应用。然而,传统关系型数据库结构严格,难以应对半结构化数据的复杂性及多样性。为有效存储及分析这些数据,Apache Doris 针对不同应用场景提供了 Array、Map、Struct、JSON、VARIANT半结构化数据存储分析解决方案。
SelectDB技术团队
2024/09/13
2580
Doris概念及常用操作
Duplicate、Aggregate、Unique 模型,都会在建表指定 key 列。
码客说
2023/09/22
1.4K0
Doris概念及常用操作
MySQL分区表:万字详解与实践指南
MySQL分区 是一种数据库优化的技术,它允许将一个大的表、索引或其子集分割成多个较小的、更易于管理的片段,这些片段称为“分区”。每个分区都可以独立于其他分区进行存储、备份、索引和其他操作。这种技术主要是为了改善大型数据库表的查询性能、维护的方便性以及数据管理效率。
公众号:码到三十五
2024/05/24
6K0
MySQL分区表:万字详解与实践指南
深入解析实时数仓Doris:Rollup上卷表与查询
ROLLUP 在多维分析中是“上卷”的意思,即将数据按某种指定的粒度进行进一步聚合。
公众号:码到三十五
2024/04/10
5210
Coffee都喝了三杯,查询还在跑...别担心!老王这儿有本Doris加速秘笈
在数据库领域,查询性能一直是个热门话题。特别是对于Apache Doris这样的MPP数据库,一个SQL查询的执行可能会涉及几十个甚至上百个节点的协同工作。优化不当,查询性能就会大打折扣。
一臻数据
2024/12/24
1490
Coffee都喝了三杯,查询还在跑...别担心!老王这儿有本Doris加速秘笈
应用实践|Apache Doris物化视图与索引在京东的典型应用
导读:本文分享关于 Doris 的实际使用情况,主要是物化视图、索引的典型应用案例,以及在使用 Doris 过程中的一些心得。
从大数据到人工智能
2022/05/26
1.2K0
应用实践|Apache Doris物化视图与索引在京东的典型应用
面试官问如何优化慢SQL?
---- 文章来源:https://c1n.cn/tEsnA 前言 在应用开发的早期,数据量少,开发人员开发功能时更重视功能上的实现,随着生产数据的增长,很多 SQL 语句开始暴露出性能问题,对生产的影响也越来越大,有时可能这些有问题的 SQL 就是整个系统性能的瓶颈。 SQL 优化一般步骤 | 通过慢查日志等定位那些执行效率较低的 SQL 语句 | explain 分析SQL的执行计划 需要重点关注 type、rows、filtered、extra。 type 由上至下,效率越来越高: ALL 全表扫描
java思维导图
2022/03/31
8860
面试官问如何优化慢SQL?
高时效、低成本, Apache Doris 在文旅业态下的统一数据中台实践
导读:无锡拈花云科技服务有限公司(以下简称拈花云科)是由中国创意文旅集成商拈花湾文旅和北京滴普科技有限公司共同孵化组建的。拈花云科以数字化思维为导向,致力于成为文旅目的地数智化服务商。2022 年底,拈花云科 NearFar X Lab 团队在数据需求的驱动下,开始调研并引进 Apache Doris 作为新架构下的数据仓库选型方案。本文主要介绍了拈花云科数据中台架构从 1.0 到 2.0 的演变过程,以及 Apache Doris 在交付型项目和 SaaS 产品中的应用实践,希望本文分享的内容能对大家有所启发。
深度学习与Python
2023/08/10
1.1K0
高时效、低成本, Apache Doris 在文旅业态下的统一数据中台实践
滴滴 x StarRocks:极速多维分析创造更大的业务价值
滴滴集团作为生活服务领域的头部企业,正在全面测试和上线StarRocks,其中橙心优选经过一年多的数据体系建设,我们逐渐将一部分需要实时交互查询、即席查询的多维数据分析需求由ClickHouse迁移到了StarRocks中,StarRocks在稳定性、实时性方面也给了我们良好的体验,接下来以StarRocks实现的漏斗分析为例介绍StarRocks在橙心优选运营数据分析应用中的实践。
九州暮云
2021/09/29
7930
滴滴 x StarRocks:极速多维分析创造更大的业务价值
推荐阅读
相关推荐
MySQL 数据类型深度全栈实战,天花板玩法层出不穷!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验