TimescaleDBの調査

IoT(Internet of Things) システムでは、各種センサーから、秒以下の周期で取得された、大量の時系列データを取り扱います。このようなデータを保持するシステムとして、時系列データベースは求められています。そこで、時系列データベースの TimescaleDB について、まとめました。
動作環境やライセンスなど基本情報から、対応プログラム言語、可用性、拡張性など機能情報やセキュリティなど掘り下げて、以下のようにまとめました。


# TimescaleDB

TimescaleDB は、時系列データの高速格納と複雑なクエリのために最適化された PostgreSQL をベースとした時系列データベースです。<br>あらかじめ時系列データベースに保存されたデータに従来の RDBMS のように SQL を使うことが可能です。TimescaleDB は時系列データのために、NoSQL と RDBMS の両方の良さを実現しています。<br>参照 : [TimescaleDB Overview](https://docs.timescale.com/latest/introduction)

# 基本情報

|項目&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|内容|
|-----|--------|
|URL|https://www.timescale.com/|
|データモデル|TimescaleDBの機能を適用したテーブルを「HyperTable」と呼び、これが親テーブルとなって、専用スキーマに「Chunk」と呼ばれる日時間隔別の子テーブルが作成されます。内部的にはPostgreSQLのパーティショニングが使われています。<br>参照 : [Data Model](https://docs.timescale.com/latest/introduction/data-model)|
|動作環境|**CPU**： x86系、IA64、PowerPC系、S/390系、Sparc系、ARM、MIPS、VAX <br>**メモリ**： 512MB以上(要 Shared Bufferの4倍の物理メモリ) <br>**ストレージ**： <br>**OS**：Ubuntu 16.04以降、Debian 8, 9、RHEL/CentOS 7以降、macOS 10.12以降(要 Homebrew)、Windows 7以降(要 Visual Studio 2015)、Azure Database for PostgreSQL versions 9.6, 10、Ubuntu 18.04 Amazon EBS-backed AMI <br>参照 : [Installation](https://docs.timescale.com/latest/getting-started/installation)|
|実装言語|C言語|
|ライセンス|OSS : Apache License version 2.0 ただし、TSL library は Timescale License (TSL) <br>Community : TSL <br>Enterprise : 製品ライセンス <br>Cloud : サブスクリプション・ライセンス<br>参照 : [LICENSE](https://github.com/timescale/timescaledb/blob/master/LICENSE), [Product](https://www.timescale.com/products)|
|主なバージョン|[1.5.0](https://github.com/timescale/timescaledb/releases/tag/1.5.0) (2019-10-31) : <br>データ圧縮機能の追加、テーブルスペース間のチャンク移行のサポート、ChankAppendノードへのパラレルクエリ調整のサポート<br>[1.4.0](https://github.com/timescale/timescaledb/releases/tag/1.4.0) (2019-06-18) : <br>hypertableで連続集約機能を複数利用可能とした。continuous aggregates<br> [1.3.0](https://github.com/timescale/timescaledb/releases/tag/1.3.0) (2019-05-06) :  <br>連続集約機能の追加 (PostgreSQLのマテリアライズド・ビューに似た構造で手動のリフレッシュを必要としません)。<br>[1.2.0](https://github.com/timescale/timescaledb/releases/tag/1.2.0) (2019-01-29) : <br>新しい時系列データ解析関数、先進的なデータライフサイクル管理機能、性能改善、Postgres 11のサポート。 <br>[1.1.0](https://github.com/timescale/timescaledb/releases/tag/1.1.0) (2018-12-13) : <br>first()とlast()の最適化(インデックスを使用したクエリ)。 |
|開発元|[Timescale, Inc.](https://www.timescale.com/about)|
|開発体制|Timescaleを中心にContributorは37名<br>Contributorは [Contributor License Agreement](https://cla-assistant.io/timescale/timescaledb) を締結する必要がある。|
|活動状況|GitHub で Issues 月間約 20件、ソースコード・コミット月間約 60件 <br>https://github.com/timescale/timescaledb/commits/master|
|国内サポート体制|現時点で国内での保守サポートサービスを行っている企業、団体はありません。|
|その他|PostgreSQL の extension としてパッケージされています。基本的な機能は PostgreSQL準拠と考えて良いです。|

# 機能情報

|項目&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|内容|
|-----|--------|
|対応プログラム言語|C/C++、.Net、Java、Perl、JavaScript、PHP、Python、R、Ruby、Tcl|
|クエリ言語|PostgreSQLのSQLをサポートします。<br>TimescaleDB API がストアドファンクションが提供されており、時系列データに関してはこのファンクションを利用します。<br>参照 : [Do you really support “all of SQL”?](https://docs.timescale.com/latest/faq#sql-support), [TimescaleDB API Reference](https://docs.timescale.com/latest/api)|
|データ圧縮|1.5.0 からデータ圧縮機能が追加されました。91～96%の圧縮が可能です。timestamp と integer はDelta-Delta符号化とランレングス符号化圧縮、floatは Gorilla compression 、いくつかのデータタイプは辞書ベース圧縮、その他はLZベース技術が組み込まれています。ベースバージョンとして、PostgreSQL10以上のバージョンが必要です。 <br>参照 : [TimeScaleDB 1.5.0 リリースノート](https://github.com/timescale/timescaledb/releases/tag/1.5.0)、[Building columnar compression in a row-oriented database](https://blog.timescale.com/blog/building-columnar-compression-in-a-row-oriented-database/)|
|データ自動集計|Continuous Aggregates機能でデータ自動集計を実現します。<br>参照 : [Continuous Aggregates](https://docs.timescale.com/latest/using-timescaledb/continuous-aggregates)|
|期限解放機能|drop_chunks関数でチャンクレベルでhypertableから古いデータを削除することが可能。Enterprise版では、add_drop_chunks_policy関数で、自動データ・リテンションを設定することが可能です。<br>参照 : [Data Retention](https://docs.timescale.com/latest/using-timescaledb/data-retention)|
|時系列分析関数|PostgreSQLのSQL関数に加えて、first、histogram、interpolate、last、locf、time_bucket、time_bucket_gapfillが使用可能です。Advanced Analytic Queriesとして、Median/Percentile、Cumulative Sum、Moving Average、Increase、Rate、Deltaが使用可能です。<br>参照 : [TimescaleDB API Reference : Analytics]( https://docs.timescale.com/latest/api#analytics), [Reading data](https://docs.timescale.com/latest/using-timescaledb/reading-data)|
|インデックス|PostgreSQLインデックスをサポートします。TimescaleDBは、hypertableが作成される場合、TimescaleDBは自動的に時間インデックスを作成します。<br>なお、PostgreSQLはB-tree、hash、GiST、SP-GiST、GIN、BRINのインデックスが使用可能です(デフォルトはB-tree)。 <br>参照 : [Indexing Data](https://docs.timescale.com/v1.3/using-timescaledb/schema-management#indexing)|
|トランザクション|PostgreSQLトランザクションをサポートします。アイソレーション・レベルはRead uncommitted、Read committed、Repeatable read、Serializableがあります。デフォルトは Read Committed。これはMVCCで実装されています。|
|ストアドプロシジャ|PostgreSQLストアドプロシージャ、ストアドファンクションをサポートします。|
|トリガー|PostgreSQLトリガーをサポートします。TimescaleDBは、hypertableに対して DBトリガーのCREATE、ALTER、DROPが可能です。<br>参照 : [Creating Triggers](https://docs.timescale.com/v1.3/using-timescaledb/schema-management#triggers)|
|dockerコンテナ|dockerhub で TimeScaleDB の Docker Container イメージが公開されています。<br>https://hub.docker.com/r/timescale/timescaledb/|
|性能拡張|スケールアウト・クラスタリングについては現在、開発中で導入する予定です。自動分配機能は既にシングルノードで利用可能です。<br>参照 : [Is there a clustered version and how can I try it?](https://docs.timescale.com/v1.3/faq#clustered)|
|高可用性|TimescaleDBは、PostgreSQLストリーミング・レプリケーションをサポートする。ロジカル・レプリケーションはサポートしません。<br>参照 : [Replication](https://docs.timescale.com/v1.3/tutorials/replication)|
|運用|TimescaleDBのバックアップは PostgreSQL バックアップ/リストア機能(pg_basebackup, pg_dump, pg_restore)を利用します。オフラインバックアップはDBを停止して、ファイルシステムバックアップを実施します。<br>参照 : [Backup & Restore](https://docs.timescale.com/v1.3/using-timescaledb/backup)|
|出来ないこと|組込み機器などメモリリソースが制限されているシステムには適していません。|

# セキュリティ

|項目&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)

# まとめ
PostgreSQLをベースとしていることで、時系列以外の機能、ツールが豊富です。時系列機能もバランス良く実装されていると考えます。また、データ圧縮機能がないことが、速度性能にどのように影響するのか、気になるポイントです。

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

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