什么是 StarRocks?
StarRocks 是 新一代极速全场景 MPP (Massively Parallel Processing) 数据库。StarRocks 的愿景是能够让用户的 数据分析变得更加简单和敏捷。用户无需经过复杂的预处理,就可以用 StarRocks 来支持多种数据分析场景的极速分析。
为了满足业务上的分析需求 StarRocks 设计了四种数据模型(明细模型、聚合模型、更新模型、主键模型)它们有各自的特点以适配不同的业务场景。本文将从创建数据模型表开始,配合简洁的案例,来讲解明细模型的用法和特点。
明细模型究竟是啥?
首先我们来看 StarRocks 官方的定义:
明细模型是默认的建表模型。如果在建表时未指定任何模型,默认创建的是明细类型的表。 创建表时,支持定义排序键。如果查询的过滤条件包含排序键,则 StarRocks 能够快速地过滤数据,提高查询效率。明细模型适用于日志数据分析等场景,支持追加新数据,不支持修改历史数据。 https://docs.starrocks.io/zh/docs/table_design/table_types/duplicate_key_table/
其次我们来看下 StarRocks 明细模型的标准建表语句与 MySQL 的差异:

MySQL 与 StarRocks 建表语句对比
可以看到除了 StarRocks 特有的关键字之外,两者语法大致是相同的。通过上述内容,我们可以总结以下关于 StarRocks 明细模型的信息:
如果在建表语句中不指定具体模型,也就是省略不写,默认就是 DUPLICATE KEY 明细模型,并且会自动选取前三列作为排序键
指定排序键的作用类似于 MySQL 给列设置普通索引,目的是为了提高查询效率
写入的数据无论是否完全一致,都会插入到数据库中且不支持 Update 语法
以上信息就是明细模型的特点,我们从对比的角度讲,明细模型大致相当于:
MySQL 具有普通索引的无主键表,并且不支持 Update 操作。
怎么建表?
使用 CloudDM,添加完 StarRocks 数据源之后,在表视图中右键方式开始新建表操作:

新建表
配置表名等基本信息

编辑表信息
添加列信息,在结构设计器中选择列,然后点击增加按钮新建一个列,在右侧可以配置列的信息

编辑列
设置表的数据模型,点击数据模型,点击添加类型选择“明细模型”,接着在下方选择排序键

编辑数据模型
配置排序键,在右方具体选择列,多个排序键列需要多次点击增加

编辑排序键
点击保存,生成建表语句,可选择立即执行或者复制SQL语句

生成建表语句并执行
怎么写数据?
右键点击新建表,并选择 编辑数据

进入数据编辑功能
准备三行数据,前两行数据完全相同,点击 "+" 符号,填写完成后点击提交,保存这三条数据

插入数据
查看插入的数据,发现三条都已写入,验证明细模型的特点:写入的数据无论是否完全一致,都会插入到数据库中。如果选择的是 StarRocks 聚合模型,上面三条数据插入之后就会变为 2 条

查看数据
验证是否支持 Update,双击 “SR_TEST” 库打开新的查询窗口,针对这个表尝试做一次 UPDATE 操作,结果执行报错:

测试 UPDATE 语句
CloudDM 可视化数据编辑会直接禁用更改和 StarRocks 数据库约束保持一致

数据库特性良好的兼容
浅看 StarRocks 和 MySQL 分析性能
查询总数
MySQL 表耗时 1106 毫秒

MySQL 使用 count 函数查询总行数
StarRocks 耗时 58 毫秒

StarRocks 使用 count 函数查询总行数
查询最小值
MySQL 表耗时 6128 毫秒

MySQL 使用 min 函数查询最小值
StarRocks 耗时 39 毫秒

StarRocks 使用 min 函数查询最小值
查询最大值
MySQL 表耗时 8385 毫秒

MySQL 使用 max 函数查询最大值
StarRocks 耗时 40 毫秒

StarRocks 使用 max 函数查询最大值
查询平均值
MySQL 表耗时 6430 毫秒

MySQL 使用 avg 函数查询平均值
StarRocks 耗时 75 毫秒

StarRocks 使用 avg 函数查询平均值
总结
本文我们简要介绍了 StarRocks 明细模型是什么,以及如何通过 CloudDM 进行可视化建表及数据写入操作,然后我们对比了 min、max、agv、count 四个聚合函数在 MySQL 和 StarRocks 上的性能差异,感受了 StarRocks 的魅力。相信在包含 MySQL 的高性能在线业务系统中,如果存在使用聚合、join等分析场景,叠加 StarRocks 使用将会是一个不错的方案。




