IoT(Internet of Things) システムでは、各種センサーから、秒以下の周期で取得された、大量の時系列データを取り扱います。このようなデータを保持するシステムとして、時系列データベースは求められています。そこで、時系列データベースの TimescaleDB について、まとめました。
動作環境やライセンスなど基本情報から、対応プログラム言語、可用性、拡張性など機能情報やセキュリティなど掘り下げて、以下のようにまとめました。
TimescaleDB
TimescaleDB は、時系列データの高速格納と複雑なクエリのために最適化された PostgreSQL をベースとした時系列データベースです。
あらかじめ時系列データベースに保存されたデータに従来の RDBMS のように SQL を使うことが可能です。TimescaleDB は時系列データのために、NoSQL と RDBMS の両方の良さを実現しています。
参照 : TimescaleDB Overview
基本情報
項目 | 内容 |
---|---|
URL | https://www.timescale.com/ |
データモデル | TimescaleDBの機能を適用したテーブルを「HyperTable」と呼び、これが親テーブルとなって、専用スキーマに「Chunk」と呼ばれる日時間隔別の子テーブルが作成されます。内部的にはPostgreSQLのパーティショニングが使われています。 参照 : Data Model |
動作環境 |
CPU: x86系、IA64、PowerPC系、S/390系、Sparc系、ARM、MIPS、VAX メモリ: 512MB以上(要 Shared Bufferの4倍の物理メモリ) ストレージ: 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 参照 : Installation |
実装言語 | C言語 |
ライセンス | OSS : Apache License version 2.0 ただし、TSL library は Timescale License (TSL) Community : TSL Enterprise : 製品ライセンス Cloud : サブスクリプション・ライセンス 参照 : LICENSE, Product |
主なバージョン |
1.5.0 (2019-10-31) : データ圧縮機能の追加、テーブルスペース間のチャンク移行のサポート、ChankAppendノードへのパラレルクエリ調整のサポート 1.4.0 (2019-06-18) : hypertableで連続集約機能を複数利用可能とした。continuous aggregates 1.3.0 (2019-05-06) : 連続集約機能の追加 (PostgreSQLのマテリアライズド・ビューに似た構造で手動のリフレッシュを必要としません)。 1.2.0 (2019-01-29) : 新しい時系列データ解析関数、先進的なデータライフサイクル管理機能、性能改善、Postgres 11のサポート。 1.1.0 (2018-12-13) : first()とlast()の最適化(インデックスを使用したクエリ)。 |
開発元 | Timescale, Inc. |
開発体制 | Timescaleを中心にContributorは37名 Contributorは Contributor License Agreement を締結する必要がある。 |
活動状況 | GitHub で Issues 月間約 20件、ソースコード・コミット月間約 60件 https://github.com/timescale/timescaledb/commits/master |
国内サポート体制 | 現時点で国内での保守サポートサービスを行っている企業、団体はありません。 |
その他 | PostgreSQL の extension としてパッケージされています。基本的な機能は PostgreSQL準拠と考えて良いです。 |
機能情報
項目 | 内容 |
---|---|
対応プログラム言語 | C/C++、.Net、Java、Perl、JavaScript、PHP、Python、R、Ruby、Tcl |
クエリ言語 | PostgreSQLのSQLをサポートします。 TimescaleDB API がストアドファンクションが提供されており、時系列データに関してはこのファンクションを利用します。 参照 : Do you really support “all of SQL”?, TimescaleDB API Reference |
データ圧縮 | 1.5.0 からデータ圧縮機能が追加されました。91~96%の圧縮が可能です。timestamp と integer はDelta-Delta符号化とランレングス符号化圧縮、floatは Gorilla compression 、いくつかのデータタイプは辞書ベース圧縮、その他はLZベース技術が組み込まれています。ベースバージョンとして、PostgreSQL10以上のバージョンが必要です。 参照 : TimeScaleDB 1.5.0 リリースノート、Building columnar compression in a row-oriented database |
データ自動集計 | Continuous Aggregates機能でデータ自動集計を実現します。 参照 : Continuous Aggregates |
期限解放機能 | drop_chunks関数でチャンクレベルでhypertableから古いデータを削除することが可能。Enterprise版では、add_drop_chunks_policy関数で、自動データ・リテンションを設定することが可能です。 参照 : 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が使用可能です。 参照 : TimescaleDB API Reference : Analytics, Reading data |
インデックス | PostgreSQLインデックスをサポートします。TimescaleDBは、hypertableが作成される場合、TimescaleDBは自動的に時間インデックスを作成します。 なお、PostgreSQLはB-tree、hash、GiST、SP-GiST、GIN、BRINのインデックスが使用可能です(デフォルトはB-tree)。 参照 : Indexing Data |
トランザクション | PostgreSQLトランザクションをサポートします。アイソレーション・レベルはRead uncommitted、Read committed、Repeatable read、Serializableがあります。デフォルトは Read Committed。これはMVCCで実装されています。 |
ストアドプロシジャ | PostgreSQLストアドプロシージャ、ストアドファンクションをサポートします。 |
トリガー | PostgreSQLトリガーをサポートします。TimescaleDBは、hypertableに対して DBトリガーのCREATE、ALTER、DROPが可能です。 参照 : Creating Triggers |
dockerコンテナ | dockerhub で TimeScaleDB の Docker Container イメージが公開されています。 https://hub.docker.com/r/timescale/timescaledb/ |
性能拡張 | スケールアウト・クラスタリングについては現在、開発中で導入する予定です。自動分配機能は既にシングルノードで利用可能です。 参照 : Is there a clustered version and how can I try it? |
高可用性 | TimescaleDBは、PostgreSQLストリーミング・レプリケーションをサポートする。ロジカル・レプリケーションはサポートしません。 参照 : Replication |
運用 | TimescaleDBのバックアップは PostgreSQL バックアップ/リストア機能(pg_basebackup, pg_dump, pg_restore)を利用します。オフラインバックアップはDBを停止して、ファイルシステムバックアップを実施します。 参照 : Backup & Restore |
出来ないこと | 組込み機器などメモリリソースが制限されているシステムには適していません。 |
セキュリティ
項目 | 内容 |
---|---|
通信暗号化 | SSLでクライアントとDBサーバ間の通信を暗号化します。 |
DB格納領域の暗号化 | 透過的暗号化でDB格納領域を暗号化することが可能です。 |
認証機能 | 証明書、trust/reject、scram-sha-256、md5、ident/peer、LDAPなど、さまざまなクライアント認証方法が利用可能です。 |
権限管理 | DBオブジェクトに操作権限をロールまたはユーザに付与することで権限管理ができます。 |
DB監査 | 監査ログ機能有(pgaudit) |
まとめ
PostgreSQLをベースとしていることで、時系列以外の機能、ツールが豊富です。時系列機能もバランス良く実装されていると考えます。また、データ圧縮機能がないことが、速度性能にどのように影響するのか、気になるポイントです。
掲載内容は、(株)東芝 デジタルイノベーションテクノロジーセンター及びソフトウェア技術センターの見解です。コメント等は広くご意見を頂ければ幸いです。
また、記述について誤りがあったり、気になることがあれば、編集リクエストやコメントでフィードバックしていただけると助かります。