Paimon 介绍
Paimon 提供以下核心功能:
高效实时更新:高吞吐和低延迟的数据摄入和更新
统一的批处理和流处理:同时支持批量读写和流式读写
丰富的数据湖功能:ACID, Time Travel 和 Schema Evolution 等
StarRocks 介绍
Linux 基金会项目 StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 数据库,遵循 Apache 2.0 开源协议。StarRocks 架构简洁,采用了全面向量化引擎,并配备全新设计的 CBO (Cost Based Optimizer) 优化器,查询速度(尤其是多表关联查询)远超同类产品。
StarRocks 不仅能高效的分析本地存储的数据,也可以作为计算引擎直接分析数据湖中的数据。用户可以通过 StarRocks 提供的 External Catalog,轻松查询存储在 Apache Paimon 数据湖上的数据,无需进行数据迁移。支持的存储系统包括 HDFS、阿里云 OSS、阿里云 OSS-HDFS 等
快 - 使用 StarRocks 直接查询 Paimon 湖格式
更快 - 开启 Data cache 查询 Paimon 湖格式
超级快 - 构建异步物化视图查询 Paimon 湖格式
PART/ 01 快
CREATE EXTERNAL CATALOG paimon_fs_catalog
properties
(
"type" = "paimon",
"paimon.catalog.type" = "filesystem",
"paimon.catalog.warehouse" = "oss://<bucket>/paimon/warehouse"
);
select
l_returnflag,
l_linestatus,
sum(l_quantity) as sum_qty,
sum(l_extendedprice) as sum_base_price,
sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
avg(l_quantity) as avg_qty,
avg(l_extendedprice) as avg_price,
avg(l_discount) as avg_disc,
count(*) as count_order
from
paimon_fs_catalog.paimon_tpch_flat_orc_100lineitem
where
l_shipdate <= date '1998-12-01' - interval '90' day
group by
l_returnflag,
l_linestatus
order by
l_returnflag,
l_linestatus
我们使用相同的硬件资源(配置详情见附录),对比了 StarRocks 和 Trino 分别查询Paimon Append Only 表格式的 TPC-H 100G 数据集,Trino 使用了最新的 Paimon-Trino 版本,已包含了对 ORC 文件读取的优化,测试结果如下:
StarRocks 的总耗时为 148.92s,Trino 的总耗时为 640.8s
可以得到,在本测试场景下,StarRocks 的查询效率是 Trino 的 4.3倍。
PART/ 02 更快
开启 Data Cache查询 Paimon 湖格式
为了进一步提升该场景下的查询性能,StarRocks 2.5 版本开始提供 Data Cache 功能。通过将外部存储系统的原始数据按照一定策略切分成多个 Block 后,缓存至 StarRocks 的本地节点,从而避免重复的远端数据拉取开销,实现热点数据查询分析性能的进一步提升。
例如:开启 Data Cache 的步骤
BE 增加如下配置并重启:
# 开启data cache
datacache_enable=true
# 单个磁盘缓存数据量的上限,本示例20G
datacache_disk_size=21474836480
# 内存缓存数据量的上限,本示例4G
datacache_mem_size=4294967296
# 缓存使用的磁盘路径
datacache_disk_path=/mnt/disk1/starrocks/storage/datacache;/mnt/disk2/starrocks/storage/datacache;/mnt/disk3/starrocks/storage/datacache;/mnt/disk4/starrocks/storage/datacache
MySQL 客户端执行:
SET enable_scan_datacache = true;
再次执行 Paimon 查询,就可以看到明显的查询效率提升。
我们可以在 Query Profile 里观测当前 Query 的 Cache 命中情况,观测下述指标查看 Data Cache 的命中情况:
DataCacheReadBytes:从内存和磁盘中读取的数据量。
DataCacheWriteBytes:从外部存储系统加载到内存和磁盘的数据量。
- DataCache:
- DataCacheReadBlockBufferBytes: 920.146 MB
- __MAX_OF_DataCacheReadBlockBufferBytes: 14.610 MB
- __MIN_OF_DataCacheReadBlockBufferBytes: 1.762 MB
- DataCacheReadBlockBufferCounter: 27.923K (27923)
- __MAX_OF_DataCacheReadBlockBufferCounter: 440
- __MIN_OF_DataCacheReadBlockBufferCounter: 55
- DataCacheReadBytes: 10.107 GB
- __MAX_OF_DataCacheReadBytes: 163.518 MB
- __MIN_OF_DataCacheReadBytes: 20.225 MB
- DataCacheReadDiskBytes: 563.468 MB
- __MAX_OF_DataCacheReadDiskBytes: 30.965 MB
- __MIN_OF_DataCacheReadDiskBytes: 0.000 B
- DataCacheReadMemBytes: 9.556 GB
- __MAX_OF_DataCacheReadMemBytes: 142.791 MB
- __MIN_OF_DataCacheReadMemBytes: 20.225 MB
- DataCacheReadCounter: 41.456K (41456)
- __MAX_OF_DataCacheReadCounter: 655
- __MIN_OF_DataCacheReadCounter: 81
- DataCacheReadTimer: 9.157ms
- __MAX_OF_DataCacheReadTimer: 48.792ms
- __MIN_OF_DataCacheReadTimer: 478.759us
- DataCacheSkipReadBytes: 0.000 B
- DataCacheSkipReadCounter: 0
- DataCacheWriteBytes: 0.000 B
- DataCacheWriteCounter: 0
- DataCacheWriteFailBytes: 0.000 B
- DataCacheWriteFailCounter: 0
- DataCacheWriteTimer: 0ns
在生产环境中,Data Cache 的性能在不同的 Query Pattern 以及不同的数据量下,查询性能有从百分之几十到几倍的提升。
PART/ 03 超级快
构建异步物化视图查询 Paimon 湖格式
CREATE MATERIALIZED VIEW lineitem
DISTRIBUTED BY HASH(l_shipdate)
REFRESH IMMEDIATE MANUAL
AS
select
l_returnflag,
l_linestatus,
l_shipdate,
sum(l_quantity) as sum_qty,
sum(l_extendedprice) as sum_base_price,
sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
avg(l_quantity) as avg_qty,
avg(l_extendedprice) as avg_price,
avg(l_discount) as avg_disc,
count(*) as count_order
from
paimon_fs_catalog.paimon_tpch_flat_orc_100.lineitem
group by
l_returnflag,
l_linestatus,
l_shipdate
PART/ 04 当前总结
支持各类存储系统,包括 HDFS 以及对象存储 S3/OSS/OSS-HDFS
支持 HMS 以及阿里云 DLF 元数据管理系统
支持 Paimon 的 Primary Key 和 Append Only 表类型查询
支持 Paimon 系统表的查询,常见例如 Read Optimized 表,snapshots 表等
支持 Paimon 表和其他类型数据湖格式的关联查询
支持 Paimon 表和 StarRocks 内表的关联查询
支持 Data Cache 加速查询
支持基于 Paimon 表构建物化视图实现透明加速,查询改写等
PART/ 05 未来规划
使用 Native reader 支持 Primary Key 表的 Deletion vectors,进一步加速查询性能
缓存 Paimon 元数据,减少重复 I/O 和降低 Analyze 阶段的延时
接入 Paimon 表统计信息,优化复杂 SQL 的执行计划
完善 Paimon 异步物化视图查询和改写功能
附录:本文性能测试环境说明
阿里云 EMR on ECS 数据湖集群:
EMR版本:EMR-5.16.0版本 集群配置:1x master, 3x core 机型:ecs.g6.4xlarge 16 vCPU 64 GiB Trino版本:427 Paimon 版本:0.7 Paimon TPC-H 测试表类型:Append only,存储格式为ORC
EMR Serveless StarRocks 集群
测试软件配置
Trino
-Xmx50G query.max-total-memory: 105GB query.max-memory: 105GB query.max-memory-per-node: 35GB StarRocks
-Xmx50G
测试数据和步骤
性能测试基准:TPCH 100G 测试方法:每个 Query 跑3次取平均值,不做预热,不预先收集统计信息,测试数据放在 OSS
关于 StarRocks
StarRocks 全球开源社区也正飞速成长。目前,StarRocks 的 GitHub star 数已达 7800,吸引了超过 330 位贡献者和数十家国内外行业头部企业参与共建,用户社区也有过万人的规模。凭借其卓越的表现,StarRocks 荣获了全球著名科技媒体 InfoWorld 颁发的 2023 BOSSIE Award 最佳开源软件奖项。