Apache Dorisの概要
Apache Dorisとは
Apache Dorisは、高いクエリ速度で知られるMPPベースのリアルタイムデータウェアハウスです。大規模データセットに対するクエリでは、サブ秒で結果を返します。高並行性のポイントクエリと高スループットの複雑な分析の両方をサポートします。レポート分析、アドホッククエリ、統合データウェアハウス、データレイククエリ高速化に使用できます。Apache Dorisをベースに、ユーザーはユーザー行動分析、A/Bテストプラットフォーム、ログ解析、ユーザープロファイル分析、eコマース注文分析のアプリケーションを構築できます。
Apache Dorisは、以前はPaloとして知られており、当初はBaiduの広告レポート業務をサポートするために作成されました。2017年に正式にオープンソース化され、2018年7月にBaiduからApache Software Foundationに寄贈され、Apacheメンターの指導の下でインキュベータープロジェクト管理委員会のメンバーによって運営されました。2022年6月、Apache DorisはApacheインキュベーターからトップレベルプロジェクトとして卒業しました。2024年までに、Apache Dorisコミュニティは異なる業界の数百社から600人以上のコントリビューターを集め、月間アクティブコントリビューターは120人以上となっています。
Apache Dorisは幅広いユーザーベースを持ちます。TikTok、Baidu、Tencent、NetEaseなどの大手企業を含め、世界中の5000社以上の本番環境で使用されています。また、金融、小売、通信から、エネルギー、製造、医療などの業界にも広く使用されています。
使用シナリオ
以下の図に示すように、さまざまなデータ統合と処理の後、データソースは通常、リアルタイムデータウェアハウスDorisとオフラインlakehouse(Hive、Iceberg、Hudiなど)に取り込まれます。これらはOLAP分析シナリオで広く使用されています。

Apache Dorisは以下のシナリオで広く使用されています:
-
リアルタイムデータ分析:
-
リアルタイムレポートと意思決定:Dorisは企業の内部および外部使用のためのリアルタイム更新レポートとダッシュボードを提供し、自動化プロセスにおけるリアルタイム意思決定をサポートします。
-
アドホック分析:Dorisは多次元データ分析機能を提供し、迅速なビジネスインテリジェンス分析とアドホッククエリを可能にし、複雑なデータから迅速にインサイトを発見することを支援します。
-
ユーザープロファイルと行動分析:Dorisはユーザーの参加、維持、コンバージョンなどの行動を分析でき、人口インサイトや行動分析のための群衆選択などのシナリオもサポートします。
-
-
レイクハウス Analytics:
-
レイクハウスクエリ高速化:Dorisは効率的なクエリエンジンによってlakehouseデータクエリを高速化します。
-
フェデレート分析:Dorisは複数データソース間でのフェデレートクエリをサポートし、アーキテクチャを簡素化してデータサイロを排除します。
-
リアルタイムデータ処理:Dorisはリアルタイムデータストリームとバッチデータ処理機能を組み合わせ、高並行性と低レイテンシの複雑なビジネス要件のニーズを満たします。
-
-
SQLベースの可観測性:
- ログとイベント分析:Dorisは分散システムにおけるログとイベントのリアルタイムまたはバッチ分析を可能にし、問題の特定とパフォーマンスの最適化を支援します。
全体アーキテクチャ
Apache DorisはMySQLプロトコルを使用し、MySQL構文と高い互換性を持ち、標準SQLをサポートします。ユーザーは様々なクライアントツールを通じてApache Dorisにアクセスでき、BIツールとシームレスに統合されます。
ストレージ・コンピュート統合アーキテクチャ
Apache Dorisのストレージ・コンピュート統合アーキテクチャは合理化されており、保守が容易です。以下の図に示すように、2つのタイプのプロセスのみで構成されています:
-
Frontend (FE): 主にユーザーリクエストの処理、クエリ解析と計画、メタデータ管理、ノード管理タスクを担当します。
-
Backend (BE): 主にデータストレージとクエリ実行を担当します。データはシャードに分割され、BEノード間で複数のレプリカと共に保存されます。

