StarRocks-基础

Starrocks-简介

1、Starrocks-介绍
StarRocks(原名 Doris)是一款高性能的分布式 OLAP(在线分析处理)数据库,专为实时分析和大规模数据处理设计。它最初由百度开发并开源,后来由社区维护和发展。StarRocks 以其卓越的性能、易用性和可扩展性,广泛应用于实时数据分析、数据仓库、商业智能(BI)等场景。

alt text

2、StarRocks-核心特点
1、高性能:
  基于列式存储和向量化执行引擎,提供极快的查询速度。
  支持实时数据摄入和分析,适用于低延迟场景。

2、分布式架构:
  支持水平扩展,能够处理 PB 级别的数据。
  自动分片和数据均衡,确保高可用性和负载均衡。

3、兼容性:
  兼容 MySQL 协议,支持标准 SQL 语法。
  支持与主流 BI 工具(如 Tableau、Superset)集成。

4、实时分析:
  支持实时数据摄入和查询,适用于实时监控和实时报表。

5、易用性:
  提供简单易用的 SQL 接口,支持复杂查询和聚合操作。
  支持多种数据导入方式(如 Kafka、HDFS、本地文件)。

6、多租户支持:
  支持多租户架构,确保数据隔离和资源控制。
3、Starrocks-架构
StarRocks 的架构主要包括以下组件:
1、Frontend(FE)
  负责 SQL 解析、查询优化、元数据管理和调度。
  提供 MySQL 协议接口,与客户端交互。

2、Backend(BE)
  负责数据存储和查询执行。
  采用列式存储和向量化执行引擎,提供高性能查询。

3、Metadata(元数据)
  存储表结构、分区信息、副本信息等元数据。
  由 FE 管理,支持高可用。

4、Storage(存储)
  数据以列式存储,支持高效压缩和快速扫描。
  支持多副本存储,确保数据高可用。
4、StarRocks-核心功能
1、数据导入
  支持多种数据导入方式:
  Stream Load:通过 HTTP 协议实时导入数据。
  Broker Load:从 HDFS 或对象存储导入数据。
  Routine Load:从 Kafka 实时导入数据。
  Insert Into:通过 SQL 语句插入数据。

2、数据查询
  支持标准 SQL 语法,包括复杂查询、聚合、窗口函数等。
  支持实时查询和批量查询。

3、数据分区与分桶
  支持按时间、范围等条件进行分区。
  支持分桶(Bucketing),优化数据分布和查询性能。

4、数据副本与高可用
  支持多副本存储,确保数据高可用。
  自动故障检测和恢复。

5、数据压缩
  支持多种压缩算法(如 Zstandard、LZ4),减少存储空间。
5、Starrocks-安装与部署
5-1、系统要求
操作系统:Linux(推荐 CentOS 7+ 或 Ubuntu 16.04+)。
内存:至少 16GB。
磁盘:SSD 推荐。
5-2、下载 StarRocks 安装包
从 StarRocks GitHub 或官网下载最新版本。
https://github.com/StarRocks/starrocks
5-3、解压安装包
tar -xzf starrocks-x.x.x.tar.gz
5-4、配置 FE 和 BE
编辑 fe.conf 和 be.conf,配置元数据路径、数据路径等。
5-5、启动 FE 和 BE
# 启动 FE
./fe/bin/start_fe.sh --daemon

# 启动 BE
./be/bin/start_be.sh --daemon

5-6、使用 MySQL 客户端连接 StarRocks
mysql -h <FE_IP> -P 9030 -uroot
6、StarRocks-常用操作
6-1、创建数据库和表
CREATE DATABASE example;
USE example;

CREATE TABLE user_behavior (
    user_id INT,
    item_id INT,
    behavior_type VARCHAR(10),
    behavior_time DATETIME
)
DUPLICATE KEY(user_id, item_id)
DISTRIBUTED BY HASH(user_id) BUCKETS 10;
6-2、导入数据
curl --location-trusted -u root: -T data.csv -H "label:label1" -H "column_separator:," http://<FE_IP>:8030/api/example/user_behavior/_stream_load

例:

curl --location-trusted -u root:****** -H "column_separator:," -T 001.csv -XPUT http://192.168.10.20:8030/api/ads_fineReport/ads_school_Conversion_rate_analysis_cust/_stream_load


6-3、查询数据
SELECT user_id, COUNT(*) 
FROM user_behavior  
WHERE behavior_type = 'click' 
GROUP BY user_id;
6-4、Starrocks-查询数据库所有表对应的列数据信息

