开发解决方案的最佳做法 > HA 应用程序的最佳做法 > 使用 QueryImplementingThings 服务
使用 QueryImplementingThings 服务
如果正在运行 ThingWorx 高可用性群集,则必须在群集中共享过去为内存中进程 (例如属性值、事物状态和连接状况) 的某些状态。因此,事物属性现已存储在内存中 Apache Ignite 缓存,这对于性能或属性引入并无显著影响。
为了最小化延迟对于查询的影响,我们作出了一些改进。相关服务业已更改,因此它们将仅返回驻留在关联事物形态或事物模板上的属性值。您仍可对驻留在实现事物上的属性进行筛选。但您必须使用新的 GetThingPropertyValues API 来返回有关实现事物的数据。
* 
从 ThingWorx 9.4.0 开始,新的布尔参数 isSortFirst 添加到 QueryImplementingThings 服务。isSortFirst 参数的默认值为 false,服务和以前一样正常工作。如果 isSortFirst 被设置为 true,则 QueryImplementingThings 服务将首先对结果集进行排序,然后应用限制。
* 
限制筛选器,并仅对事物形态或事物模板中定义的属性进行排序。避免筛选或排序驻留在实现事物上的属性。可考虑将属性移出事物,并将其置于已实现事物形态或事物模板上。
GetThingPropertyValues
GetThingPropertyValues 是一个新 API,可用于批量检索属性值,以限制填充返回数据集所需的缓存调用次数。输入为 thingRefrencedataShapeName,它们分别为包含事物名称和类型的信息表,和用于标识所需属性数据形状的字符串。GetThingPropertyValues 可返回 thingReference 输入中所标识的每个事物的属性值信息表。
例如,要使用此 API,可执行以下操作:
1. 针对事物形态或事物模板运行 QueryImplementingThingsQueryImplementingThingsWithData
为获得最佳性能,请使用 QueryImplementingThings,该服务会生成具有基本字段的事物名称。
2. QueryImplementingThings 中收集所有事物名称。
3. 创建包含所有不同事物的所有不同属性的数据形状。
4. 使用步骤 2 中的事物名称集合和步骤 3 中的数据形状名称调用 getThingPropertyValues
本示例的 JavaScript 为:
var result = ThingShapes["testThingShapeOneForQITService<>626037"].QueryImplementingThings({
maxItems: undefined /* NUMBER */,
nameMask: undefined /* STRING */,
query: undefined /* QUERY */,
tags: undefined /* TAGS */
});
var resultQIT = result;
var params = {
infoTableName : "InfoTable",
dataShapeName : "ThingRefDataShape"
};
// CreateInfoTableFromDataShape(infoTableName:STRING("InfoTable"), dataShapeName:STRING):INFOTABLE(ThingRefDataShape)
result = Resources["InfoTableFunctions"].CreateInfoTableFromDataShape(params);
var thingRef = result;
for(var x=0 ; x<resultQIT.length ; x++){
var thingName = resultQIT[x].name;
var newEntry = new Object();
newEntry.name = thingName; // STRING
newEntry.type = "Thing"; // STRING
thingRef.AddRow(newEntry);
}
// result: INFOTABLE dataShape: "RootEntityList"
result = Resources["EntityServices"].GetThingPropertyValues({
thingReferences: thingRef /* INFOTABLE */,
dataShapeName: "QITDataShape<>392587" /* DATASHAPENAME */
});
这对您有帮助吗?