温岭市葬花

StarRocks(SR)的基本概念、架构及基本使用详解

2026-04-08 09:10:02 浏览次数:0
详细信息

StarRocks 基本概念、架构及使用详解

一、基本概念

1. 核心特点

StarRocks(原名 Doris)是一个现代化的MPP(大规模并行处理)分析型数据库,具有以下特点:

2. 基本概念

表类型 数据模型

二、架构设计

1. 三层架构

┌─────────────────────────────────────┐
│            Frontend (FE)            │
│    • 查询解析与规划                │
│    • 元数据管理                    │
│    • 集群管理                      │
└─────────────────────────────────────┘
                 │
┌─────────────────────────────────────┐
│            Backend (BE)            │
│    • 数据存储与计算                │
│    • 数据压缩与索引                │
│    • 查询执行                      │
└─────────────────────────────────────┘
                 │
┌─────────────────────────────────────┐
│           Storage Layer             │
│    • 本地存储(BDBJE)              │
│    • 云存储(S3/HDFS)              │
└─────────────────────────────────────┘

2. 核心组件

Frontend (FE) Backend (BE)

三、基本使用

1. 安装与部署

快速启动(单机测试)
# 下载StarRocks
wget https://releases.starrocks.io/starrocks/STARROCKS_VERSION.tar.gz

# 解压并启动
tar -xzf STARROCKS_VERSION.tar.gz
cd starrocks

# 启动FE
./fe/bin/start_fe.sh --daemon

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

2. 基础操作

连接数据库
mysql -h 127.0.0.1 -P 9030 -u root
创建数据库
CREATE DATABASE IF NOT EXISTS example_db;
USE example_db;
创建表
-- 创建明细表
CREATE TABLE IF NOT EXISTS user_behavior (
    user_id INT,
    item_id INT,
    category_id INT,
    behavior_type VARCHAR(10),
    timestamp DATETIME
)
DUPLICATE KEY(user_id, item_id)
DISTRIBUTED BY HASH(user_id) BUCKETS 8
PROPERTIES (
    "replication_num" = "1"
);

-- 创建聚合表
CREATE TABLE user_behavior_agg (
    user_id INT,
    behavior_type VARCHAR(10),
    pv BIGINT SUM,
    uv BIGINT BITMAP_UNION
)
AGGREGATE KEY(user_id, behavior_type)
DISTRIBUTED BY HASH(user_id) BUCKETS 8;

3. 数据导入

方式1:Stream Load(实时导入)
curl --location-trusted -u root \
     -H "label: test_label" \
     -H "column_separator: ," \
     -T /path/to/data.csv \
     http://127.0.0.1:8030/api/example_db/user_behavior/_stream_load
方式2:Broker Load(批量导入)
LOAD LABEL example_db.label1
(
    DATA INFILE("hdfs://path/to/data*.csv")
    INTO TABLE user_behavior
    COLUMNS TERMINATED BY ","
)
WITH BROKER "broker1"
PROPERTIES
(
    "timeout" = "3600"
);
方式3:Insert Into
INSERT INTO user_behavior VALUES
(1001, 2001, 101, 'click', '2023-01-01 10:00:00'),
(1002, 2002, 102, 'buy', '2023-01-01 10:05:00');

4. 数据查询

基本查询
-- 明细查询
SELECT user_id, COUNT(*) as pv
FROM user_behavior
WHERE timestamp >= '2023-01-01'
GROUP BY user_id
ORDER BY pv DESC
LIMIT 10;

-- 关联查询
SELECT u.user_id, u.user_name, SUM(o.amount) as total_amount
FROM users u JOIN orders o ON u.user_id = o.user_id
WHERE o.order_date >= '2023-01-01'
GROUP BY u.user_id, u.user_name;
高级功能
-- 窗口函数
SELECT 
    user_id,
    timestamp,
    COUNT(*) OVER(PARTITION BY user_id ORDER BY timestamp) as cumulative_pv
FROM user_behavior;

-- 物化视图查询(自动重写)
CREATE MATERIALIZED VIEW user_behavior_mv
AS
SELECT user_id, behavior_type, COUNT(*) as cnt
FROM user_behavior
GROUP BY user_id, behavior_type;

