Doris データウェアハウスの特徴を解説した記事

01

ミニマリスト建築

設計の面では、Doris は Google Mesa のデータ ストレージ モデル、Apache の ORCFile ストレージ形式、Apache Impala クエリ エンジン、MySQL インタラクション プロトコルを統合しており、高度なテクノロジーと高度なアーキテクチャを備えた最先端の設計製品です。

アーキテクチャの観点から見ると、Doris には 2 種類のプロセスしかありません。1つはFEで、Doris の管理ノードとして理解できます。主にユーザー リクエストのアクセス、クエリ プランの分析、メタデータの保存、およびクラスター管理関連の作業、もう 1 つBE が主にデータの保存とクエリ プランの実行を担当します。どちらのタイプのプロセスも水平方向に拡張可能です。さらに、Doris はサードパーティ システム (HDFS、Zookeeper など) に依存しません。この高度に統合されたアーキテクチャ設計により、運用コストと保守コストが大幅に削減されます。

FEノードには、Leader Follower 、およびObserverの 3 つの役割が含まれます。デフォルトでは、クラスターにはリーダーが 1 つだけ存在でき、フォロワーとオブザーバーは複数存在できます。その中で、リーダーとフォロワーは Paxos 選択グループを形成し、リーダーがダウンした場合、残りのフォロワーは自動的に新しいリーダーを選択して、高い書き込み可用性を確保します。オブザーバーはリーダーのデータを同期しますが、選挙には参加しません。FE が 1 つだけ展開されている場合、その FE がデフォルトでリーダーになります。

FEノードは主に、ストレージ管理 ( Store Manager ) モジュール、状態管理 ( State Store ) モジュール、調整 ( Coordinator ) モジュール、メタデータ ( StoreMeta ) モジュール、およびメタデータ キャッシュ ( StoreMeta Cache ) モジュールを含みます。ストレージ管理モジュールは、データベース、テーブル情報、タブレット情報、タブレット コピー情報などを含むすべてのメタデータ情報の管理を担当します。ストレージ管理モジュールは、ユーザーの権限情報 (ユーザー認証情報と認可情報) の管理やデータのインポート タスクも担当します。ステータス管理モジュールは、すべての BE プロセスの生存ステータス情報の管理、負荷情報およびその他の非永続情報のクエリ、およびパブリッシュおよびサブスクライブ インターフェイスの提供を担当します。調整モジュールは、ユーザーからのリクエストを受信し、ステートメントを解析し、実行プランを生成し、現在のクラスターのステータスに従って実行プランをスケジュールする責任を負います。メタデータ モジュールはメタデータの読み取りと書き込みを担当し、FE リーダーのみがこの権限を持っています。メタデータ キャッシュ モジュールは、ステートメントの解析と実行プランの生成のためのメタデータの同期を担当します。これは主にフォロワー ロールとオブザーバー ロールの権限です。

BEノードは無限に拡張でき、すべてのBEノードの役割は同等です。クラスターが十分に大きい場合、一部の BE がオフラインであっても、クラスターがサービスを提供するのに影響はありません。BE ノードは主にストレージ エンジン (Store Engine) とクエリ実行プログラム (Query Executor) で構成されます。ストレージ エンジンは、ノードのローカル タブレット データを管理し、データを送信または受信してコピーを形成し、複数のバージョンのデータを定期的にマージして更新してストレージ使用量を削減します。ストレージ エンジンは、クエリ実行プログラムからデータ読み取り要件とバッチ データ インポート要件を受け取る役割もあります。MPP クラスターでクエリが実行されると、クエリはツリー状の実行ツリーに分割されます。このツリーの実行はコーディネーターによって調整されます。ツリーのリーフ ノードはプラン フラグメント (PlanFragment) とも呼ばれ、それぞれPlanFragment は BE ノードに割り当てられ、実行するクエリ実行プログラム、これはクエリ実行モジュールの役割です。

02

使い方が簡単

Doris は構造がシンプルであるだけでなく、開発と使用も非常にシンプルです。OLAP データベースはパフォーマンスがすべてではなく、使いやすさが使い続けるかどうかの鍵となりますが、Doris はシステム設計の当初から常にユーザーの使いやすさを出発点としてきました。

データ分析のサイクル全体の観点から見ると、データ モデリング→データ インポート→ユーザー分析→継続的な使用とメンテナンスとアップグレードの 4 つの側面に簡単に要約できます。Doris の使いやすさは随所にあります。

データ モデリングに関して、Doris は3 つのモデル ( Aggregate Unique Duplicate )をサポートしており、 OLAP分野のさまざまなアプリケーション シナリオに対応できます。同時に、Doris テーブル作成ステートメントは、分散キーやバケット番号など、MySQL と比較して分散システムのいくつかの機能を追加するだけです。分散データベースの使用経験があるユーザーにとっては、非常に理解しやすく、操作も簡単です。