alt text

alt text

7、日志查询
7-1、日志表介绍 starrocks_audit_db__.starrocks_audit_tbl__
列明 含义 备注
【queryId】 查询的唯一ID
【timestamp】 查询开始时间
【clientIp】 客户端IP
【user】 查询用户名
【resourceGroup】 资源组名
【db】 查询所在数据库
【state】 查询状态(EOF,ERR,OK)
【errorCode】 错误码
【queryTime】 查询执行时间(毫秒) 1秒(s)= 1000毫秒(ms)
【scanBytes】 查询扫描的字节数
【scanRows】 查询扫描的记录行数
【returnRows】 查询返回的结果行数
【cpuCostNs】 查询CPU耗时(纳秒) 1秒(s)= 1000毫秒(ms)
1秒(s)= 1,000,000 微秒(μs)
1秒(s)= 1,000,000,000 纳秒(ns)
【memCostBytes】 查询消耗内存(字节) 1MB=1024KB =(1024*1024)字节(B)
1字节(Byte) = 8字位(bit)
1个汉字 = 2个字节
一个ASCII码用一个字节表示
【stmtId】 SQL语句增量ID
【isQuery】 SQL是否为查询(1或0)
【feIp】 执行该语句的FE IP
【stmt】 原始SQL语句
【digest】 SQL指纹
【planCpuCosts】 查询规划阶段CPU占用(纳秒)
【planMemCosts】 查询规划阶段内存占用(字节)
7-2、查看日志信息(多用于性能优化排查)

alt text

SELECT stmt, *
FROM starrocks_audit_db__.starrocks_audit_tbl__  -- starrocks 查询日志存储表
where stmt like 'SELECT yl_num,cust_name,user_name,ee_no,school_name,area_name%'
ORDER BY `timestamp` DESC
7-3、性能优化排查案例: 00:30 至 00:45 starrocks 数据库告警 内存 CPU 使用

alt text

select SUBSTRING(`timestamp`,1,16) , count(1) ,
cast(SUM(memCostBytes) / (1024*1024*1024) as decimal(18,2)) as `内存使用(G)` ,
cast(SUM(memCostBytes) / (1000000000 * 60) as decimal(18,2)) as `CPU使用(分)`
from starrocks_audit_db__.starrocks_audit_tbl__ sat
where SUBSTRING(`timestamp`,1,16) BETWEEN '2024-06-12 00:30' and '2024-06-12 00:45'
group by SUBSTRING(`timestamp`,1,16)
order by SUBSTRING(`timestamp`,1,16) desc

alt text

