GridDBの調査

IoT(Internet of Things) システムでは、各種センサーから、秒以下の周期で取得された、大量の時系列データを取り扱います。このようなデータを保持するシステムとして、時系列データベースは求められています。そこで、時系列データベースの GridDB について、まとめました。
[OSSデータベース調査 NoSQLデータベース編](https://qiita.com/kanegoon/items/5ade64336d389feea4bc)の中で、GridDB を扱っていますが、可用性、拡張性、セキュリティなど掘り下げて、以下のようにまとめました。

# GridDB 

スケールアウト型分散データベース GridDB は、IoTやビッグデータに適した、「IoT指向のデータモデル」「高い性能」「高い拡張性」「高い信頼性と可用性」を特長とする、膨大な時系列データを効率よく蓄積し、高い性能をスケーラブルに発揮できるデータベースです。

# 基本情報

|項目&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|内容|
|-----|--------|
|URL|https://www.toshiba-sol.co.jp/pro/griddb/index_j.htm<br>https://griddb.net|
|データモデル|GridDB独自のキーコンテナ型(RDBのテーブルに似た概念)でデータを保持します。コンテナには、コレクションコンテナと時系列コンテナの2種類があります。|
|動作環境|**CPU**：x86_64<br>**メモリ**：32GB 以上<br>**ストレージ**：100GB 以上<br>**OS**： <br>Red Hat Enterprise Linux 7.6/7.7/7.8/7.9/8.1/8.2/8.3 (64bit版)<br>CentOS 7.6/7.7/7.8/7.9/8.1/8.2/8.3  (64bit版)<br>参照 : [動作環境](https://www.toshiba-sol.co.jp/pro/griddb/docs-jp/v4_6/GridDB_ReleaseNotes.html?_ga=2.132335563.47854562.1624405520-483230675.1616380623#section-4)|
|実装言語|C++|
|ライセンス|**Community Edition**： <br>サーバは AGPLライセンス<br>Javaクライアントとオプショナル・コマンドは Apache License version 2.0<br>参照 : https://github.com/griddb/griddb_nosql<br> **Enterprise Edition**： <br>パーペチュアルライセンス(永続使用可)、サブスクリプションライセンス(契約期間使用可)の2種類があります。<br>参照 : [GridDB 製品ラインアップ](https://www.global.toshiba/jp/products-solutions/ai-iot/griddb/product/lineup.html)|
|開発元|東芝デジタルソリューションズ|
|開発体制|OSS版 Contributorは6名。 [GridDB Contributor License Agreement](https://github.com/griddb/griddb_nosql/blob/master/CLA_rev1.1.pdf) を締結する必要があります。|
|国内サポート体制|国内では東芝デジタルソリューションズがサポート|
|その他|国産フルスクラッチのOSSデータベース|

# 機能情報

|項目&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|内容|
|-----|--------|
|対応プログラム言語|C/C++、Java、Go、Python、Ruby、Perl、JavaScript (Node.js)、PHP<br>参照 : https://github.com/griddb|
|クエリ言語|TQL(SQLのサブセット)<br>NoSQLインターフェース(Native API)<br>NewSQLインタフェース(SQL)、JDBC/ODBCおよびHTTP/REST APIをサポート |
|データ圧縮|時系列コンテナは、誤差あり間引き圧縮(HI)と誤差なし間引き圧縮(SS)の2種類でデータを圧縮して保持することが可能です。圧縮オプションの指定は時系列コンテナ作成時に指定します。<br>参照 : [GridDB機能リファレンス 6.4.1 圧縮機能](https://www.toshiba-sol.co.jp/pro/griddb/docs-jp/v4_6/GridDB_FeaturesReference.html?_ga=2.229338329.47854562.1624405520-483230675.1616380623#section-29)<br>メモリ上のデータをデータベースファイル（チェックポイントファイル）に書き出す際に、GridDBの書き出し単位のブロック毎に圧縮操作を行うことで、データベースファイルが圧縮されます。<br>参照 : [GridDB機能リファレンス 6.11 データベース圧縮/解放機能](https://www.toshiba-sol.co.jp/pro/griddb/docs-jp/v4_6/GridDB_FeaturesReference.html?_ga=2.229338329.47854562.1624405520-483230675.1616380623#section-58)|
|データ自動集計|未サポート|
|期限解放機能|設定した保持期間を超えたロウデータを、検索や削除などの操作対象から外して参照不可とした後、DBから物理的に削除する期限解放機能があります。期限解放にはロウ期限解放とパーティション期限解放の2種類があります。<br>また、コールドデータとなったロウの削除方法は、自動削除、または、アーカイブ保存後に自動削除のいずれかを選択できます。<br>参照 : [GridDB機能リファレンス 6.4.3 期限解放機能](https://www.toshiba-sol.co.jp/pro/griddb/docs-jp/v4_6/GridDB_FeaturesReference.html?_ga=2.229338329.47854562.1624405520-483230675.1616380623#section-32)|
|時系列分析関数|集計演算関数は、重み付きで平均を求めるTIME_AVGがあります。<br>選択関数は、TIME_NEXT、TIME_NEXT_ONLY、TIME_PREV、TIME_PREV_ONLYがあります。<br>補間演算関数は、TIME_INTERPOLATED、TIME_SAMPLINGがあります。<br>参照 : [GridDB機能リファレンス 6.4.2 TQLの演算機能](https://www.toshiba-sol.co.jp/pro/griddb/docs-jp/v4_6/GridDB_FeaturesReference.html?_ga=2.229338329.47854562.1624405520-483230675.1616380623#tql)|
|インデックス|ツリー索引、ハッシュ索引、空間索引が使用可能です。<br>時系列コンテナはハッシュ索引、空間索引を使用できません。<br>また、時系列のロウキー(TIMESTAMP型)の索引は自動で付与されます。<br>参照 : [GridDB機能リファレンス 5.1.3 主キー](https://www.toshiba-sol.co.jp/pro/griddb/docs-jp/v4_6/GridDB_FeaturesReference.html?_ga=2.229338329.47854562.1624405520-483230675.1616380623#section-21)|
|トランザクション|GridDBでは、コンテナ単位でのトランザクションをサポートしています。<br>しかし、複数コンテナを参照するトランザクションではAtomicity (原子性)が保障されません。<br>参照 : [GridDB機能リファレンス 6.6 トランザクション機能](https://www.toshiba-sol.co.jp/pro/griddb/docs-jp/v4_6/GridDB_FeaturesReference.html?_ga=2.229338329.47854562.1624405520-483230675.1616380623#section-40)|
|ストアドプロシジャ|未サポート|
|トリガー|コンテナのロウデータへの操作 (追加/更新もしくは削除) が行われた際に、自動的に通知するトリガーをサポートしています。<br>通知方法は、Java Messaging Service(JMS)、REST の 2種類があります。<br>通知内容は指定されたカラムのデータのみです。<br>参照 : [GridDB機能リファレンス 6.9 トリガ機能](https://www.toshiba-sol.co.jp/pro/griddb/docs-jp/v4_6/GridDB_FeaturesReference.html?_ga=2.229338329.47854562.1624405520-483230675.1616380623#section-53)|
|dockerコンテナ|dockerhubでGridDBのDocker Containerイメージが公開されています。<br>https://hub.docker.com/r/griddb|
|性能拡張|自律データ再配置技術によってクラスタへのノードの追加・削除の自律管理による運用の容易化が可能である。|
|高可用性|クラスタを構成する複数のノード間では、ユーザが設定したレプリケーション数に従って、パーティション単位にデータのレプリカが作成されます。<br>コンテナに更新があると多重化されたパーティションのうち、オーナノード（レプリカのマスタを持つノード）が更新されます。その後オーナノードから更新内容がバックアップノードに反映されます。<br>レプリケーション方法は非同期と準同期の2種類のレプリケーションを提供されています。<br>クラスタ構成で運用している際にノード障害が発生した場合、クライアントAPI内で自動的にバックアップノードに接続し直し処理を継続するクライアントフェイルオーバー機能が動作します。<br>参照 : [GridDB機能リファレンス 6.7 レプリケーション機能](https://www.toshiba-sol.co.jp/pro/griddb/docs-jp/v4_6/GridDB_FeaturesReference.html?_ga=2.202597460.47854562.1624405520-483230675.1616380623#section-49)|
|運用|Enterprise Editionでは、クラスタを構成する全ノードに対して順次行うことで、サービスを継続しながら、クラスタ全体としてのバックアップが行えます。また、統合運用管理GUI(gs_admin)が提供されています。<br>参照 : [GridDB 運用ツールリファレンス](https://www.toshiba-sol.co.jp/pro/griddb/docs-jp/v4_6/GridDB_OperationToolsReference.html?_ga=2.170566629.47854562.1624405520-483230675.1616380623#section-79)|
|出来ないこと|複数コンテナを用いたトランザクション処理ができません。|

# セキュリティ

|項目&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|内容|
|-----|--------|
|通信暗号化|クライアントとクラスタ間の通信は、SSL/TLSv1.2/TLSv1.3に対応しています。|
|DB格納領域の暗号化|なし|
|認証機能|ユーザ定義ファイルでユーザとパスワードを格納してユーザ認証で使用しています。パスワードは登録の際に暗号化されます。ユーザは、管理ユーザと一般ユーザの2種類があり、利用できる機能に違いがあります。<br>また、外部認証としてLDAP認証にも対応しています。|
|権限管理|管理ユーザがデータベース単位で一般ユーザに付与します。|
|DB監査|未サポート|

参照 : [GridDB 運用ツールリファレンス 4.7 ユーザ管理](https://www.toshiba-sol.co.jp/pro/griddb/docs-jp/v4_6/GridDB_OperationToolsReference.html?_ga=2.170566629.47854562.1624405520-483230675.1616380623#section-79)

# まとめ
GridDBは、時系列データに特化した、期限解放機能や高可用性などが特に強いです。しかも OSS版でもこれらの機能が使えるのは大きいです。他の時系列データベースと違って、国内サポート体制が整っています。

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

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