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. 建立多个物化视图势必会导入效率。
相关推荐
一只自律的鸡32 分钟前
【MySQL】第二章 基本的SELECT语句
数据库·mysql
liliangcsdn2 小时前
如何使用python创建和维护sqlite3数据库
数据库·sqlite
QX_hao6 小时前
【Go】--map和struct数据类型
开发语言·后端·golang
MC丶科6 小时前
【SpringBoot 快速上手实战系列】5 分钟用 Spring Boot 搭建一个用户管理系统(含前后端分离)!新手也能一次跑通!
java·vue.js·spring boot·后端
G探险者7 小时前
为何一个系统上线要经过N轮测试?带你看懂企业级发布体系
后端
TDengine (老段)8 小时前
TDengine 数学函数 DEGRESS 用户手册
大数据·数据库·sql·物联网·时序数据库·iot·tdengine
TDengine (老段)8 小时前
TDengine 数学函数 GREATEST 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
安当加密8 小时前
云原生时代的数据库字段加密:在微服务与 Kubernetes 中实现合规与敏捷的统一
数据库·微服务·云原生
lang201509288 小时前
Spring Boot 入门:5分钟搭建Hello World
java·spring boot·后端