首页 > 其他分享 >快速上手StarRocks

快速上手StarRocks

时间:2023-07-31 16:11:33浏览次数:33  
标签:StarRocks 模型 NULL 主键 上手 排序 快速 id

StarRocks简介

  1. StarRocks(前身为Doris)是新一代极速全场景MPP数据库
  2. StarRocks高效支持实时数据分析
  3. 用户可使用StarRocks构建大宽表、星型模型、雪花模型等多种模型
  4. 快速上手,兼容MySQL Protocol,对现有研发人员非常友好

注:MPP数据库:Massively Parallel Processing 大规模并行处理数据库。通俗来讲:MPP是将任务并行分散到多个服务器和节点上,在每个节点计算完成后,将各自部分的结果汇总在一起得到最终结果

系统架构

:StarRocks系统架构非常简洁,仅有FE(Frontend)与BE(Backend)两类进程。并且这两类模块都可以在线水平扩容

系统架构图

FE(Frontend)

:FE是StarRocks的前端节点,负责管理元数据,管理客户端连接,进行查询规划与查询调度等工作。FE有三种角色:Leader FE,Follower FE,Observer FE。

其中只有Leader FE拥有元数据写操作

BE(Backend)

:BE是StarRocks的后端节点,主要负责数据存储、SQL执行等操作

数据管理

:StarRocks采用列式存储,利用分区分桶机制来进行数据管理。表可按照时间来进行分区,粒度可分为一天或一周。分区内可根据列进行分桶,将数据切割成多个Tablet。下图为数据存储概念图

快速开始

理解数据模型

:建表时,需要指定数据模型(Data Model),这样数据导入至数据模型时,StarRocks会按照排序键对数据进行排序、处理和存储。

注:在明细模型、聚和模型和更新模型中,排序列就是通过各自模型关键字指定的列。从StarRocks 3.0版本起,主键模型解耦了主键列和排序列,排序列通过ORDER BY关键字指定,主键列通过PRIMARY KEY关键字指定

排序键

:数据导入至使用某个数据模型的表时,会按照建表时指定的一列或者多列排序后存储,这部分用于排序的列就称为排序键。

明细模型

:明细模型是默认的建表模型。明细模型适用于日志数据分析等场景,支持追加数据,不支持修改数据,同时数据按照排序键 DUPLICATE KEY 排序,同时排序键不受唯一性约束

CREATE TABLE IF NOT EXISTS detail (
    event_time DATETIME NOT NULL COMMENT "datetime of event",
    event_type INT NOT NULL COMMENT "type of event",
    user_id INT COMMENT "id of user",
    device_code INT COMMENT "device code",
    channel INT COMMENT ""
)
DUPLICATE KEY(event_time, event_type)
DISTRIBUTED BY HASH(user_id)
PROPERTIES (
"replication_num" = "3"
);
使用说明
  1. 在建表语句中,排序键必须要定义在其他列之前

  2. 排序键可以通过 DUPLICATE KEY 显式定义,本文中的排序键为event_time 和 event_type

    注:如果未指定排序键,则默认选择表的前三列作为排序键

  3. 明细模型中排序键可以为部分或者全部维度列

聚和模型

:聚和模型支持定义排序键与指标列,同时为指标列指定聚和函数。当多条数据有相同的排序键时,聚和模型会对指标列使用指定聚和函数进行聚和。通常适用于分析统计与汇总数据

CREATE TABLE IF NOT EXISTS example_db.aggregate_tbl (
    site_id LARGEINT NOT NULL COMMENT "id of site",
    date DATE NOT NULL COMMENT "time of event",
    city_code VARCHAR(20) COMMENT "city_code of user",
    pv BIGINT SUM DEFAULT "0" COMMENT "total page views"
)
AGGREGATE KEY(site_id, date, city_code)
DISTRIBUTED BY HASH(site_id)
PROPERTIES (
"replication_num" = "3"
);
使用说明
  1. 在建表语句中,排序键必须定义在其他列之前
  2. 排序键可以通过 AGGREGATE KEY显式定义
    1. 如果 AGGREGATE KEY,未包含全部维度列,即:除指标列之外的列。则会建表失败
    2. 如果不通过 AGGREGATE KEY 显式定义,则会默认除指标列之外的列均为排序键
    3. 排序键必须满足唯一性约束,通过列值不会更新
  3. 通过在列名后指定聚和函数,定义该列为指标列。

更新模型

