ThingWorx でのランタイムデータのインデックシング
PostgreSQL、MSSQL、H2 など、すべてのリレーショナルデータベースにはテーブル内の任意のフィールドまたはフィールドの組み合わせにインデックスを作成する機能が備わっています。FindDataTableEntries サービスの使用時にはインデックシングが利用されます。これにより、データに対してクエリー操作やサーチ操作を実行したときのデータの取得速度が向上します。ただし、インデックシングでは取得されたデータの行ごとに DB エンジンが追加のデータ構造を維持する必要があるので、追加の記憶領域や、データ取得中に追加の書き込み操作が必要になります。ThingWorx はアプリケーションレイヤー内でデータシェイプおよびベースタイプを使用します。したがって、データの保管に使用されるフォーマットは、リレーショナルテーブルのデータタイプではなく、データシェイプおよびベースタイプに基づきます。これにより、ThingWorx は、データベーススキーマを変更することなく動的にデータ型を変更できるため、データを JSON またはテキスト BLOB として保存できます。ThingWorx で使用されるデフォルトのインデックシングスキームでは、上記の要素を考慮しながら書き込みと読み取りパフォーマンスのバランスがとられています。
永続 Thing プロパティデータ
データはデータベース内の property_vtq テーブルに保管されます。各プロパティはテーブル内の独自の行に保管されます。つまり、Thing プロパティは列ではなくテーブル行にマッピングされます。この構造により、このテーブルは履歴データを保管するには不適切になります。インデックスが作成されるフィールドは以下のとおりです。
id - ThingName、Thing
name - プロパティの名前
値ストリームに記録される Thing プロパティデータ
データはデータベース内の value_stream テーブルに保管されます。各プロパティはテーブル内のその独自の行に保管され、Thing プロパティは列ではなくテーブル行にマッピングされます。
インデックスが作成されるフィールドは以下のとおりです。
entity_id - 値ストリーム名
source_id - Thing 名
property_name - プロパティ名
time - エントリのタイムスタンプ
データテーブルのデータ
データはデータベース内の data_table テーブルに保管されます。すべてのフィールド値がテーブルの単一の行に保管され、その結果、関連するデータシェイプで定義されているフィールドは各エントリの単一の列に JSON 文字列としてマッピングされます。
{"DataShape_Field1": "aaa", "DataShape_Field2": 2}
以下のようないくつかのインデックスがあります。
entity_key - データテーブルに関連付けられているデータシェイプで定義されているプライマリキー。
entity_keyentity_id - データシェイプキー、データテーブル名。
field_values - JSON 文字列のインデックシング。
ストリームデータ
データはデータベース内の stream テーブルに保管されます。すべてのフィールド値がテーブル内の単一の行に保管されます。関連するデータシェイプで定義されているフィールドは、各エントリの単一の列に JSON 文字列としてマッピングされます。インデックスが作成されるフィールドは以下のとおりです。
entity_id - ストリーム名
source_id - Thing 名
source_type - ソースのエンティティタイプ (ユーザー、Thing など)
time - エントリのタイムスタンプ