データ インポートに関しては、Doris はさまざまなデータ インポート ソリューション(図 2 を参照) を提供しており、さまざまなデータ ソースに合わせて選択できるほか、データ インポート プロセス中にアトミック性を保証します。バッチ インポートに Broker Load を使用する場合でも、単一インポートに INSERT ステートメントを使用する場合でも、これは完全なトランザクション操作です。インポート トランザクションでは、バッチ内のデータがアトミックに有効になることが保証され、部分的なデータの書き込みは発生しません。

同時に、各インポート ジョブは、データベース内でインポート タスクを一意に区別するために使用されるラベルを生成します。ラベルはユーザーが指定でき、一部のインポート関数もシステムによって自動的に生成されます。ラベルは、対応するインポート ジョブが一度だけ正常にインポートされることを保証するために使用されます。正常にインポートされたラベルが再度使用されると、そのラベルは拒否され、「ラベルはすでに使用されています」というエラーが報告されます。このメカニズムを通じて、データ消費側は At-Most-Once セマンティクスを実現できます。上流システムの At-Least-Once セマンティクスと組み合わせると、エンドツーエンドのデータ インポートの Exactly-Once セマンティクスを実現できます。

SQL開発に関しては、Doris標準SQL言語をサポートしており、方言のMySQLと互換性があります単純な単一テーブルの集計、ソートおよびフィルタリング操作、または複雑な複数テーブルの関連付け、サブクエリ、ウィンドウ関数などのいずれであっても、Doris はSQLを通じて簡単に実行できるため、ユーザーの移行と使用のコストが大幅に削減されます。アドホックETLシナリオなどの高スループットのアドホック クエリDorisの強みです。Doris は、Grouping SetSQL構文もサポートしUDFまたはUDAF関数をカスタマイズおよび拡張するテラバイト規模の場合Doris はHive部分的に置き換えることができるため、ユーザーは 1 つのデータベースですべての要件を満たすことができます。

ツールに関しては、Doris はFEモジュールMySQLプロトコルの互換性を実装しました。これは、ユーザーが標準のMySQLを使用して接続するのに便利で、さまざまなツールを非常によくサポートしています。データベース開発[3] [4] に関してはDBeaverDataGripNavicatシームレスに使用でき、アプリケーションのプログラミングに関して[5] [6] Doris はMySQLJDBCおよびODBCインターフェイスを完全にサポートしています。CPythonJavaShellおよびその他の開発言語をサポートできます。BIアプリケーションに関しては、Doris はFanruanBI、 GuanyuanBI、 YonghongBITableauおよびその他のアジャイルBIソフトウェア、ETLスケジューリングの観点から、Doris はKettle DolphinSchedulerおよびその他の主流ソフトウェアをサポートしています。

クラスターの信頼性の観点から、Dorisメタデータはメモリ ストレージ+チェックポイント+ミラー ログ ファイルのモードを使用し、メタデータの高可用性と高信頼性を実現するためにBTBJERaftと同様Doris はデータの複数のコピーと自動修復を内部で管理し、データの高可用性と信頼性を確保します。一部のサーバーがダウンしても、クラスターは引き続き正常に実行でき、データは失われません。Dorisデプロイメントには外部依存関係がなく、クラスターを構築するためにBEおよびFEDoris はテーブル モードのオンライン変更 (列の追加と削除、Rollup) をサポートしています。これは現在のサービスに影響を与えず、読み取りおよび書き込み操作は非同期で実行されるためブロックされません。

クラスターの拡張と縮小に関しては、Doris は独自の分散管理フレームワークに基づいて、データ コピーの分散、修復、バランスを自動的に管理できます。たとえば、コピーが破損している場合、Doris はそれを自動的に検出して修復します。ノードの拡張と縮小の場合、SQLコマンドを 1 つ実行するだけで完了し、Doris が自動的にデータ断片化のバランシングを実行します。プロセス全体はシステム サービスにまったく影響を与えず、運用保守担当者による追加の操作は必要ありません。

クラスタのアップグレードに関しては、Dorisのアップグレード方法は非常に簡単で、バイナリ プログラムを置き換えてローリング方式でクラスタを再起動するだけです。設計の点では、Doris は完全な上位互換性があるため、新しいバージョンはグレースケール アップグレードを通じて検証およびテストすることもできます。Doris独自の障害再試行および障害ルーティング機能の一部も、アップグレード プロセス中に発生するエラーがビジネスに及ぼす影響を大幅に軽減します

03

機能豊富な

Doris は、企業がさまざまなアプリケーション シナリオに適応できるようにするための、非常に豊富な機能セットを提供します。以下では、Doris の特徴的な機能のいくつかを取り上げます。

1 つ目は、パーティションとバケットのプルーニング機能です。Doris は 2 つのレベルのデータ分割をサポートします。最初のレベルはパーティションで、範囲とリストの分割をサポートします。2 番目の層はバケット バケット化で、ハッシュを通じてデータを水平に分割し、データ断片化タブレットがクラスター内に均等に分散されます。

Doris はバケット プルーニング機能を使用して、クエリを非常に少数のシャードに修正できるため、単一のクエリによるシステム リソースの消費が大幅に削減され、クラスター全体の同時クエリ機能が向上します。同時実行性の高いクエリ シナリオでは、単一の Doris ノードで数千の QPS のクエリ リクエストをサポートできます。

