Doris ——从聚合模型开始

Doris 的聚合模型

Apache Doris 是一个基于MPP架构的高性能、实时的分析数据库,因此比较适合使用在报表分析的场景中

Doris 和 MySQL很像,都是database-table-row的逻辑描述,doris的数据模型主要分为3类:

  • 聚合模型
  • 唯一模型(保证Key的唯一性,类似Primary Key,如果重复会仅保留后面插入的数据)
  • 重复模型(相较于唯一模型,这里允许key重复的同时,仅根据指定key进行排序)

聚合模型中每个列都分为key类型和 value类型,聚合模型会将数据的中key列相同的数据的value聚合到一起

列名 类型 聚合方式 备注
user_id int 用户id
batch_id int 导入批次
city_id int 用户城市id
sex int 性别
age int 年龄
update_time DATETIME REPLACE 用户最后一次更改时间
max_cost int MAX 用户最大消费
count int SUM 用户交互次数

聚合模型局限性

聚合模型中展示的是聚合后的数据,一方面我们没法展示非聚合数据,一方面聚合逻辑不够灵活,一旦场景改变(比如记录用户最大消费 -> 用户平均消费),原有表就不满足需求。

因此我们需要既需要有明细表、也需要可以迅速查询到一些聚合数据

物化视图

物化视图可以给予明细表,将预计计算好的数据集,存储在Doris中,查询时,会自动匹配到最优物化视图

假设用户有一个销售记录表,记录售货员,地址、时间、金额等信息,基于此希望对数据进行分析,记录每个用户的消费总金额 那么有sql

SQL 复制代码
select seller_id, sum(sale_amt) from sales_records group by seller_id

接下来,我们随机插入数据 4718592 条,sql略

如果直接查询,sql耗时为51ms,但是通过建立物化视图:

SQL 复制代码
create materialized view store_amt as select seller_id, sum(sale_amt) from sales_records group by seller_id;

我们可以将计算好的数据提前存储,在查询时,会自动匹配最优的物化视图。通过这种方式,sql的耗时变成了5ms,直接降低了90%的时间成本。

局限性

  1. 物化视图不可以包含相同列的多种聚合方式,比如没法在一个物化视图中统计用户的平均消费,最大消费。
  2. 建立物化视图后不能删除物化视图中不包含的列(尤其是在建立多个物化视图时,这个局限尤为麻烦)
  3. 建立多个物化视图势必会导入效率。
相关推荐
巫山老妖7 小时前
从零开发一个掘金自动发布 Skill,并上架 Clawhub
后端
颜酱7 小时前
图的数据结构:从「多叉树」到存储与遍历
javascript·后端·算法
雨中飘荡的记忆8 小时前
零拷贝技术深度解析
后端
uzong8 小时前
十年老员工的项目管理实战心得:有道有术
后端
Victor35610 小时前
MongoDB(31)索引对查询性能有何影响?
后端
Victor35610 小时前
MongoDB(30)如何删除索引?
后端
lizhongxuan10 小时前
多 Agent 协同机制对比
后端
IT_陈寒11 小时前
SpringBoot项目启动慢?5个技巧让你的应用秒级响应!
前端·人工智能·后端
树上有只程序猿11 小时前
2026低代码选型指南,主流低代码开发平台排名出炉
前端·后端
高端章鱼哥11 小时前
为什么说用OpenClaw对打工人来说“不划算”
前端·后端