本番環境では、災害復旧のために複数のFEノードをデプロイできます。各FEノードはメタデータの完全なコピーを維持します。FEノードは3つの役割に分けられます:
| 役割 | 機能 |
|---|---|
| Master | FE MasterノードはメタデータのRead/Write操作を担当します。Masterでメタデータの変更が発生すると、BDB JEプロトコルを介してFollowerまたはObserverノードに同期されます。 |
| Follower | FollowerノードはメタデータのRead操作を担当します。Masterノードが故障した場合、Followerノードを新しいMasterとして選択できます。 |
| Observer | Observerノードはメタデータの読み取りを担当し、主にクエリの並行性を向上させるために使用されます。クラスターリーダーシップ選出には参加しません。 |
FEとBEプロセスは両方とも水平スケーラブルであり、単一クラスターで数百台のマシンと数十ペタバイトのストレージ容量をサポートできます。FEとBEプロセスは一貫性プロトコルを使用してサービスの高可用性とデータの高信頼性を確保します。ストレージ・コンピュート統合アーキテクチャは高度に統合されており、分散システムの運用複雑性を大幅に削減します。
Apache Dorisのコア機能
-
高可用性:Apache Dorisでは、メタデータとデータの両方が複数のレプリカで保存され、quorumプロトコルを介してデータログを同期します。データ書き込みは、過半数のレプリカが書き込みを完了した時点で成功と見なされ、いくつかのノードが故障してもクラスターが利用可能な状態を維持します。Apache Dorisは同一都市内および地域間の災害復旧の両方をサポートし、デュアルクラスターマスター・スレーブモードを可能にします。一部のノードで故障が発生した場合、クラスターは自動的に故障ノードを隔離し、全体のクラスター可用性に影響を与えることを防ぎます。
-
高互換性:Apache DorisはMySQLプロトコルと高い互換性があり、標準SQL構文をサポートし、大部分のMySQLとHive関数をカバーします。この高い互換性により、ユーザーは既存のアプリケーションとツールをシームレスに移行・統合できます。Apache DorisはMySQLエコシステムをサポートし、ユーザーがMySQL Clientツールを使用してDorisに接続することで、より便利な運用と保守を可能にします。また、BIレポートツールとデータ転送ツールのMySQLプロトコル互換性もサポートし、データ分析とデータ転送プロセスにおける効率性と安定性を確保します。
-
リアルタイムデータウェアハウス:Apache Dorisをベースに、リアルタイムデータウェアハウスサービスを構築できます。Apache Dorisは秒レベルのデータ取り込み機能を提供し、上流のオンライントランザクションデータベースからの増分変更を秒以内にDorisにキャプチャします。ベクトル化エンジン、MPPアーキテクチャ、Pipeline実行エンジンを活用して、Dorisはサブ秒のデータクエリ機能を提供し、高性能で低レイテンシのリアルタイムデータウェアハウスプラットフォームを構築します。
-
統合レイクハウス:Apache Dorisは、データレイクやリレーショナルデータベースなどの外部データソースをベースに統合lakehouseアーキテクチャを構築できます。Doris統合lakehouseソリューションは、データレイクとデータウェアハウス間のシームレスな統合と自由なデータフローを可能にし、ユーザーがデータウェアハウス機能を直接利用してデータレイクのデータ分析問題を解決することを支援し、データレイクのデータ管理機能を最大限活用してデータ価値を向上させます。
-
柔軟なモデリング:Apache Dorisは、ワイドテーブルモデル、事前集約モデル、スター/スノーフレークスキーマなど、様々なモデリングアプローチを提供します。データインポート時に、FlinkやSparkなどのコンピューティングエンジンを通じてデータをワイドテーブルに平坦化してDorisに書き込むか、データを直接Dorisにインポートし、ビュー、マテリアライズドビュー、またはリアルタイム多テーブル結合を通じてデータモデリング操作を実行できます。
技術概要
Dorisは効率的なSQLインターフェースを提供し、MySQLプロトコルと完全に互換性があります。そのクエリエンジンはMPP(Massively Parallel Processing)アーキテクチャをベースとし、複雑な分析クエリを効率的に実行し、低レイテンシのリアルタイムクエリを実現できます。データのエンコーディングと圧縮のためのカラムナーストレージ技術により、クエリパフォーマンスとストレージ圧縮率を大幅に最適化します。
インターフェース
Apache DorisはMySQLプロトコルを採用し、標準SQLをサポートし、MySQL構文と高い互換性があります。ユーザーは様々なクライアントツールを通じてApache Dorisにアクセスでき、Smartbi、DataEase、FineBI、Tableau、Power BI、Apache Supersetを含むがこれに限定されないBIツールとシームレスに統合できます。Apache DorisはMySQLプロトコルをサポートする任意のBIツールのデータソースとして機能できます。
ストレージエンジン
Apache Dorisはカラムナーストレージエンジンを持ち、データをカラム単位でエンコード、圧縮、読み取りします。これにより非常に高いデータ圧縮率を実現し、不要なデータスキャンを大幅に削減することで、IOとCPUリソースをより効率的に利用します。
Apache Dorisは、データスキャンを最小化するための様々なインデックス構造をサポートします:
-
ソート済み複合キーインデックス:ユーザーは最大3つのカラムを指定して複合ソートキーを形成できます。これにより効果的にデータをプルーニングし、高並行性レポートシナリオをより良くサポートできます。
-
Min/Maxインデックス:数値型の等価クエリと範囲クエリにおいて効果的なデータフィルタリングを可能にします。
-
BloomFilterインデックス:高カーディナリティカラムの等価フィルタリングとプルーニングに非常に効果的です。
-
転置インデックス:任意のフィールドの高速検索を可能にします。
Apache Dorisは様々なデータモデルをサポートし、異なるシナリオに対して最適化されています:
-
詳細モデル(Duplicate Key Model):ファクトテーブルの詳細ストレージ要件を満たすために設計された詳細データモデル。
-
プライマリキーモデル(Unique Key Model):一意のキーを保証し、同じキーを持つデータは上書きされ、行レベルのデータ更新を可能にします。
-
集約モデル(Aggregate Key Model):同じキーを持つ値カラムを結合し、事前集約によってパフォーマンスを大幅に向上させます。
Apache Dorisは、強整合性の単一テーブルマテリアライズドビューと非同期更新の複数テーブルマテリアライズドビューもサポートします。単一テーブルマテリアライズドビューはシステムによって自動的に更新・維持され、ユーザーの手動介入は必要ありません。複数テーブルマテリアライズドビューは、クラスター内スケジューリングまたは外部スケジューリングツールを使用して定期的に更新でき、データモデリングの複雑さを軽減します。
クエリエンジン
Apache Dorisは、ノード間およびノード内での並列実行のためのMPPベースのクエリエンジンを持ちます。複雑なクエリをより良く処理するため、大規模テーブルの分散shuffle joinをサポートします。

