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. 建立多个物化视图势必会导入效率。
相关推荐
就叫_这个吧5 小时前
Redis从基础命令到核心机制简单介绍
数据库·redis·缓存
dear_bi_MyOnly5 小时前
【MyBatis 操作数据库】
java·数据库·学习·mybatis·学习方法
2601_953720825 小时前
【计算机毕业设计】基于Spring Boot的心理健康咨询与评测系统的设计与实现
java·spring boot·后端
DBA_G6 小时前
南大通用GBase 8s数据库新存储引擎核心能力二
数据库·微服务·架构
东方小月7 小时前
从零开发一个 Coding Agent(四):使用状态机校验大模型事件流
前端·人工智能·后端
都叫我大帅哥7 小时前
“让AI修就行”?我劝你收回这句话——来自一位Java博主的硬核反常识
后端
whyfail7 小时前
前端学 Spring Boot(8):接口为什么越用越慢?
前端·spring boot·后端
衣乌安、8 小时前
数据库事务原理与回滚机制
数据库
Muscleheng8 小时前
Spring Boot 3.x 集成 DeepSeek 实现 Function Calling(工具调用)
人工智能·spring boot·后端·ai·spring ai·deepseek