Apache Druid 与 StarRocks

Apache Druid 和 StarRocks 简介

Apache Druid 是一个 OLAP 数据存储和分析系统,专为海量数据集的高性能处理而设计。它是由广告分析公司 Metamarkets 开发的。Druid 提供低延迟数据摄取、灵活的数据探索和分析、高性能聚合以及轻松的水平扩展。它可以大规模处理数据并提供预聚合功能。Druid 使用倒排索引和位图索引来优化查询性能。它在广告分析、监控和警报等时间序列应用程序中具有广泛的用例。

Apache Druid 的竞争优势:

  • 列式存储,分布式无共享架构
  • 支持实时、批量采集,采集后立即查询
  • 自我修复、自我平衡
  • 数据深度存储,无数据丢失
  • 预聚合、基于时间的分区、基于咆哮和简洁位图索引的快速过滤
  • 支持近似算法

什么是星石?

StarRocks 是新一代超快大规模并行处理 (MPP) 数据库,专为所有分析场景而设计。它面向多维度分析、实时分析、即席查询。StarRocks 在高并发、低延迟点查询和高吞吐量即席查询方面具有高性能。其统一的批量和实时数据摄取功能使预聚合成为可能。StarRocks 支持各种模式,例如平面模式、星型模式和雪花模式。非常适合对性能、实时分析、高并发和灵活性有苛刻要求的各种场景。

StarRocks的竞争优势:

  • 列式存储、矢量化SQL引擎
  • 简单、HA架构、易运维
  • 支持标准SQL,兼容MySQL协议
  • 基于成本优化器(CBO)的智能查询优化
  • 实时数据摄取和更新
  • 现代物化视图,加速聚合和查询
  • 查询联邦,异构数据源联合分析

功能比较

Apache Druid 和 StarRocks 定位为大数据分析引擎。他们有很多共同点。它们都使用列式存储,支持海量数据的摄取、高并发、使用近似算法的不同计数、HA部署和数据自平衡。但两者在数据存储、预聚合、计算框架、易用性、运维难易度等方面存在关键区别。

数据存储

摄取到 Druid 中的数据在存储到深层存储之前会被分成多个段。数据生成后,您只能将数据追加到某个段或覆盖/删除整个段。您无法灵活地修改段中的部分数据。Druid 按时间对数据进行分区,或者有时对特定列进行二次分区以提高局部性,从而减少数据访问时间。此外,Druid 允许您指定排序维度以提高压缩和查询性能。

StarRocks 使用分区和分桶机制来分发数据。您可以根据数据和查询的特征灵活地指定分区键和存储桶键。这有助于减少扫描的数据量并最大限度地提高集群的并行处理能力。StarRocks在组织和存储数据时,会根据指定的列对表数据进行排序。您可以将有特色且经常查询的列放在其他列之前,以加快数据搜索速度。StarRocks的分桶机制类似于Druid的二级分区机制。

总的来说,StarRocks和Druid有类似的存储机制。但Druid只支持基于时间的分区,而 StarRocks一级分区的数据可以是多种数据类型(DATE、DATETIME、INT)。从这个意义上来说,StarRocks 比 Druid 更加灵活

在数据更新方面,Druid 允许您仅按时间范围删除和更新数据。不支持点删除和更新。当维度或数据频繁变化时,这种限制就更加不方便。StarRocks支持明细数据和聚合数据的分析,以及数据的实时更新。您可以使用StarRocks提供的更新模型和主键模型来实现UPDATE基于DELETE主键的操作。

设想
场景描述
德鲁伊
星岩
详细数据分析
存储和分析原始详细数据,以追加为主要写入方式,数据写入后几乎不更新数据
支持
支持
汇总数据分析
存储和分析聚合数据,无需查询明细数据,数据导入后实时聚合,数据写入后几乎无数据更新
支持
支持
数据更新
存储和分析需要更新的数据
不支持
支持

预聚合

Druid采用预聚合模型。当数据被摄取时,汇总功能将具有相同维度和时间戳值的行合并为一行,从而显着减少数据量并加快查询速度。但数据聚合后,详细数据就无法再查询。在Druid上查询数据,需要指定时间列来扫描这些时间范围内的预聚合段。Druid 进一步汇总结果以生成最终数据。但是,使用rollup重写查询时,无法保留原始数据。如果需要对大量维度进行小时间粒度的聚合,二次聚合会占用大量的系统资源。

StarRocks 使用智能物化视图在摄取过程中预先聚合数据。它会自动为查询选择最佳的物化视图。当原始表中的数据发生变化时,物化视图也会相应更新。如果不需要查询原始数据,可以使用StarRocks的聚合键模型来存储聚合数据,类似于使用Druid的预聚合模型。

计算框架

矢量化执行通过并行处理多组数据来加速查询。

Druid仍在优化其矢量化技术,其引擎尚未完全矢量化。只有 groupBy 和 Timeseries 查询可以以矢量化方式执行,但有一些限制。其他查询(例如 TopN、Scan、Select 和 Search)不支持矢量化执行。Druid 使用分散-聚集方法来运行查询。这种计算框架虽然简单,但不适合大表连接、嵌套查询等复杂查询。另外,Gather节点存在性能瓶颈。当groupBy后产生大量数据时,Gather节点容易出现内存膨胀,影响集群稳定性。

StarRocks 提供完全矢量化的数据加载和查询引擎。StarRocks采用MPP架构。与将查询透明分发到后端的分散收集方法不同,StarRocks 首先将查询转换为内部执行计划,将执行计划拆分为多个任务,然后将任务分发到多个 BE 节点进行并行处理。数据可以在这些任务之间重新分配,以运行复杂的查询,例如大表联接和嵌套查询。对于groupBy等查询,数据会分布到多个节点执行,避免出现单点性能瓶颈。对于 SQL 优化,StarRocks CBO 自动收集行计数、列基数和最小/最大值,并自动调整连接顺序。编写SQL语句时不再需要考虑SQL执行效率。然而,在 StarRocks 中,存储和计算并不是分开的。该功能将于 2022 年中期推出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wouderw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值