--
select '00:35' as `时间`, temp_01.db as `数据库` , temp_01.num as `查询数量`, temp_01.内存使用(G), temp_01.CPU使用(分),
'00:36' as `时间`, temp_02.db as `数据库` , temp_02.num as `查询数量`, temp_02.内存使用(G), temp_02.CPU使用(分),
'00:37' as `时间`, temp_03.db as `数据库` , temp_03.num as `查询数量`, temp_03.内存使用(G), temp_03.CPU使用(分)
from (
    select db , count(1) as num,
    cast(SUM(memCostBytes) / (1024*1024*1024) as decimal(18,2)) as `内存使用(G)` ,
    cast(SUM(memCostBytes) / (1000000000 * 60) as decimal(18,2)) as `CPU使用(分)`
    from starrocks_audit_db__.starrocks_audit_tbl__ sat
    where SUBSTRING(`timestamp`,1,16)  = '2024-06-12 00:35'
    group by db
) temp_01
left join (
    select db , count(1) as num,
    cast(SUM(memCostBytes) / (1024*1024*1024) as decimal(18,2)) as `内存使用(G)` ,
    cast(SUM(memCostBytes) / (1000000000 * 60) as decimal(18,2)) as `CPU使用(分)`
    from starrocks_audit_db__.starrocks_audit_tbl__ sat
    where SUBSTRING(`timestamp`,1,16)  = '2024-06-12 00:36'
    group by db
) temp_02 on temp_01.db = temp_02.db
left join (
    select db , count(1) as num,
    cast(SUM(memCostBytes) / (1024*1024*1024) as decimal(18,2)) as `内存使用(G)` ,
    cast(SUM(memCostBytes) / (1000000000 * 60) as decimal(18,2)) as `CPU使用(分)`
    from starrocks_audit_db__.starrocks_audit_tbl__ sat
    where SUBSTRING(`timestamp`,1,16)  = '2024-06-12 00:37'
    group by db
) temp_03 on temp_01.db = temp_03.db
select temp_01.stmt as `SQL语句` ,
'00:34' as `时间`, temp_03.num as `查询数量`, temp_03.内存使用(G), temp_03.CPU使用(分),
'00:35' as `时间`, temp_02.num as `查询数量`, temp_02.内存使用(G), temp_02.CPU使用(分),
'00:36' as `时间`, temp_01.num as `查询数量`, temp_01.内存使用(G), temp_01.CPU使用(分),
'00:37' as `时间`, temp_04.num as `查询数量`, temp_04.内存使用(G), temp_04.CPU使用(分)
from (
    select left(stmt, 100) as stmt , count(1) as num,
    cast(SUM(memCostBytes) / (1024*1024*1024) as decimal(18,2)) as `内存使用(G)` ,
    cast(SUM(memCostBytes) / (1000000000 * 60) as decimal(18,2)) as `CPU使用(分)`
    from starrocks_audit_db__.starrocks_audit_tbl__ sat
    where SUBSTRING(`timestamp`,1,16)  = '2024-06-12 00:36'
    and db = 'datawarehouse'
    group by left(stmt, 100)
) temp_01
left join (
    select left(stmt, 100) as stmt , count(1) as num,
    cast(SUM(memCostBytes) / (1024*1024*1024) as decimal(18,2)) as `内存使用(G)` ,
    cast(SUM(memCostBytes) / (1000000000 * 60) as decimal(18,2)) as `CPU使用(分)`
    from starrocks_audit_db__.starrocks_audit_tbl__ sat
    where SUBSTRING(`timestamp`,1,16)  = '2024-06-12 00:35'
    and db = 'datawarehouse'
    group by left(stmt, 100)
) temp_02 on temp_01.stmt = temp_02.stmt
left join (
    select left(stmt, 100) as stmt , count(1) as num,
    cast(SUM(memCostBytes) / (1024*1024*1024) as decimal(18,2)) as `内存使用(G)` ,
    cast(SUM(memCostBytes) / (1000000000 * 60) as decimal(18,2)) as `CPU使用(分)`
    from starrocks_audit_db__.starrocks_audit_tbl__ sat
    where SUBSTRING(`timestamp`,1,16)  = '2024-06-12 00:34'
    and db = 'datawarehouse'
    group by left(stmt, 100)
) temp_03 on temp_01.stmt = temp_03.stmt
left join (
    select left(stmt, 100) as stmt , count(1) as num,
    cast(SUM(memCostBytes) / (1024*1024*1024) as decimal(18,2)) as `内存使用(G)` ,
    cast(SUM(memCostBytes) / (1000000000 * 60) as decimal(18,2)) as `CPU使用(分)`
    from starrocks_audit_db__.starrocks_audit_tbl__ sat
    where SUBSTRING(`timestamp`,1,16)  = '2024-06-12 00:37'
    and db = 'datawarehouse'
    group by left(stmt, 100)
) temp_04 on temp_01.stmt = temp_04.stmt

OLAP-介绍

1、简介
OLAP数据库(Online Analytical Processing,联机分析处理数据库)是一种专为复杂分析和快速查询大量数据而设计的数据库系统。它主要用于支持数据分析和商业智能(BI)应用,能够高效处理多维数据查询。
2、核心特点
1、多维数据模型:支持多维数据视图,便于从不同角度分析数据。
2、快速查询:优化复杂查询,提供快速响应。
3、聚合计算:预先计算和存储聚合数据,加速查询。
4、只读操作:主要用于查询和分析,通常不支持频繁的写操作。
5、大数据支持:能够高效处理大规模数据集。
3、常见应用场景
商业智能:用于生成报表、仪表盘和数据可视化。
数据分析:支持复杂的数据分析和挖掘。
财务分析:用于预算、预测和财务报告。
销售和市场分析:分析销售趋势、市场表现和客户行为。
4、类似Starrocks的OLAP其他数据库
4-1、ClickHouse
特点:高性能列式存储数据库,适合实时数据分析。
优势:高查询性能、高压缩比、支持实时数据插入。
适用场景:实时数据分析、日志处理、时间序列数据。
4-2、Google BigQuery

  特点:Google 提供的云数据仓库服务,适合大规模数据分析。
  优势:高查询性能、支持标准 SQL、与 Google Cloud 生态系统集成。
  适用场景:数据仓库、商业智能、大规模数据分析。
4-3、TiDB

  特点:分布式 NewSQL 数据库,支持 OLTP 和 OLAP。
  优势:高扩展性、高可用性、支持标准 SQL。
  适用场景:实时数据分析、数据仓库、复杂查询。
