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

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

本番環境では、災害復旧のために複数のFEノードを展開できます。各FEノードはメタデータの完全なコピーを保持します。FEノードは3つの役割に分けられます:
| 役割 | 機能 |
|---|---|
| Master | FE Masterノードはメタデータの読み書き操作を担当します。Masterでメタデータの変更が発生すると、BDB JEプロトコルを介してFollowerまたはObserverノードに同期されます。 |
| Follower | Followerノードはメタデータの読み取りを担当します。Masterノードが失敗した場合、Followerノードを新しいMasterとして選択できます。 |
| Observer | Observerノードはメタデータの読み取りを担当し、主にクエリの同時実行性を高めるために使用されます。クラスターのリーダーシップ選挙には参加しません。 |
FEとBEプロセスは両方とも水平スケーラブルで、単一クラスターで数百台のマシンと数十ペタバイトのストレージ容量をサポートできます。FEとBEプロセスは一貫性プロトコルを使用して、サービスの高可用性とデータの高信頼性を保証します。ストレージ・コンピュート統合アーキテクチャは高度に統合されており、分散システムの運用複雑性を大幅に削減します。
コンピュート・ストレージ分離
バージョン3.0以降、コンピュート・ストレージ分離展開アーキテクチャを選択できます。Apache Dorisのコンピュート・ストレージ分離バージョンは、統一された共有ストレージ層をデータストレージスペースとして利用します。ストレージと計算を分離することで、ユーザーはストレージ容量と計算リソースを独立してスケールでき、最適なパフォーマンスとコスト効率を実現します。以下の図に示すように、コンピュート・ストレージ分離アーキテクチャは3つの層に分かれています:
-
メタデータ層: メタデータ層は主にリクエスト計画、クエリ解析と計画、およびメタデータの保存と管理を担当します。
-
コンピュート層: コンピュート層は複数のコンピュートグループで構成され、それぞれが独立したテナントとしてビジネス計算を処理できます。各コンピュートグループ内には複数のステートレスBEノードがあり、BEノードはいつでも弾性的にスケールアップまたはダウンできます。
-
ストレージ層: ストレージ層はS3、HDFS、OSS、COS、OBS、Minio、CephなどのShared Storageソリューションを使用してDorisのデータファイル(SegmentファイルやInverted Indexファイルを含む)を保存できます。

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側の最下位レベルのスキャンノードにプッシュし、処理されるデータ量を大幅に削減して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は様々なタイプのクエリで高パフォーマンスなクエリ計画を列挙できることを保証します。