-- 查询会自动使用物化视图加速
SELECT user_id, behavior_type, COUNT(*) 
FROM user_behavior 
GROUP BY user_id, behavior_type;

5. 表维护

分区管理
-- 添加分区
ALTER TABLE user_behavior ADD PARTITION p202301 VALUES [('2023-01-01'), ('2023-02-01'));

-- 删除分区
ALTER TABLE user_behavior DROP PARTITION p202212;

-- 查看分区信息
SHOW PARTITIONS FROM user_behavior;
数据维护
-- 查看表统计信息
SHOW TABLE STATS user_behavior;

-- 手动收集统计信息
ANALYZE TABLE user_behavior;

-- 数据校验
ADMIN CHECKSUM TABLE user_behavior;

6. 性能优化

建表优化
CREATE TABLE optimized_table (
    dt DATE,
    user_id BIGINT,
    city_id INT,
    amount DECIMAL(10,2)
)
ENGINE=olap
DUPLICATE KEY(dt, user_id)
PARTITION BY RANGE(dt) (
    PARTITION p202301 VALUES [('2023-01-01'), ('2023-02-01')),
    PARTITION p202302 VALUES [('2023-02-01'), ('2023-03-01'))
)
DISTRIBUTED BY HASH(user_id) BUCKETS 32
PROPERTIES (
    "storage_medium" = "SSD",
    "replication_num" = "3",
    "storage_cooldown_time" = "2023-12-31 23:59:59"
);
索引优化
-- 创建BITMAP索引
CREATE INDEX idx_category ON user_behavior(category_id) USING BITMAP;

-- 创建Bloom Filter索引
ALTER TABLE user_behavior SET ("bloom_filter_columns" = "user_id,item_id");

四、最佳实践

1. 数据建模建议

2. 查询优化建议

-- 使用分区裁剪
SELECT * FROM table WHERE dt = '2023-01-01';

-- 避免SELECT *
SELECT column1, column2 FROM table WHERE condition;

-- 使用合适的聚合函数
-- 使用APPROX_COUNT_DISTINCT代替COUNT(DISTINCT)处理大数据量
SELECT APPROX_COUNT_DISTINCT(user_id) FROM large_table;

3. 集群管理

-- 查看集群状态
SHOW PROC '/backends';
SHOW PROC '/frontends';

-- 添加BE节点
ALTER SYSTEM ADD BACKEND "host:port";

-- 负载均衡
ADMIN SET REPLICA STATUS PROPERTIES("tablet_id" = "10001", "backend_id" = "10002", "status" = "ok");

五、监控与故障排查

1. 监控指标

-- 查询性能监控
SHOW PROC '/current_queries';

-- 查看慢查询
SHOW PROC '/slow_queries';

-- 查看表大小
SHOW DATA FROM example_db;

2. 常用诊断命令

# 查看BE日志
tail -f be/log/be.INFO

# 查看FE日志
tail -f fe/log/fe.INFO

# 检查集群健康状态
curl http://fe_host:fe_http_port/api/health

六、生态集成

1. 与数据湖集成

-- 查询Hive表
CREATE EXTERNAL TABLE hive_table
ENGINE=HIVE
PROPERTIES (
    "hive.metastore.uris" = "thrift://hive-metastore:9083",
    "database" = "hive_db",
    "table" = "hive_table"
);

-- 查询Iceberg表
CREATE EXTERNAL TABLE iceberg_table
ENGINE=ICEBERG
PROPERTIES (
    "iceberg.catalog.type" = "hive",
    "iceberg.catalog.uri" = "thrift://hive-metastore:9083"
);

2. 与BI工具集成

总结

StarRocks作为新一代的MPP数据库,提供了:

极致的性能:向量化引擎+智能物化视图 简单的运维:自动化数据管理,弹性扩展 丰富的生态:兼容多种数据源和BI工具 企业级特性:高可用、数据一致性、安全保障

对于需要实时分析、高并发查询的场景,StarRocks是一个优秀的选择。建议从测试环境开始,逐步验证其在不同工作负载下的表现。

相关推荐