5、优势
高效分析:快速处理复杂查询和多维分析。
用户友好:提供直观的多维数据视图,便于理解。
高性能:通过预计算和聚合数据,提升查询速度。
可扩展性:支持大规模数据集和复杂分析需求。
6、劣势
高成本:硬件和软件成本较高。
复杂性:部署和管理较为复杂。
数据延迟:预计算和聚合可能导致数据延迟。

MPP-介绍

1、简介
MPP数据库(Massively Parallel Processing Database,大规模并行处理数据库)是一种专为高效处理大规模数据而设计的数据库系统。它通过在多台服务器上并行执行查询任务,显著提升数据处理速度和性能。
2、核心特点
1、并行处理:将数据分布到多个节点,并行执行查询,加快处理速度。
2、分布式架构:数据分散存储在多个节点,支持横向扩展。
3、高性能:通过并行处理,能够快速完成复杂查询和大规模数据分析。
4、可扩展性:通过增加节点,轻松扩展存储和计算能力。
5、高可用性:通常具备数据冗余和故障恢复机制,确保系统稳定运行。
3、常见应用场景
数据仓库:用于存储和分析大量历史数据。
大数据分析:支持复杂查询和实时分析。
商业智能:用于生成报表和进行数据分析。
实时数据处理:适用于需要快速响应的实时数据处理任务。
4、典型代表
4-1、ClickHouse
特点:高性能列式存储数据库,适合实时数据分析。
优势:高查询性能、高压缩比、支持实时数据插入。
适用场景:实时数据分析、日志处理、时间序列数据。
4-2、Google BigQuery
特点:Google 提供的云数据仓库服务,适合大规模数据分析。
优势:高查询性能、支持标准 SQL、与 Google Cloud 生态系统集成。
适用场景:数据仓库、商业智能、大规模数据分析。
5、优势
高效处理大数据:适合PB级数据处理。
灵活扩展:可根据需求增加节点。
高并发支持:能同时处理多个复杂查询。
6、劣势
成本高:硬件和维护费用较高。
复杂性:部署和管理较为复杂。
数据分布优化:需要精心设计数据分布策略以最大化性能。

Starrocks与HBase的区别

1、设计目标
HBase
  目标:分布式、面向列的 NoSQL 数据库,适合实时读写和存储大规模稀疏数据。
  场景:实时数据存储、日志存储、推荐系统、时间序列数据。

StarRocks
  目标:高性能的分布式 SQL 数据库,适合实时数据分析和复杂查询。
  场景:实时数据分析、数据仓库、商业智能、OLAP。
2、数据模型
HBase
  模型:面向列的 NoSQL 数据库,数据按列族存储,适合稀疏数据。
  结构:表、行键、列族、列限定符、时间戳。

StarRocks
  模型:关系型数据库,支持标准 SQL 和复杂查询。
  结构:表、行、列、索引。
3、查询语言
HBase
  语言:不支持 SQL,通过 API(如 Java API)或工具(如 Apache Phoenix)进行数据访问。
StarRocks
  语言:支持标准 SQL,兼容 MySQL 协议,适合复杂查询和数据分析。
4、性能
HBase
  优势:高吞吐量和低延迟的实时读写,适合实时数据存储和访问。
  劣势:不适合复杂查询和数据分析。

StarRocks
  优势:高性能的实时数据分析和复杂查询,支持高并发和低延迟查询。
  劣势:不适合高吞吐量的实时数据写入。
5、架构
HBase
  架构:主从架构,包括 HMaster、RegionServer 和 ZooKeeper。
  存储:基于 HDFS,数据存储在 HFile 中。

StarRocks
  架构:分布式架构,包括前端节点(FE)和后端节点(BE)。
  存储:基于列式存储,支持高效的数据压缩和查询。
6、扩展性
HBase
  扩展性:通过增加 RegionServer 节点扩展存储和计算能力。
StarRocks
  扩展性:通过增加前端和后端节点扩展存储和计算能力。
7、架构
HBase
  场景:实时数据存储、日志存储、推荐系统、时间序列数据。
StarRocks
  场景:实时数据分析、数据仓库、商业智能、OLAP。
8、生态系统
HBase
  生态:与 Hadoop 生态系统紧密集成,如 HDFS、MapReduce、Spark。
StarRocks
  生态:支持与多种数据源集成,如 Kafka、HDFS、MySQL。

posted on   cloud_wh  阅读(23)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示