:更新模型支持定义主键与指标列,查询时返回主键相同数据中的最新数据。更新模型可以视为聚和模型的特殊情况,指标列指定的聚和函数为REPLACE。更新模型适用于支持实时和频繁更新的场景

CREATE TABLE IF NOT EXISTS orders (
    create_time DATE NOT NULL COMMENT "create time of an order",
    order_id BIGINT NOT NULL COMMENT "id of an order",
    order_state INT COMMENT "state of an order",
    total_price BIGINT COMMENT "price of an order"
)
UNIQUE KEY(create_time, order_id)
DISTRIBUTED BY HASH(order_id)
PROPERTIES (
"replication_num" = "3"
); 
使用说明
  1. 在建表语句中,主键必须定义在其他列之前
  2. 主键通过 UNIQUE KEY定义
  3. 主键必须满足唯一性约束,同时列值不支持修改

主键模型

:主键模型支持分别定义主键和排序键。数据导入后先按照排序键排序后存储。查询时返回主键相同的一组数据中的最新数据。主键模型主要支持实时和频繁等场景的同时,提供高效查询

原理与区别

:主键模型与更新模型的区别主要在于,主键模型查询时不需要做聚合REPLACE操作。其原理主要是由于主键模型采取的Delete + Insert策略。

该策略主要实现方式

  1. StarRocks收到更新指令时,会通过主键找到该条记录的位置,并对其标记为删除,再插入
  2. StarRocks收到删除指令时,同样通过主键找到该条记录位置,对其标记为删除
create table orders (
    dt date NOT NULL,
    order_id bigint NOT NULL,
    user_id int NOT NULL,
    merchant_id int NOT NULL,
    good_id int NOT NULL,
    good_name string NOT NULL,
    price int NOT NULL,
    cnt int NOT NULL,
    revenue int NOT NULL,
    state tinyint NOT NULL
) PRIMARY KEY (dt, order_id)
PARTITION BY RANGE(`dt`) (
    PARTITION p20210820 VALUES [('2021-08-20'), ('2021-08-21')),
    PARTITION p20210821 VALUES [('2021-08-21'), ('2021-08-22')),
    PARTITION p20210929 VALUES [('2021-09-29'), ('2021-09-30')),
    PARTITION p20210930 VALUES [('2021-09-30'), ('2021-10-01'))
) DISTRIBUTED BY HASH(order_id)
PROPERTIES (
    "replication_num" = "3",
    "enable_persistent_index" = "true"
);
使用说明
  1. 建表语句中,主键必须定义在其他列之前
  2. 主键要通过 PRIMARY KEY定义
  3. 主键必须满足唯一性约束,同时不会被修改
  4. 分区列、分区桶必须在主键中

数据分布

:建表时,需要通过PARITION BY & DISTRIBUTED BY来设置分区和分桶。

常见的数据分布方式

  • Round-Robin:以轮询的方式把数据逐个放置在相邻节点
  • Range:按规定区间进行数据分布
  • List;基于离散数值进行数据分布
  • Hash:通过哈希函数进行数据分布

StarRocks的数据分布方式

  • Hash数据分布方式:一张表为一个分区,分桶根据Hash函数进行数据划分
  • Range+Hash数据分布方式:一张表通过RANGE规定区间后拆分为多个分区,每个分区中的分桶按照Hash函数进行划分

上手使用

:StarRocks前端交互采用了MySql协议,因此研发人员无需再学习SQL语法。同时只需通过配置多数据源即可使用

配置多数据源

spring.datasource.dynamic.datasource.#{多数据源名称}.url=jdbc:mysql:loadbalance://#{数据库链接地址,可连接多个地址,用逗号隔开}/#{数据库名}?useUnicode=true&characterEncoding=UTF8&useSSL=true&serverTimezone=Asia/Shanghai
spring.datasource.dynamic.datasource.#{多数据源名称}.username=#{数据库名}
spring.datasource.dynamic.datasource.#{多数据源名称}.password=#{密文}
spring.datasource.dynamic.datasource.#{多数据源名称}.public-key=#{解密私钥}

注意:由于要定义多个数据源,所以在SpringBoot数据源自动配置类中无法确定导入哪个数据源来进行初始化,因此我们需要禁掉Spring Boot的数据源自动配置类

注解方式
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
配置文件方式
spring.autoconfigure.exclude=com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure

使用多数据源

