Composer での ThingWorx モデルの定義 > データストレージ > 値ストリーム > QueryDataTableEntries サービスと QueryStreamEntriesWithData サービスの使用
QueryDataTableEntries サービスと QueryStreamEntriesWithData サービスの使用
QueryDataTableEntries サービスはデータテーブルをクエリーし、リクエストパラメータが一致するレコードから成るインフォテーブルを返します。最適化されていないデータクエリーを ThingWorx で使用すると、パフォーマンスの問題が発生したり、システムが停止したりすることがあります。
このサービスの働きについて理解するため、以下のシナリオの例を参照してください。
サンプルのシナリオ
シナリオ 1: クエリーフィルタは常に ThingWorx Platform 上のメモリ内で適用され、SQL 文によって使用されない
var query = {
"filters": {
"type": "EQ",
"fieldName": "firstname",
"value": "Doe"
}
};
var result = Things["myDataTable"].QueryDataTableEntries({query: query})
上記のコードはデータベースからデータテーブル全体をフェッチしています。その後で ThingWorx Platform 上のメモリ内でフィルタが適用されます。
このシナリオは QueryDataTableEntriesQueryStreamDataQueryStreamEntriesQueryStreamEntriesWithData に適用されます。
代替シナリオ: FindDataTableEntries および QueryDataTableEntries の値パラメータを使用したデータテーブル
シナリオ 2 : QueryDataTableEntries サービスの maxItems パラメータは ThingWorx Platform 上のメモリ内で適用され、SQL 文によって使用されない
var result = Things["myDataTable"].QueryDataTableEntries({maxItems: 1 });
上記のコードはデータベースからデータテーブル全体をフェッチしています。その後で ThingWorx Platform 上のメモリ内で制限が適用されます。
ストリームクエリー API では動作が異なります。詳細については、以下のシナリオ 3 を参照してください。
シナリオ 3 : ストリームクエリーサービスの maxItems は、クエリーフィルタと組み合わせて使用した場合、ThingWorx Platform 上のメモリ内で適用される (データテーブルでは常にメモリ内。シナリオ 2 を参照)
var query = {...};
var result = Things["myStream"].QueryStreamEntriesWithData({maxItems: 1, query: query});)
上記のコードはデータベースからストリーム全体をフェッチしています。
var result = Things["myStream"].QueryStreamEntriesWithData({maxItems: 1, source: "myThing"});
クエリーパラメータが使用されていないので、上記のコードはデータベースからレコードを 1 つだけフェッチしています。
これは役に立ちましたか?