27
20

More than 3 years have passed since last update.

TimescaleDBの調査

Last updated at Posted at 2019-11-29

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のセキュリティを極める

まとめ

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

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

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

27
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
20