🐥

Trinoに入門してみた ①Trinoとは

に公開

はじめに

データエンジニアをやっておりますTaichiです。
最近Trino Defenetive Guideを勉強する機会がありまして、折角なので読書メモを残しておこうと思います。
https://learning.oreilly.com/library/view/trino-the-definitive/9781098107703/

第一回目は、Trinoの概要を説明していきます。今後続編でより詳細な内部構造を執筆していこうと思います。

Trinoとは?

Trino(旧称PrestoSQL)は、高速で分散型のSQLクエリエンジンです。データを1か所に移動せず、さまざまなデータソースに対してクエリを実行できることが特徴です。データウェアハウス、データレイク、リレーショナルデータベース、NoSQLストアなど、異なるストレージにまたがる分析が可能です。

ビッグデータ基盤の課題

多種多様なストレージ

データの保存領域として、RDBMS(リレーショナルデータベース)、NoSQLデータベース、ドキュメントDB、Key-Valueストア、オブジェクトストレージなど、さまざまな選択肢が存在します。これらのストレージは、それぞれ異なる特性を持ち、データの構造やアクセス方法も異なります。

特に、NoSQLやオブジェクトストレージのようなデータストアでは、SQLを標準的なクエリ言語として利用できない場合があり、データの分析や統合が難しくなります。

一方、ビジネスアナリストやデータアナリストは、一般的にSQLの知識を持っていても、それ以外のクエリ言語(例: MongoDBのクエリ言語やCassandraのCQL)には習熟していないケースが多く、異種データソースの活用が十分に進まないという問題があります。

膨大な処理量

データの増加により、単一のマシンで分析クエリを実行することが困難になっています。特に、ビッグデータの解析では数十億、数百億レコードを対象とすることが一般的であり、従来のデータベースやETL処理では処理時間が長くなりすぎることが課題となります。

また、従来のデータウェアハウスのようなシステムでは、スケールアップ(より高性能なマシンへの変更)には高額なコストがかかり、スケールアウト(複数のマシンで並列処理を行う)にはシステム設計の複雑化が伴います。そのため、大量データを扱う際のパフォーマンスとコストのバランスを取るのが難しくなっています。

Trinoの解決策

Trinoは下記2つの機能を提供し前項の問題を解決します。

①異なるデータソースへのフェデレーションクエリ

Trinoは、HDFS、オブジェクトストレージ(例: Amazon S3)、RDBMS、NoSQLデータベースなど、異なるデータソースに対して統一的にクエリを実行するフェデレーションクエリの機能を提供します。

これにより、データを一か所に移動・統合することなく、複数のデータソースを横断してクエリを実行できるようになります。具体的には、以下のようなメリットがあります。

単一のSQLインターフェースで異種データを統合

ビジネスアナリストやデータサイエンティストは、SQLを使用することで、NoSQLデータベースやオブジェクトストレージなどに格納されたデータを容易に分析できるようになります。これにより、複雑なデータ変換処理を行うことなく、多様なデータにアクセス可能になります。

ETLプロセスの負担軽減

従来、異なるデータソースを統合するには、データウェアハウスへのデータロードやETL処理が必要でした。しかし、Trinoのフェデレーションクエリ機能を活用することで、データを移動せずにそのままクエリを実行できます。これにより、ETLプロセスの負担が軽減し、データの即時分析が可能になります。

②並列処理と水平スケーリング

Trinoは、分散アーキテクチャを採用しており、複数のノード(サーバ)を使った並列処理を実現します。この仕組みにより、膨大なデータを効率的に処理することが可能になります。

大規模データの並列処理

Trinoは、1つのクエリを複数のノードに分割し、それぞれ並行して処理を行います。これにより、従来のデータベースと比較して、高速なクエリ実行が可能となります。

水平スケーリングによる拡張性

データ量やクエリ負荷が増加した際には、新たにノードを追加することで、柔軟に処理能力を拡張できます。従来のデータウェアハウスのようなスケールアップではなく、よりコスト効率の良いスケールアウトによって対応できる点が大きな利点です。

Trinoのアーキテクチャ

前述の通りTrinoは分散型クエリーエンジンで、複数のサーバーで並列にデータを処理します。Trinoサーバーにはコーディネーターワーカーの2種類があります。

参考
https://trino.io/docs/current/overview/concepts.html

コーディネーター

コーディネーターはステートメントの解析、クエリの計画、Trinoワーカーノードの管理を行うサーバーです。Trinoの「頭脳」であり、クライアントがステートメントを実行するために接続するノードでもあります。すべてのTrinoインストールには、1つ以上のTrinoワーカーと一緒にTrinoコーディネーターが必要です。

ワーカー

ワーカーは、Trinoインストール内のサーバーで、タスクの実行とデータの処理を担当します。ワーカーノードはコネクタからデータをフェッチし、中間データを相互に交換します。コーディネーターは、ワーカーから結果をフェッチし、最終結果をクライアントに返す役割を担います。

まとめ

Trinoは、分散SQLクエリエンジンとして、異なるデータソースを統合的にクエリできる強力なツールです。
特に、大規模データを高速に処理したい企業や、データウェアハウス/データレイクを活用する環境に最適です。

次回はより詳細なアーキテクチャについて書こうと思います。

Discussion