PGSpiderの調査

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

# PGSpider

PGSpiderは、分散配置された複数のデータソースをそれぞれ子ノードとして接続して、データを横断的に検索するための SQL エンジンです。さらに子ノードに PGSpider を接続し、中間ノード化することで木構造の広域かつ大規模な分散環境を構築して、データ検索の高速化を実現しています。具体的には、分散されたテーブルを1つの仮想的なテーブルとして扱えるマルチテナント機能、異なるデータソースに同じようにアクセスする機能、データ検索の高速化を実現するためのパラレルクエリと効果的なプッシュダウンが特徴です。<br>PGSpiderは、OSSの RDBMSである PostgreSQLをベースに開発しました。

参照 : [東芝レビュー74巻1号 R&D最前線 「エッジコンピューティングに対応した大規模分散データの高速検索フレームワーク PGSpider」](https://www.toshiba.co.jp/tech/review/2019/01/74_01pdf/r01.pdf)<br>[PGConf.ASIA 2019 - PGSpider High Performance Cluster Engine](https://www.slideshare.net/Equnix/pgconfasia-2019-pgspider-high-performance-cluster-engine-shigeo-hirose?ref=https://2019.pgconf.asia/gallery)<br>[FOSDEM PGDay 2020 - PGSpider High-performance SQL cluster engine](https://www.postgresql.eu/events/fosdem2020/sessions/session/2893/slides/281/FOSDEM2020PGDay_PGSpider.pdf)


# 基本情報

|項目&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|内容|
|-----|--------|
|URL|https://github.com/pgspider|
|データモデル|リレーショナルデータ・モデル|
|動作環境|**CPU**：x86系、IA64、ARM<br>**メモリ**：512MB以上(Shared Bufferの4倍の物理メモリが必要)<br>**ストレージ** :<br>**OS**：Linux系<br>**Software** : ビルドするために最低限、Cコンパイラ以外にmake, tar, gzip, zlib, Readlineが必要<br>参照 : [Supported Platforms](https://www.postgresql.org/docs/current/supported-platforms.html)|
|実装言語|主にC言語で開発|
|ライセンス|MITライセンスで公開予定|
|主なバージョン|2020-01-30 : Version 1.0をリリース|
|開発元|東芝 ソフトウェア技術センター|
|開発体制|参照 : https://github.com/orgs/pgspider/people[PGSpider people]|
|活動状況|関係するFDWを公開していますが、本体は2020年1月に公開予定です。|
|国内サポート体制|東芝 ソフトウェア技術センターがサポート予定|
|その他|PostgreSQLとして RDBMS を利用も可能です。|

# 機能情報

|項目&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|内容|
|-----|--------|
|対応プログラム言語|C/C++、pyhton、.NET、Go、Perl、JavaScript、.NET、TCL<br>また、ODBC、JDBC ドライバを利用可能なプログラム言語であればアクセス可能です<br>参照 : [PostgreSQL Documentation : H.1. Client Interfaces](https://www.postgresql.org/docs/current/external-interfaces.html)|
|アクセス可能なDB|PostgreSQL、Oracle、MySQL、Infomix、Firebird、SQLite、Sybase、MS SQL Server、MonetDB、HBase、Cassandra、ClickHouse、CouchDB、GridDB、InfluxDB、Kafka、Kyoto Tycoon、MongoDB、Neo4j、Quasar、Redis、RethinkDB、Riak、WhiteDB、CSV、JSON、Parquet、XML、LDAP、DynamoDB、Elastic Search<br>参照 : [PostgreSQL Wiki : Foreign data wrappers](https://wiki.postgresql.org/wiki/Foreign_data_wrappers)|
|クエリ言語|SQL|
|マルチテナント|各ノードで同じテーブル名があれば、1つのテーブルとして扱うマルチテナント機能がある。また、ノード列でどのノードから取得したレコードかを知ることができます。|
|インデックス|なし|
|トランザクション|単一子ノードであれば、PostgreSQLのトランザクションをサポートします。アイソレーション・レベルはRead uncommitted、Read committed、Repeatable read、Serializableがある。デフォルトは Read Committed。これはMVCCで実装されています。|
|ストアドプロシジャ|PostgreSQLのストアドプロシージャ、ストアドファンクションをサポートします。|
|dockerコンテナ|2020/3にリリース予定|
|性能拡張|PGSpiderでは、スループットを向上させたい場合、pgpool-IIというクラスタ管理ツールを組み合わせることで、スケールアウト・クラスタリングを実現します。大量のノードが存在し、レイテンシを向上させたい場合、PGSpiderで木構造で構築することでクエリ処理を分割させることが可能です。<br>参照 : [Pgpool Wiki](https://www.pgpool.net/mediawiki/jp/index.php)|
|高可用性|PGSpiderでは、PostgreSQLの各種レプリケーション機能を利用します。<br>参照 : [PostgreSQL Documentation : Chapter 26. High Availability, Load Balancing, and Replication](https://www.postgresql.org/docs/current/high-availability.html)<br>また、子ノードとのネットワーク接続が遮断された時の接続リカバリー機能を追加したことで可用性も向上しさせています。|
|運用|PGSpiderでは、カタログ情報などのバックアップ/リストアでPostgreSQLバックアップ/リストア機能(pg_basebackup, pg_dump, pg_restore)を利用します。オフラインバックアップはDBを停止して、ファイルシステムバックアップを実施します。<br>参照 : [PostgreSQL Documentation : Chapter 25. Backup and Restore]|(https://www.postgresql.org/docs/current/backup.html)
|出来ないこと|複数ノードでのトランザクション処理が出来ません|

# セキュリティ

|項目&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|内容|
|-----|--------|
|通信暗号化|SSLでクライアントとDBサーバ間の通信を暗号化しています|
|DB格納領域の暗号化|透過的暗号化でDB格納領域を暗号化することが可能です|
|認証機能|証明書、trust/reject、scram-sha-256、md5、ident/peer、LDAPなど、さまざまなクライアント認証方法が利用可能です。|
|権限管理|DBオブジェクトに操作権限をロールまたはユーザに付与することで権限管理ができます|
|DB監査|監査ログ機能有(pgaudit)|

参照 : [PostgreSQLのセキュリティを極める](https://www.sraoss.co.jp/event_seminar/2018/pgconf.asia-JA-20181212-day2-B5-sato.pdf)


# まとめ

PGSpider は、PostgreSQLをベースとしていることで、分散検索以外のデータベース機能、ツールが豊富です。分散検索もマルチテナント機能をサポートしていること、時系列データベースに対応していることは強みだと考えます。また、高可用性、運用面、セキュリティ対応も見逃せないポイントです。

掲載内容は、(株)東芝 デジタルイノベーションテクノロジーセンター及びソフトウェア技術センターの見解です。コメント等は広くご意見を頂ければ幸いです。
また、記述について誤りがあったり、気になることがあれば、編集リクエストやコメントでフィードバックしていただけると助かります。

私達と PGSpider を一緒に開発したいという方は [こちら](https://www.hr-cycle.jp/c/toshiba/job_detail.php?id=582aacd9979f&mode=items&c_id=&c_sub_id=) か [こちら](https://www.linkedin.com/jobs/view/1625308609/?alternateChannel=search) をご覧下さい。