注解方式
// 在使用多数据源的类或者方法上,使用该注解
// package com.baomidou.dynamic.datasource.annotation 包下注解
@DS(value = #{多数据源名称})
例:@DS(value = "StarRocks")
硬编码方式

参考:https://blog.csdn.net/qq_45515182/article/details/126330084

注:推荐使用注解方式

标签:StarRocks,模型,NULL,主键,上手,排序,快速,id
From: https://www.cnblogs.com/steven-07/p/17593714.html

相关文章

  • 怎么学习C语言,才能快速掌握?
    有多年软件行业经验,期间参与过多个C语言项目。要掌握一门编程语言,仅仅投入时间学习是不够的,关键在于实际项目经验。在没有真正实战经验之前,不宜轻易声称掌握某种编程语言,因为编程是积累性的工作,理论知识重要但实践更为关键。学习任何编程语言都需要先掌握理论基础,然后通过项目实战......
  • python 快速创建大文件
    Python快速创建大文件在处理大数据集时,我们有时需要创建大文件进行测试、模拟或其他目的。Python作为一门功能丰富且易于上手的语言,提供了多种方法来快速创建大文件。本文将介绍几种常用的方法,并提供相应的代码示例。方法一:使用os模块写入随机数据importosdefcreate_large_f......
  • 快速幂
    当幂指数很大的时候,线性可能也会超时intqpow(inta,intb,intp){intans=1;a=a%p;while(b){if(b&1)ans=ans*a%p;//不能写成ans*=a,不知道原因,反正会waa=a*a%p;b>>=1;}retur......
  • 手机防窥膜对眼睛危害非常大,快速避坑,避免智商税!
    背景如果你的手机贴了防窥膜,在室外阳光下你想看清楚机屏幕上的文字,是不是有个动作就是调亮屏幕!因为防窥膜透光率比较低,那你就得提高手机亮度。国产的防窥膜透光率只有30%左右韩国进口防窥膜的透光率在50%左右透光率越低意味着对眼晴的影响越大!防窥膜原理防窥膜的原理是手机膜......
  • 实时嵌入式Linux设备基准测试快速入门3实时嵌入式Linux
    第3章实时嵌入式Linux计算机系统与环境之间的交互通常是实时发生的,因此,对于作为计算机系统一部分的嵌入式设备来说,有关实时操作系统的讨论也是一个重要话题。本章将讨论实时系统的特点,介绍在Linux嵌入式设备上实现实时性的主要方法。具体来说,本章将重点分析PREEMPT_RT内核补丁,该......
  • 【SpringBoot】快速入门
    (知识目录)一、SpringBoot快速入门1.1idea创建(1)新建模块,选择SpringInitializer,一定要记得选择SpringBoot的版本为2.7.7注意上面的两个目录一定要是空目录,然后点击apply,OK即可,之后进入到主界面。(2)编写UserController类packagecom.itxiaoguo.controller;importor......
  • 淘宝客新手必看:3分钟快速掌握淘宝京东优惠券赚钱秘籍
    为什么会有优惠券这个东西?每个商家都有自己的品牌定位。如果直接降价会伤害到自己的品牌,发放优惠券就是一个比较好的行销手段。我们熟知的肯德基就是这么做的。今天我们要讲的是淘宝京东领券怎么赚钱。首先,我们来说一下为什么淘宝京东优惠券能够赚钱。实际上,这个赚钱的核心就是信......
  • 快速上手Webpack打包指南:用简单的步骤掌握Webpack的使用技巧
    目录概念:1.webpack打包简介1.0多个JS文件打包:1.1webpack数组形式1.2webpack对象形式总结Webpack的打包过程可以总结为以下几个步骤:1.入口点配置:在Webpack的配置文件中,我们需要指定一个或多个入口点(entrypoints),这些入口点是我们应用程序的起点,Webpack会从这些入口点开始......
  • 瑞芯微|rk3568 uart快速上手
    一、调试环境平台:rk3568kernel:4.19.232SDK:rk_android11.0_sdkBoard:rk3568-evb1-ddr4-v10二、rk3568uart控制器1.特性:rk3568UART控制器特性如下:-UART控制器通道:UART0~UART8【datasheet好像写的有问题】-包含2组64字节的FIFO,用于接收和传输-支持流控......
  • 红队攻防-外网快速打点方法&技巧总结
    原文链接:https://blog.csdn.net/ss810540895/article/details/128531723一、打点的基本认识做过红队的小伙伴,对打点一定不陌生,这是一项基本技能。所谓打点,就是拿到一台机器的shell。打点的一般目的在于利用这台机器,做一个跳板,然后进入内网。通常给予充分时间的情况下,打点不......