starrocks表模型
StarRocks 提供了四种表模型,每种模型都针对不同的业务场景和数据处理需求进行了优化。选择合适的表模型是进行高效数据建模和性能优化的第一步。
四种表模型概览
StarRocks 的表模型主要定义了数据在写入时如何处理具有相同 Key 的记录。这些 Key 列也被称为排序键(Sort Key),用于数据存储时的排序和索引,是查询性能优化的关键。
1. Duplicate Key Table (明细模型)
- 特点:最简单、最灵活的模型。它对数据不做任何聚合或去重,完全保留原始数据。
- 如何工作:当导入新数据时,即使新记录的
DUPLICATE KEY
与已有的记录完全相同,StarRocks 也会将其作为一条独立的记录追加写入。 - 适用场景:
- 日志数据:存储用户行为日志、系统日志等原始数据,这些数据通常只需要追加写入,不需要更新或聚合。
- 明细数据:保留所有原始交易记录、传感器数据等,用于多维度的明细查询和即席分析。
- 优势:写入性能高,模型简单,数据完全保留,没有预聚合的限制。
2. Primary Key Table (主键模型)
- 特点:专为实时更新和高并发查询设计的模型。它保证了主键的唯一性。
- 如何工作:当导入新数据时,如果记录的主键已存在,新记录会覆盖旧记录。这个模型原生支持
UPDATE
和DELETE
操作,并且性能优异。 - 适用场景:
- 实时更新:需要频繁更新的场景,如用户画像、订单状态变更等。
- 高频写入与查询:适用于交易系统、实时看板等需要秒级响应的场景。
- 拉链表(SCD Type 2):结合主键和日期字段,能非常高效地实现拉链表的更新和插入逻辑。
- 优势:支持部分列更新,实时查询性能极佳,大大简化了数据同步的 ETL 流程。
3. Aggregate Key Table (聚合模型)
- 特点:在数据加载时就对相同
AGGREGATE KEY
的数据进行预聚合。 - 如何工作:创建表时,需要为非 Key 列指定聚合函数(如
SUM
、MIN
、MAX
、REPLACE
)。当导入新数据时,StarRocks 会将新旧记录根据聚合函数进行合并。 - 适用场景:
- 预聚合报表:需要对数据进行固定的聚合分析,如统计网站的 PV、UV、GMV 等。
- 指标分析:适用于需要快速查询大量指标汇总结果的场景,能显著减少查询时的数据扫描量。
- 优势:通过预聚合,可以极大地减少数据量,从而大幅提升聚合查询的性能。但缺点是灵活性差,无法查询明细数据。
4. Unique Key Table (唯一键模型)
- 特点:保证了唯一键的唯一性,类似于 Primary Key 模型,但通常用于覆盖式更新。
- 如何工作:当导入新数据时,如果唯一键已存在,新记录会覆盖旧记录。它等同于聚合模型中,所有非 Key 列都使用
REPLACE
聚合函数。 - 适用场景:
- 数据覆盖:适用于那些只需要最新版本数据,不需要保留历史记录的场景。
- 替代 Primary Key:在 StarRocks 的早期版本中,Unique Key 模型是主要用于实时更新的方案。但在新版本中,Primary Key 模型因其更强大的功能和更高的性能,通常被推荐作为首选替代方案。
- 优势:确保了数据的唯一性,更新逻辑简单。
如何选择表模型?
这是一个简单的决策树,可以帮助你选择合适的表模型:
- 你需要实时更新或删除数据吗?
- 是 → 优先选择 Primary Key 模型。它提供了最强大的功能和最优的性能。
- 否 → 转到第 2 步。
- 你需要对数据进行预聚合以加速查询吗?
- 是 → 选择 Aggregate Key 模型。它能显著减少数据量并提升聚合查询性能。
- 否 → 转到第 3 步。
- 你只需要简单地追加写入原始数据吗?
- 是 → 选择 Duplicate Key 模型。它是最简单直接的选择,保留所有数据。
- 否 → Unique Key 模型可能适合你需要覆盖旧数据的场景,但通常 Primary Key 模型是更好的选择。
大多数情况下,如果你的业务需要实时或频繁更新数据,Primary Key 模型是最佳选择。如果你只是存储海量的原始日志或明细数据用于即席分析,Duplicate Key 模型会更合适。