2 つ目は合理的なキャッシュ機能です。Doris は、SQL レベルおよびパーティション レベルのクエリ キャッシュもサポートしています。このうち、SQL レベル キャッシュは、SQL ステートメントのハッシュ値をキーとして使用し、SQL 結果を直接キャッシュします。これは、更新頻度は高くないがクエリが非常に頻繁であるシナリオに非常に適しています。パーティション レベルのキャッシュは、SQL 結果内のさまざまなパーティションの結果データをインテリジェントにキャッシュし、後続のクエリでは、キャッシュされたパーティションのデータと新しいパーティションのリアルタイム クエリ データを使用して最終結果を取得できるため、重複データのリアルタイム コスト システム リソースの消費を削減するためのクエリ要件。

繰り返しになりますがDoris はビットマップデータ型をサポートしていますこのデータ型はビットマップを使用して整数データを格納し、ビットマップを通じて一部のコレクション操作を実行できます。ビットマップは、カーディナリティの高い正確な重複排除シナリオに適用できます。従来のリアルタイム重複排除アルゴリズムでは、メモリ内にハッシュ テーブルを構築してデータを重複排除する必要があり、カーディナリティが非常に高い場合、大量のメモリを占有します。ビットマップを使用すると、ビットマップ上の数値型を 0 と 1 に変換できるため、メモリのオーバーヘッドが大幅に削減され、重複排除の計算では、複数のビットマップの交差後の 1 の数を計算するだけで済み、限られたメモリ オーバーヘッドで、高速で高基数の正確な重複排除計算を実行します。

ユーザー ポートレートのシナリオでは、ユーザー ID の保存にビットマップが使用され、ビットマップ セット操作を通じてさまざまなタグの組み合わせを持つクラウド パッケージを迅速に取得できます。同時に、Doris にはビットマップに関連する多くの組み込み関数もあり、ファネルやリテンションなどの計算に使用されます。たとえば、intersect_count() 関数を使用すると、ユーザー維持率を簡単に計算できます。

そして最後にマテリアライズドビューですマテリアライズド ビューもDorisの中核機能の 1 つです。マテリアライズド・ビューは、(定義された SELECT ステートメントに従って) 事前に計算されたデータ・セットを、ユーザーにとって透過的で実際のデータを含むビュー表に保管します。マテリアライズド ビューは主に、任意のディメンションで元の詳細データを分析できるだけでなく、固定ディメンションを迅速に分析してクエリし、統合された観点から詳細な集計データを分析できるユーザーのニーズを満たすことを目的としています。

Doris では、ユーザーは詳細データ モデルを使用して詳細データを保存し、任意のディメンションとインジケーターを選択して、SUM、MIN、MAX、COUNT などの詳細データの集計ビューを作成できます。Doris は、スケジュール内のデータとマテリアライズド ビューが完全に一致していることを確認します。物理テーブルのデータがインポートまたは削除されると、マテリアライズド ビューは自動的に更新され、元のテーブルとマテリアライズド ビュー テーブル間のデータの整合性が確保されます。同時に、マテリアライズド ビューはユーザーのクエリに対して透過的であり、Doris はクエリ ステートメントのパターンに従ってクエリに最適なマテリアライズド ビューを自動的に照合します。マテリアライズド ビュー機能を使用すると、ユーザーは詳細モデルと集計モデルを 1 つのテーブルに統合し、特定の固定モードのクエリ応答を高速化できます。

Doris は主キーに基づくデータ更新もサポートしています。Unique データ モデルを通じて、ユーザーは主キーに基づいてデータを更新できます。実装レベルでは、Doris は Merge-on-Read メソッドを使用して更新されたデータを提供します。さらに、ユーザーは REPLACE_IF_NOT_NULL 集計メソッドを使用して部分的な列更新のニーズを満たすこともできます。Unique データ モデルの場合、Doris はフレンドリーな更新操作もサポートします。

Doris は、Unique モデルに基づいて、Marked Delete や Sequence Column などの機能を使用して、上流トランザクション データベースの更新データの同期操作を実現し、トランザクションのアトミック性を保証するだけでなく、データ同期の順序も保証できます。

04

オープンソース

Doris のもう 1 つの特に重要な特徴は、完全にオープンソースであり、オープンであることです。Apache Foundation のプロジェクトとして、Apache Doris は Apache License 2.0 に準拠しています。Apache License 2.0 は最も主流のオープンソース プロトコルであり、OSI によって「次の OSI 承認ライセンスは人気があり、広く使用されており、強力なコミュニティがある」と認識されています。

Apache License 2.0の具体的な内容については、Apache公式Webサイトでご確認ください。つまり、配布は完全に無料であり、プロジェクト コードの変更が許可され、オープン ソースまたは商用ソフトウェアとして再公開することが許可されます。認可が永続的に有効になると 元のコードとの契約と特許声明が締結されます。変更されたコードまたはソースコードから派生したコードで必要なコードは待機します。これは、あらゆる営利企業およびオープンソース ユーザーにとって非常に友好的な契約です。

おすすめ

転載: blog.csdn.net/xljlckjolksl/article/details/131575722