なぜユーザーはApache DruidからStarRocksへ移行しているのか

2011年に登場したApache Druid®は、かつてリアルタイム分析の分野でリーダー的存在でした。しかし、分析のユースケースが拡大し、より高度かつ要求の厳しいものになるにつれて、Druidは現代のデータユーザーが求めるパフォーマンス要件に対応しきれなくなっています。その制限の一部は以下の通りです:
no-sql

ANSI SQLに非対応

Druidは「SQLライク」なクエリインターフェースであるDruid SQLを提供していますが、標準的なANSI SQLには対応していません。そのため、利用するアプリケーションはDruid SQLの機能と構文に制限されます。
no-table

JOINされたテーブルに非対応

Druidは単一テーブルに対するクエリでは優れたパフォーマンスを発揮しますが、Joinedテーブルに対するクエリ処理には苦戦します。
no-real-time

リアルタイム更新に非対応

Druidでは、一度データがセグメントに書き込まれると、更新や削除を行うことはできません(不変/immutable)。この制約により、多くのユースケースでDruidの利用が制限されています。
no-data-architecture

古いアーキテクチャ

Scatter-Gatherアーキテクチャに基づいているDruidは、高カーディナリティの集計や正確なカウントディスティンクトなどの処理において、本質的に課題を抱えています。

StarRocks vs. Apache Druid

8.9x

ワイドテーブルシナリオでの
優れたパフォーマンスを即座に実現

4.05x

ビットマップインデックスによる
ワイドテーブルシナリオでの高パフォーマンス

3x+

他の主要ソリューションと比較して
優れたパフォーマンス

慣れ親しんだツールとクエリ言語をそのまま使える

SQLは、あらゆるアナリティクス用途における事実上の標準です。すべてのデータベースクエリエンジンは、SQLをネイティブでサポートすべきです。

 

Druidのように、ネイティブクエリ言語の上に後付けでSQLを追加したものとは異なり、StarRocksはSQLを唯一のクエリ言語としてネイティブにサポートしています。業界標準のANSI SQL構文に対応しているため、SQL機能が限定された独自のSQLライク言語に縛られることはありません。

 

また、StarRocksはMySQLプロトコルと互換性があるため、既存のBIツールやアプリケーションもMySQLドライバを通じてそのまま接続・利用できます。

なぜ多くのDruidユーザーがStarRocksへ移行しているのか

StarRocksの利点は、SQLやMySQL互換性にとどまりません。移行を検討すべき優れた理由は他にもあります:
free

Denormalizationからの解放

JOINリレーションは現代的なアナリティクスの基盤ですが、同時にクエリ性能における課題にもなります。
 
Apache Druidはこの課題を回避するために、単一テーブルでのクエリ性能に特化してきました。そのため、ユーザーはApache Druid上で、JOINされたテーブルをDenormalizedテーブルとしてフラット化する必要があります。このステップにより、パイプラインの遅延が発生し、追加のリソースも必要になります。
 
StarRocksは、単一テーブルクエリとJOINクエリの両方で優れたパフォーマンスを発揮します。StarRocksを活用することで、データ取り込みパイプラインを簡素化し、データの鮮度を向上させ、ETLコストを削減できます。
management

可変データを受け入れる

可変データ(Mutable data)は、ビジネス活動において一般的に発生するものです。これは基盤となるデータパイプラインの不具合によって生じる場合もあれば、通常のビジネスロジックの一環として発生することもあります。
 
Apache Druidは、他の多くの分析データベースと同様に、UPDATEやDELETEといった操作をネイティブにはサポートしていません。その代わりに、非同期でALTER TABLEを行うMUTATION操作を提供しています。
 
StarRocksでは、可変データをネイティブに処理でき、更新された分析結果を即座に反映することが可能です。
scale

簡単にスケールするアナリティクス

StarRocksはMassively Parallel Processing(MPP)アーキテクチャを採用しています。このアーキテクチャでは、クエリ要求が複数の論理的な実行単位に分割され、複数のノードで同時に実行されます。各ノードは専用のリソース(CPU、メモリ)を持っており、MPPアーキテクチャによってそれらのリソースを効率的に活用することで、高い水平方向のスケーラビリティを実現します。

一方、DruidはScatter-Gatherアーキテクチャに基づいて構築されています。このアーキテクチャでは、Gatherコンポーネントが必然的にボトルネックとなります。そのため、Druidは高カーディナリティの集計や正確なCount Distinctなど、一部の分析処理においてパフォーマンスの課題を抱えています。

さらに、StarRocksは独自のネイティブベクトル化クエリエンジンも搭載しています。このネイティブベクトル化エンジンは、CPUのSIMD命令を活用して、1命令で複数のデータセットを処理します。これにより、StarRocksの演算子全体の性能は3〜10倍に向上します。
operation

運用をシンプルに

StarRocksのアーキテクチャは、Frontend(FE)ノードとBackend(BE)ノードで構成されています。外部コンポーネントに依存しないため、StarRocksは導入・運用が容易です。また、メタデータとデータのレプリケーションにより、システム全体で単一障害点(Single Point of Failure)を排除しています。

FEノードおよびBEノードは、自動的にスケールアウトできるため、データ量の増加やクエリ性能に対する厳しい要件にも対応可能です。データの再分散もバックグラウンドで自動的に処理され、エンドユーザーのクエリ体験に影響を与えることはありません。

Druidユーザーにとって、StarRocksのシンプルなアーキテクチャは魅力的です。HDFSやZooKeeperなどのレガシーなHadoopスタイルのコンポーネントを管理する必要がなくなるからです。

Apache DruidとStarRocksの比較

現代のエンタープライズにおける分析ニーズに対応するために設計されたStarRocksは、優れた機能とパフォーマンスを提供します。Apache Druidには、それと同等の力はありません。
項目

Apache DruidApache Druid

 starrocksStarRocks

アーキテクチャ

yesレガシーなScatter-Gatherアーキテクチャ yes最新のMPPアーキテクチャ

SQL構文サポート

yes一部のSQL構文のみ対応

yes完全なSQL構文をサポート

高カーディナリティ集計性能

yes高カーディナリティの集計性能が低い

yes高カーディナリティ次元で優れたパフォーマンス

サードパーティ依存

yes
ZooKeeperベースの運用が必要

yesサードパーティへの依存なし

リアルタイム更新

 
no
 リアルタイム更新に非対応
 

yesリアルタイムの更新および削除に対応

分散JOIN

no
分散JOINに非対応

yes分散JOINに対応

データレイククエリ対応

no
データレイククエリに非対応

yesHive、Hudi、Iceberg、Deltaに対応

フェデレーテッドクエリ対応

no
フェデレーテッドクエリに非対応

yesHive、MySQL、Elasticsearch、JDBCに対応したフェデレーテッドクエリに対応