Apache Doris は、レポート分析、アドホッククエリ、データレイク間のフェデレーテッドクエリなどのシナリオで使用できる、高性能のリアルタイム分析データベースです。このトピックでは、Apache Doris について説明します。
背景情報
Apache Doris の詳細については、「Apache Doris の概要」をご参照ください。
シナリオ
次の図に示すように、さまざまなデータ統合と処理の後、データソースは通常、リアルタイムデータウェアハウス Doris と、Apache Hive、Apache Iceberg、Apache Hudi などのオフラインデータレイクまたはデータウェアハウスに格納されます。
Apache Doris は、次のシナリオで広く使用されています。
レポート分析:
リアルタイムダッシュボード
社内アナリストおよびマネージャー向けのレポート
通常、毎秒数千回のクエリ ( QPS ) とミリ秒単位の高速応答時間を必要とする、ユーザー向けまたは顧客向けの高度に同時実行されるレポート分析 ( Web サイト分析や広告レポートなど)
アドホッククエリ: 不規則なクエリパターンと高スループット要件を持つアナリスト向けのセルフサービス分析
統合データウェアハウスの構築: Apache Doris を使用すると、ユーザーは単一のプラットフォーム上に統合データウェアハウスを構築し、複雑なソフトウェアスタックを処理する手間を省くことができます。 Apache Doris に基づいて構築された統合データウェアハウスは、Apache Spark、Apache Hive、Apache Kudu、Apache HBase、および Apache Phoenix で構成される古い複雑なアーキテクチャに取って代わります。
データレイク間のフェデレーテッドクエリ: Apache Doris は、外部テーブルを使用して、Apache Hive、Apache Iceberg、および Apache Hudi のデータに対してフェデレーテッド分析を実行します。これにより、データをコピーすることなく、優れたクエリパフォーマンスを実現します。
技術概要
次の図は、Apache Doris の全体的なアーキテクチャを示しています。
Apache Doris のアーキテクチャはシンプルで簡潔であり、2 種類のプロセスのみです。
Frontend ( FE ): ユーザーリクエストの処理、クエリの解析と計画、メタデータ管理、およびノード管理を担当します。
Backend ( BE ): データの格納とクエリプランの実行に使用されます。
どちらの種類のプロセスも水平方向にスケーラブルです。単一のクラスターは、最大数百台のコンピューターと数十ペタバイトのストレージ容量をサポートします。さらに、これら 2 種類のプロセスは、コンセンサスプロトコルを使用して、サービスの高可用性とデータの高信頼性を実現します。この高度に統合されたアーキテクチャ設計により、分散システムの O&M コストが大幅に削減されます。
Apache Doris の技術は、次の 5 つの側面から紹介されています。
インターフェースの面では、Apache Doris は MySQL プロトコルを採用し、標準 SQL をサポートし、MySQL ダイアレクトと高度に互換性があります。さまざまなクライアントツールを使用して Apache Doris にアクセスできます。 Apache Doris は、ビジネスインテリジェンス ( BI ) ツールとのシームレスな統合もサポートしています。
ストレージエンジンの面では、Apache Doris は、列ごとにデータのエンコード、圧縮、および読み取りを行う列指向ストレージエンジンを使用します。これにより、高い圧縮率を実現し、無関係なデータスキャンを大幅に削減できます。このようにして、I/O リソースと CPU リソースがより効率的に使用されます。
Apache Doris は、データスキャンを最小限に抑えるために、さまざまなインデックススキーマもサポートしています。
ソート済み複合キーインデックス: 最大 3 つの列を指定して複合ソートキーを形成できます。これにより、データを効果的にプルーニングして、高度に同時実行されるレポートシナリオをより適切にサポートできます。
Z オーダーインデックス: スキーマ内の任意のフィールドの組み合わせで範囲クエリを効率的に実行できます。
最小または最大インデックス: 数値型のデータに対する等価クエリと範囲クエリの効果的なフィルタリングを可能にします。
BloomFilter インデックス: 高カーディナリティ列の等価フィルタリングとプルーニングを効果的に実現します。
転置インデックス: 特定のフィールドを検索できます。
ストレージモデルの面では、Apache Doris はさまざまなストレージモデルをサポートし、さまざまなシナリオに合わせてモデルを最適化します。
集約キーモデル: このモデルは、同じキーを持つ値列を事前にマージします。これにより、パフォーマンスが大幅に向上します。
一意キーモデル: このモデルでは、キーは一意です。同じキーを持つデータは上書きされ、行レベルのデータ更新が実現されます。
重複キーモデル: これは、ファクトテーブルのデータを詳細として格納できる詳細データモデルです。
Apache Doris は、強力な整合性のあるマテリアライズドビューもサポートしています。マテリアライズドビューは自動的に選択および更新されます。これにより、ユーザーのメンテナンスコストが大幅に削減されます。
クエリエンジンの面では、Apache Doris はクエリエンジンで超並列処理 ( MPP ) モデルを採用して、ノード間およびノード内での並列実行を実現します。また、複数の大きなテーブルの分散シャッフル結合をサポートして、複雑なクエリを処理します。次の図は、クエリエンジンを示しています。

Apache Doris のクエリエンジンはベクトル化されており、すべてのメモリ構造が列形式でレイアウトされています。これにより、仮想関数呼び出しを大幅に削減し、キャッシュヒット率を向上させ、単一命令複数データ ( SIMD ) 命令を効率的に使用できます。ワイドテーブル集計シナリオにおける Apache Doris のクエリエンジンのパフォーマンスは、非ベクトル化エンジンの 5 ~ 10 倍です。
オプティマイザの面では、Apache Doris はコストベースの最適化 ( CBO ) とルールベースの最適化 ( RBO ) を組み合わせて使用します。 RBO は、定数畳み込み、サブクエリ書き換え、および述語プッシュダウンをサポートしています。 CBO は結合順序の変更をサポートしています。 Doris CBO は、より正確な統計の収集と導出、およびより正確なコストモデル予測のために継続的に最適化されています。
Apache Doris は、適応クエリ実行テクノロジーを使用して、実行時統計に基づいて実行プランを動的に調整します。たとえば、Apache Doris は実行時フィルターを生成し、フィルターをプローブ側にプッシュしてから、フィルターを下部の Scan ノードに自動的に浸透させることができます。これにより、プローブのデータ量が大幅に削減され、結合パフォーマンスが向上します。次の図は、プロセスを示しています。
Apache Doris は、In、Min、Max、および BloomFilter の実行時フィルターをサポートしています。
このトピックの内容と図は、「Apache Doris の概要」を参照しています。