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. 建立多个物化视图势必会导入效率。
相关推荐
todoitbo26 分钟前
多模数据库技术解析:以KingbaseES MongoDB兼容版为例
数据库·mongodb·kingbasees·金仓数据库
正在走向自律29 分钟前
ksycopg2实战:Python连接KingbaseES数据库的完整指南
数据库·python·国产数据库·kingbase·kingbasees·数据库平替用金仓·ksycopg2
廋到被风吹走31 分钟前
【数据库】【MongoDB】全栈深度指南:文档模型到分布式集群
数据库·分布式·mongodb
·云扬·42 分钟前
MySQL各版本核心特性演进与主流分支深度解析
数据库·sql·mysql
爬山算法43 分钟前
Hibernate(47)Hibernate的会话范围(Scope)如何控制?
java·后端·hibernate
砚边数影1 小时前
AI开发依赖引入:DL4J / Java-ML 框架 Maven 坐标配置
java·数据库·人工智能·深度学习·机器学习·ai·maven
砚边数影1 小时前
AI环境搭建(一):JDK17 + Maven 配置,Java开发环境标准化流程
数据库·人工智能·ai·ai编程
檀越剑指大厂1 小时前
金仓数据库以“多模融合”引领文档数据库国产化新篇章
数据库
煎蛋学姐1 小时前
SSM星河书城9p6tr(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·用户管理·ssm 框架·星河书城·线上书城
jason成都2 小时前
实战 | 国产数据库 R2DBC-JDBC 桥接踩坑记 - JetLinks适配达梦数据库
java·数据库·物联网