StarRocks最佳实践经验

 目录

一、部署

1.1 容量规划

1.2 基础环境配置

1.3 机器配置

1.3.1 FE节点

1.3.2 BE节点

1.4 部署方案

二、建模

2.1 建表规范

2.2 模型选择

2.3 排序列和前缀索引选择

2.4 分区选择

2.5 分桶选择

2.6 字段类型

2.7 索引选择

2.7.1 Bitmap索引

2.7.2 Bloom filter索引

三、数据导入

3.1 使用建议

3.2 数据生命周期

四、数据查询

4.1 高并发场景

4.2 数据精度

4.3 SQL 查询

4.4 使用物化视图加速查询

4.4.1 bitmap_union精确去重

4.4.2异步物化视图最多支持3层嵌套

4.5 利用Cache加速查询

五、监控


 文章介绍StarRocks在行业的最佳实践经验,包括部署、建模、导入、查询和监控五个模块。

一、部署

1.1 容量规划

【建议】参考StarRocks集群配置推荐做容量规划,具体参考:StarRocks集群配置推荐 - 经验教程 - StarRocks中文社区论坛

1.2 基础环境配置

【必须】参考检查环境配置,尤其关注 swap 关闭、overcommit 设置为1、ulimit 配置合理等。具体参考:检查环境配置 | StarRocks

1.3 机器配置

1.3.1 FE节点

  • 【建议】 8C32GB;
  • 【必须】数据盘>=200GB,建议 SSD;

1.3.2 BE节点

  • 【建议】CPU:内存比,1:4,生产最小配置必须是 8C32GB+
  • 【建议】单节点磁盘容量建议 10TB,数据盘建议最大单盘 2TB,建议 SSD 或者 NVME(如果是 HDD,建议吞吐>150MB/s,IOPS>500)
  • 【建议】集群中节点同构(机器规格一样,避免木桶效应)

1.4 部署方案

  • 【必须】生产环境必须最小集群规模3FE+3BE(建议FE和BE独立部署),如果混合部署,必须配置be.conf中的mem_limit 为减去其他服务后剩余内存量,例如机器内存40G,上面已经部署了FE,理论上限会用8G,那么配置下mem_limit=34G(40-8-2),2G作为系统预留。
  • 【必须】生产必须FE高可用部署,1Leader+2Follower,如果需要提高读并发,可以扩容 Observer 节点。
  • 【必须】生产必须使用负载均衡器连接集群进行读写,一般常用 Nginx、Haproxy、F5 等

二、建模

2.1 建表规范

  • 仅支持UTF8编码;
  • 不支持修改表中的列名;
  • VARCHAR最大长度 1048576;
  • KEY列不能使用FLOAT、DOUBLE 类型;
  • 数据目录名,数据库名,表名,视图名,用户名,角色名大小写敏感,列名和分区名大小写不敏感;
  • 主键模型中,主键长度不能超过128字节;

2.2 模型选择

  • 如果想要保留明细,建议使用明细模型;
  • 如果有明确主键,主键非空,写少读多,非主键列要利用索引,建议使用主键模型;
  • 如果有明确主键,主键可能为空,写多读少,建议使用更新模型;
  • 如果只想保留聚合数据,建议使用聚合模型;

2.3 排序列和前缀索引选择

    duplicate key、aggregate key、unique key 中指定的列,StarRocks3.0 以前版本,主键模型中排序列通过 primary key 指定,StarRocks3.0 以后版本,主键模型中排序列通过 order by指定。

    由于StarRocks底层数据是按照排序键排序后存储的,而前缀索引是在key (duplicate key、aggregate key、unique key、primary key)排序的基础上,实现的一种根据给定一定数量(不超过3列,不超过36个字节,遇到字符串会自动截断)前缀列,每间隔一定行数(1024),生成的一个索引项 (稀疏索引)。当查询的过滤条件命中前缀索引时,就能快速定位到数据存储所在的比较精确地址,在使用前缀索引时需注意:

  • 经常作为查询条件的列,建议选为排序列,例如经常用user_id 过滤,where user_id=234,可以把 user_id 放在第一列;
  • 排序列建议选择3-5列,过多会增大排序开销,降低导入效率;
  • 前缀索引不超过36字节,不能超过3列,遇到 VARCHAR 会截断,前缀索引中不能包含 FLOAT 或 DOUBLE 类型的列;

   因此可以结合实际业务查询场景,在确定Key列以及字段顺序时,要充分考虑前缀索引带来的优势。尽可能将经常需要查询的Key列字段,放置在前面,字段数据类型尽量选择date日期类型或者int等整数类型。

  前缀索引的详细介绍见:

Doris存储层设计介绍1——存储结构设计解析(索引底层结构)_doris底层结构-CSDN博客

举例:

CREATE TABLE site_access
(
    site_id BIGINT DEFAULT '10',
    city_code INT,
    site_name VARCHAR(50),
    pv BIGINT DEFAULT 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值