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. 建立多个物化视图势必会导入效率。
相关推荐
用户298698530142 分钟前
如何在 C# 中用表格替换 Word 文档中的文本?
后端
树谷-胡老师24 分钟前
公元前3400年至公元2024年全球国家地理边界演变数据集
数据库·arcgis·信息可视化
疯狂的Alex25 分钟前
2010-2022 同等学力申硕国考:软件工程简答题真题汇总
数据库·oracle·软件工程
山东小木25 分钟前
JBoltAI需求分析大师:基于SpringBoot的大模型智能需求文档生成解决方案
人工智能·spring boot·后端·需求分析·jboltai·javaai·aigs
Qlittleboy30 分钟前
tp5的tbmember表闭包查询 openid=‘abc‘ 并且(wx_unionid=null或者wx_unionid=‘‘)
数据库·sql·php
Moonbit36 分钟前
MoonBit 再次走进清华:张宏波受邀参加「思源计划」与「程序设计训练课」
前端·后端·编程语言
RestCloud39 分钟前
一站式数据集成:iPaaS 如何让开发者和业务人员都满意?
前端·后端·架构
稻草猫.1 小时前
Java多线程(一)
java·后端·java-ee·idea
躲在云朵里`1 小时前
Spring Scheduler定时任务实战:从零掌握任务调度
java·数据库·mybatis
小白不想白a1 小时前
【MySQL】常用SQL语句
数据库·sql·mysql