Apache Dorisのクエリエンジンは完全にベクトル化されており、すべてのメモリ構造がカラムナー形式でレイアウトされています。これにより仮想関数呼び出しを大幅に削減し、キャッシュヒット率を向上させ、SIMD命令を効率的に使用できます。Apache Dorisは、ベクトル化されていないエンジンと比較してワイドテーブル集約シナリオで5~10倍高いパフォーマンスを提供します。

Apache Dorisは適応的クエリ実行技術を使用して、ランタイム統計に基づいて実行計画を動的に調整します。例えば、ランタイムフィルターを生成してprobe側にプッシュできます。具体的には、フィルターをprobe側の最下位レベルのscanノードにプッシュし、処理するデータ量を大幅に削減してjoinパフォーマンスを向上させます。Apache DorisのランタイムフィルターはIn/Min/Max/Bloom Filterをサポートします。

Apache DorisはPipeline実行エンジンを使用してクエリを複数のサブタスクに分解し、並列実行により、マルチコアCPU機能を最大限活用します。同時に、クエリスレッド数を制限することでスレッド爆発問題に対処します。Pipeline実行エンジンはデータのコピーと共有を削減し、ソートと集約操作を最適化することで、クエリ効率とスループットを大幅に向上させます。
オプティマイザーの面では、Apache DorisはCBO(Cost-Based Optimizer)、RBO(Rule-Based Optimizer)、HBO(History-Based Optimizer)の組み合わせ最適化戦略を採用しています。RBOは定数畳み込み、サブクエリリライト、述語プッシュダウンなどをサポートします。CBOはjoin並べ替えおよびその他の最適化をサポートします。HBOは履歴クエリ情報に基づいて最適な実行計画を推奨します。これらの複数の最適化措置により、Dorisは様々なタイプのクエリにわたって高性能なクエリプランを列挙できることを保証します。