Composer での ThingWorx モデルの定義 > データストレージ > 永続化プロバイダ > 永続化プロバイダとしての InfluxDB の使用
永続化プロバイダとしての InfluxDB の使用
概要
システムで大量の時系列データが処理され、データの永続化/読み込みに関して実装が値ストリームまたはストリームに大きく依存している場合、ThingWorx で 永続化プロバイダとして InfluxDB を使用することをお勧めします。InfluxDB は、時系列データ専用に記述された高性能なデータストアです。同データの高スループットでの取得、圧縮、リアルタイムのクエリーを可能にします。InfluxDB は、DevOps の監視、ログデータ、アプリケーション判定基準、IoT センサーデータ、リアルタイムアナリティクスなど、大量のタイムスタンプ付きデータを処理するあらゆるユースケースでデータストアとして使用されます。データ保持ポリシー (RP) などの機能も提供されます。InfluxDB Enterprise は、時系列データのニーズを満たす高可用性および高スケーラブルなクラスタリングソリューションを提供します。
* 
InfluxDB を使用するには ThingWorx 8.4.0 以降が必要です。
InfluxPersistenceProviderPackage は PostgreSQL または MSSQL のデフォルトのインストールの一部として提供されています。
* 
InfluxDB データプロバイダは、現在のところ、値ストリームとストリームのみをサポートしています。データテーブル、Wiki、ブログはサポートされていません。
* 
InfluxDB データプロバイダは、現在のところ、エクスポート機能をサポートしていません。
* 
InfluxDB はプロパティプロバイダとしてはサポートされていません。
* 
現在のところ、InfluxDB データプロバイダは "autogen" という名前の保持ポリシーのみをサポートしています。データプロバイダで使用するデータベースを作成する際に、ポリシー名やその他のポリシー (レプリケーション係数など) を指定できます。
InfluxDB Enterprise と ThingWorx の開始にあたっての全体像
* 
上記の図には InfluxDB Enterprise が含まれています。InfluxDB オープンソースでもアーキテクチャの図は同じですが、1 つのノードでのみ機能します。
このドキュメンテーションでは、InfluxDB Enterprise の設定に関して以下の用語が使用されます。
ロードバランサー - InfluxDB Enterprise はロードバランサーとして機能しません。管理者がこれを設定する必要があります。
クラスタ - InfluxDB Enterprise のクラスタはメタノードとデータノードの 2 つのタイプのノードから成ります。
データノード - 生の時系列データがすべてここに格納されます。高可用性を確保するためには、レプリケーション係数を 2 以上にする必要があります。
メタノード - これらのノードは、状態を安定させるという単純なジョブを実行します。ここには、保持ポリシー、ユーザー、データベースなど、状態に関する基本的な情報だけが格納されています。高可用性環境では、少なくとも 3 つのメタノードが必要です。
HA の詳細については、 https://www.influxdata.com/blog/understanding-influxenterprise-what-is-a-cluster/ を参照してください。
InfluxDB Enterprise を使用する利点
ほかのデータベースで現在提供されているものより容量が大きくデータ処理が高速なデータストアを探している場合、InfluxDB Enterprise を利用することによって以下のような利点がもたらされます。
より高速なデータの取得
ランタイムデータ用に複数のデータリポジトリを持つことができます。たとえば、リレーショナルデータを PostgreSQL に保存したまま、InfluxDB を使用して大量のストリームデータと値ストリームデータを処理できます。ストリームまたは値ストリームを定義する際には、ThingWorx ではデフォルトのランタイムデータストアプロバイダを使用しますが、ユーザーが定義した永続化プロバイダを使用するように設定できます。
* 
ほかのデータプロバイダからデータをエクスポートして InfluxDB にインポートすることもできます。ThingWorx ではデータ抽象化が処理されます。
クラウドに適したアーキテクチャ (水平スケール、InfluxDB Enterprise のみ)
InfluxDB のインストールおよび設定
* 
Influx データベースをインストールするすべての人が、InfluxDB のすべてのセキュリティ関連ドキュメンテーションを読んで理解している必要があります。ユーザー名と強力なパスワードを含む安全なコンフィギュレーションを使用して InfluxDB をインストールして設定することを強くお勧めします。
* 
このプロセスは ThingWorx がインストールされていることを前提としています。 ThingWorx のインストールを参照してください。
1. InfluxDB をダウンロードしてインストールします。
* 
InfluxDB は Windows ではサポートされていません。以下の手順では UNIX OS を使用しています。
InfluxDB オープンソース (シングルノード): 参照先 https://docs.influxdata.com/influxdb/v1.7/introduction/installation/
ダウンロードリンク:
ダウンロードリンク - データノード:
ダウンロードリンク - メタノード:
2. InfluxDB 内にデータベースを作成します。InfluxDB 内にデータベースを作成するには、thingworxInfluxDBSetup.sh スクリプトを取得して実行します。
* 
thingworxInfluxDBSetup.sh スクリプトは、PTC サポートポータルから入手可能なソフトウェアダウンロードパッケージの install フォルダに含まれています。
デフォルトの保持ポリシーでデータベースを作成するコマンドの例を以下に示します。
CREATE DATABASE thingworx with DURATION 365d REPLICATION 1 SHARD DURATION 30d NAME autogen
3. InfluxDB ユーザーを作成します。ユーザーを作成するコマンドの例を以下に示します。
CREATE USER twadmin WITH PASSWORD 'password' WITH ALL PRIVILEGES
4. ThingWorx Composer で、新しい永続化プロバイダを作成します。
5. 「永続化プロバイダパッケージ」フィールドで、 InfluxPersistenceProviderPackage を選択します。
6. 「保存」をクリックします。
7. 「コンフィギュレーション」タブをクリックし、必要に応じて接続情報を設定して保存します。以下のテーブルに示すコンフィギュレーションオプションを参考にしてください。
(InfluxDB 永続化プロバイダパッケージを使用して作成された) 永続化プロバイダインスタンスをデフォルトの 永続化プロバイダとして使用している場合、以下のストリームおよび値ストリームキューのコンフィギュレーション設定を編集できます。これらの編集はすべてのストリームと値ストリームに適用されます。特定のストリームまたは値ストリームについてこれらの設定を変更することはできません。
* 
値ストリームの永続化プロバイダを (ThingworxPersistenceProvider から InfluxPersistenceProviderPackage などに) 切り替える場合、値ストリームを実装するすべての Thing が RestartThing サービスを呼び出して、新しい永続化プロバイダに書き込まれたエントリを取得する必要があります。Thing が再起動されない場合でもエントリはデータベースに書き込まれますが、Thing が再起動されるまで取得されません。
接続情報
名前
説明
デフォルト値
接続 URL
接続の取得元となるデータベースの URL。
http://localhost:8086
データベーススキーマ
接続するときのスキーマ。
thingworx
ユーザー名
データベース接続を取得するときのユーザー名。
thingworx
パスワード
データベース接続を取得するときのパスワード。
該当なし
ストリーム処理の設定
名前
説明
ベースタイプ
デフォルト値
最大キューサイズ
キューに入るストリームエントリの最大数。指定された値に達すると、それ以降のエントリが却下されます。
Number
250000
ストリームバッファをフラッシュする前の最大待機時間 (ミリ秒)
ストリームバッファをフラッシュするまでシステムが待機するミリ秒数。
Number
2000
処理スレッド数
ストリームに割り当てられる処理スレッドの数。
* 
スレッド数が少ない方が InfluxDB のパフォーマンスは高くなります。これは少ない数のチャンネルからのデータを処理するために高度に最適化されています。
Number
5
ストリームバッファをフラッシュする前の最大アイテム数
ストリームバッファをフラッシュするまで累積されるアイテムの最大数。
Number
1000
プロセスブロックのストリーム書き込み最大数
1 つのブロックで処理されるストリーム書き込みの最大数。
Number
2500
バッファステータスのスキャン速度 (ミリ秒)
指定した間隔の値 (ミリ秒) でバッファステータスがチェックされます。
Number
5
値ストリーム処理の設定
名前
説明
ベースタイプ
デフォルト値
最大キューサイズ
キューに入る値ストリームエントリの最大数。指定された値に達すると、それ以降のエントリが却下されます。
Number
250000
値ストリームバッファをフラッシュする前の最大待機時間 (ミリ秒)
値ストリームバッファをフラッシュするまでシステムが待機するミリ秒数。
Number
2000
処理スレッド数
値ストリームに割り当てられる処理スレッドの数。
* 
スレッド数が少ない方が InfluxDB のパフォーマンスは高くなります。これは少ない数のチャンネルからのデータを処理するために高度に最適化されています。
Number
5
値バッファをフラッシュする前の最大アイテム数
値ストリームバッファをフラッシュするまで累積されるアイテムの最大数。
Number
500
プロセスブロックの値ストリーム書き込み最大数
1 つのブロックで処理されるアイテムの最大数。
Number
2500
バッファステータスのスキャン速度 (ミリ秒)
指定した間隔の値 (ミリ秒) でバッファステータスがチェックされます。
Number
5
8. 「一般情報」タブをクリックし、「アクティブ」チェックボックスをオンにします。
9. 「保存」をクリックします。
最良事例
系列の上限
系列は、InfluxDB にログインした Thing およびその関連する値ストリームの一意の組み合わせの総数です。InfluxDB は、10,000 や 100,000 などの少量の Thing や Thing プロパティに大きなデータボリュームを割り当てることによって優れたパフォーマンスを発揮します。InfluxDB では系列の総数がデフォルトで 100 万に制限されています。この上限を増やすことはできますが、系列数がこの上限を超えると InfluxDB のパフォーマンスは低下します。
多数の Thing やプロパティがある場合、データボリュームが最大のものを選択し、それらだけを InfluxDB に割り当てて PostgreSQL または MSSQL の負荷を軽減できます。
あるいは、系列を複数のサーバーに分ける場合、InfluxDB サーバーの各インスタンスを割り当てた、複数の InfluxDB データプロバイダのインスタンスを作成できます。
書き込みの上限
32 コア 60 GB メモリの仮想マシンでの書き込みの上限は 1 秒当り 100,000 回です。この上限を超えると ThingWorx で問題が発生し、データベースへの書き込みなどのリクエストやジョブを処理するリソースが不足する可能性があります。その時点で、InfluxDB はデータベースへの書き込みを続行しますが、ThingWorx は機能停止します。PostgreSQL ではこの問題はありません。これは、PostgreSQL がボトルネックとなり、ThingWorx は内部でタスクを処理するリソースが不足する段階まで達することがないためです。
SSL/セキュア接続
InfluxDB は SSL 接続と HTTPS 接続をサポートします。SSL 接続と HTTPS 接続を有効にすることで、ThingWorx と InfluxDB 間のネットワークがサポートされない場合のセキュリティを向上させることができます。署名に使用したプライベートキーが安全に保管されている場合、自己署名証明書で十分です。
プロパティのベースタイプに関する InfluxDB の既知の制限
値ストリームに記録された後でプロパティのベースタイプを変更することはできません。詳細については、 https://github.com/influxdata/influxdb/issues/3460 を参照してください。
プロパティのパージ
PurgeAllPropertyHistoryPurgeSelectedPropertyHistory、および PurgePropertyHistory サービスを使用して、InfluxDB からプロパティをパージできます。startDate および endDate パラメータを使用して、範囲を指定します。