Prestoの調査

エッジコンピューティングによって高性能化したエッジ機器にデータが格納されるようになると、クラウドサービスにデータを集めないでエッジ機器のデータを直接検索したいとニーズが生まれてきました。そして、IoT(Internet of Things) システムでは広域に分散されたエッジ機器のデータ群を高速に検索するために、マルチデータベースにアクセスできる分散SQLエンジンが求められています。そこで、分散SQLエンジンの Presto についてまとめました。
動作環境やライセンスなど基本情報から、対応プログラム言語、可用性、拡張性など機能情報やセキュリティまで掘り下げて、以下のようにまとめました。

# Presto

Presto は、ペタバイトクラスまでのあらゆるサイズのデータ​​ソースに対してインタラクティブな分析クエリを実行するためのオープンソースの分散型SQLクエリエンジンです。
Presto は、1つの Presto Coordinator と複数の Presto Worker を持っている。クエリは Presto CLI のようなクライアントから送信されます。 
Presto Coordinatorはクエリのパース、アナライズ、クエリ実行計画を行い、処理を Presto Workerに渡します。 
Prestoは、Connectorプラグインで、複数のデータソースにアクセスしてクエリを実行するこが可能です。 
参照 : [Presto Overview](https://prestodb.github.io/overview.html)

# 基本情報

|項目&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|内容|
|-----|--------|
|URL|https://prestosql.io/|
|データモデル|リレーショナルデータモデル|
|動作環境|**CPU**： 64 bit CPU<br>**メモリ**： 512MB以上 ( 要 Shared Bufferの4倍の物理メモリ )<br>**ストレージ**： <br>**OS**： Linux、Mac OS X<br>**Software** : Java 8 Update 161 以上, Oracle JDK, OpenJDK、Maven 3.3.9(ビルド用)、 Python 2.4(実行用)|
|実装言語|Java|
|ライセンス|Apache License, Version 2.0<br>https://github.com/prestosql/presto/blob/master/LICENSE|
|主なバージョン|**Release 316** (2019-07-09) : data_formatでマルチバイト文字をサポート、UNNESTを使ったクエリの性能改善<br>**Release 315** (2019-06-15) : FETCH FIRST ... WITH TIES 構文のサポート追加、format() 関数の追加<br>**Release 314** (2019-06-08) : json_parse() 関数の性能改善、EXPLAINコマンドのプラン出力の可視化<br>参照 : [Presto Documentation 12. Release Notes](https://prestosql.io/docs/current/release.html)|
|開発元|[Presto Software Foundation](https://prestosql.io/foundation.html)|
|開発体制|Contributorは、304名<br>Contributorは、[Presto Software Foundation Contributor License Agreements](https://github.com/prestosql/cla)を締結する必要があります。|
|活動状況|GitHub issuesの投稿月間 平均約 600件、GitHub でソースコード・コミット月間約80件<br>参照 : [GitHub issues](https://github.com/prestosql/presto/issues)、[GitHub Commits](https://github.com/prestosql/presto/commits/master)|
|国内サポート体制|日本テラデータ、Think Bigのビッグデータ・コンサルティング・サービス を国内で販売開始<br>参照 : [日本テラデータ・プレスリリース](https://www.teradata.jp/Press-Releases/2016/Think-Big-%C2%B7-%C2%B7)|
|その他|開発の主体が、Facebook Open Source community をベースとする [Presto Foundation](https://prestodb.io/join.html) と 2019年1月に発足した [Presto Software Foundation](https://prestosql.io/) に二分されています。主要メンバーは Presto Software Foundation に移り、開発を進めているため、今後は、Presto Software Foundation の動向をキャッチアップする方が良いと思われます。|

# 機能情報

|項目&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|内容|
|-----|--------|
|対応プログラム言語|C、Go、Java、Node.js、Python、R、Ruby<br>参照 : [Presto Resources](https://prestosql.io/resources.html)|
|アクセス可能なDB|Apache Accumulo、Cassandra、Elasticsearch、Hive、Kafka、Kudu、Local File、Memory、MongoDB、MySQL、PostgreSQL、Redis、Redshift、SQL Server<br>参照 : [Presto Documentation 6. Connectors](https://prestosql.io/docs/current/connector.html)|
|クエリ言語|SQL(ANSI SQLに準拠)|
|マルチテナント|なし|
|インデックス|なし|
|トランザクション|Prestoでオンライントランザクション処理(OLTP)を扱えるように設計されていません。<br>参照 : [Presto Documentation 1.1. Use Cases -> What Presto Is Not](https://prestosql.io/docs/current/overview/use-cases.html)|
|ストアドプロシジャ|Oracleのようなストアドプロシージャはありませんが、コネクタによってストアドプロシージャ相当を実現することが可能です。使用する際には、CALLコマンドでプロシージャを実行することが可能です。<br>参照 : [Presto Documentation 9.4 CALL](https://prestosql.io/docs/current/sql/call.html)|
|dockerコンテナ|dockerhubでPrestoのDocker Containerイメージが公開されている。<br>https://hub.docker.com/r/prestosql/presto|
|性能拡張|workerの台数を増やせばスループットも比例して上がります。ただし、データを分割できないデータソースがあると、特定のworkerに負荷が集中して台数を増やしてもスループットもが上がらないことがあります。|
|高可用性|Prestoは、現時点でCoordinator、またはWorkerのための有効なフォールト・トレランスを持っていません。現在、改善中である。<br>参照 : [Presto: SQL on Everything](https://prestosql.io/Presto_SQL_on_Everything.pdf)、[High Availability #391](https://github.com/prestosql/presto/issues/391)|
|運用|バックアップや監視ツールはありません|
|出来ないこと|メモリに収まらないデータは処理できません。|

# セキュリティ

|項目&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|内容|
|-----|--------|
|通信暗号化|すべての通信は、SSL/TLSに対応可能です|
|DB格納領域の暗号化|なし|
|認証機能|Kerberos認証、LDAP認証、ダイジェスト認証が使用可能です。また、[Password Authenticator](https://prestosql.io/docs/current/develop/password-authenticator.html)の仕組みを利用して、認証部分を実装することも可能です。[実装例](https://github.com/wyukawa/presto-acl)|
|権限管理|権限管理は可能です|
|DB監査|Auditロギングがあります|

参照 : [Presto Documentation 3. Security](https://prestosql.io/docs/current/security.html)

# まとめ

Presto は、分散型SQLクエリエンジンに特化しているため、一般的なDB機能はサポートしていません。特に高可用性、運用面は対策が必要だと考えます。マルチテナント機能がないことはマイナスポイントと考えます。<br>
ただし、日本テラデータが国内で Presto をサポートしていることは大きなポイントと考えます。

掲載内容は、(株)東芝 デジタルイノベーションテクノロジーセンター及びソフトウェア技術センターの見解です。コメント等は広くご意見を頂ければ幸いです。

また、記述について誤りがあったり、気になることがあれば、編集リクエストやコメントでフィードバックしていただけると助かります。