Descripción de las transacciones de ThingWorx
A partir de ThingWorx 9.3.2., se han introducido los siguientes cambios para la creación de servicios.
Categorías de operaciones de base de datos
En ThingWorx Platform, las operaciones de base de datos se clasifican en tres categorías:
Operaciones de escritura de datos, como escrituras de propiedades que siempre se realizan en lotes.
Operaciones de lectura de datos que se han actualizado en ThingWorx 9.3.2 para liberar sus transacciones de forma sincrónica.
Operaciones de modelo que adquieren una transacción y la mantienen hasta que finaliza el servicio de nivel superior.
Las operaciones de modelos se prefieren a las operaciones de base de datos porque no todas las acciones que se utilizan con base de datos se realizan de manera sincrónica y, por lo tanto, utilizan una conexión inmediatamente.
Las operaciones de modelo son aquellas que afectan a las entidades del sistema. Por ejemplo:
Cambios de definición de propiedades: adición, eliminación, cambio de tipo base, etc.
Cambios de configuración.
Las operaciones de datos son operaciones de base de datos realizadas de forma asíncrona y se ponen en lotes para mejorar la eficacia. Por ejemplo:
Actualización de un valor de propiedad, incluso si es persistente.
Adición de una entrada a una tabla de datos, un flujo o un flujo de valores.
Servicios de plataforma que utilizan transacciones diligentes
En esta sección se enumeran los servicios de ThingWorx Platform que liberan su transacción de forma diligente.
DataTableThing
GetDataTableEntries
GetDataTableEntryByKey
GetDataTableEntryCount
FindDataTableEntries
QueryDataTableEntries
SearchDataTableEntries
Cosas que utilizan la plantilla de cosa "Flujo"
GetStreamEntryCount
QueryStreamData
QueryStreamEntries
QueryStreamEntriesWithData
GetStreamEntry
Cosas que utilizan las plantillas de cosa ValueStream o RemoteValueStream
Get<Type>StreamEntry
Número entero, largo, número, booleano, ubicación, cadena, vec2, vec3, vec4, código de cosa, infotable, imagen, fecha y hora
Query<Type>StreamEntries
Número entero, largo, número, booleano, ubicación, cadena, vec2, vec3, vec4, código de cosa, infotable, imagen, fecha y hora
QueryMultiPropertyStreamEntries
Por extensión, las cosas que registran sus propiedades en un objeto ValueStream pueden consultar los flujos que utilizan estas API.
Prácticas recomendadas de creación de servicios
En esta sección se recomiendan las prácticas recomendadas para que las conexiones de base de datos sigan estando disponibles en determinadas circunstancias, pero solo si los servicios siguen algunas directrices generales. Entre las prácticas recomendadas se incluyen:
Realización de operaciones de consulta antes de hacer cambios en el modelo
Minimización del trabajo de ejecución prolongada después de hacer cambios en el modelo
Realización de trabajos de larga duración cuando no hay ninguna conexión en uso
Una vez que se recupere una conexión para realizar operaciones con el modelo, no se puede liberar hasta que el servicio finalice. Realizar operaciones de consulta antes de las operaciones de modelo permite recuperar una conexión para consultarla y liberarla posteriormente mientras se completan otros trabajos. Si hay un trabajo de larga ejecución que afecta al modelo, intente realizar ese trabajo primero antes de que se utilice la conexión.
varthing = Things["SomeThing"];
// Instead of
thing.AddPropertyDefinition();// connection acquired
varhistory = thing.QueryPropertyHistory();
vardata = makeSomeExternalCalls(history);// connection held here
varvalue = calculateValue(data);// and here
thing.SetPropertyValue(value);
// Do this
varhistory = thing.QueryPropertyHistory();// connection acquired & released
vardata = makeSomeExternalCalls(history);// no connection
varvalue = calculateValue(data);// nor here
thing.AddPropertyDefinition();// connection acquired
thing.SetPropertyValue(value);
Uso de servicios asíncronos
Si no es posible realizar una tarea de ejecución prolongada después de que se haya cambiado el modelo, se pueden utilizar servicios asíncronos para facilitar la competencia de conexión porque no espera una respuesta antes de pasar al siguiente comando. Aunque no se utilizan menos recursos de procesamiento, permite al servicio ser más dinámico. Se debe tener en cuenta que los servicios asíncronos pueden no ser viables en algunos casos, ya que no pueden devolver un valor directamente, pero pueden resultar útiles para el uso eficaz de los recursos.
varthing = Things["SomeThing"];
thing.AddPropertyDefinition();// connection acquired
asyncDoHttpRequestAndUpdateProperty(property);// request handled in another thread
// connection released (before async call completes)
¿Qué son las operaciones de modelo?
La documentación hace referencia a las operaciones de modelo en lugar de a las operaciones de base de datos, ya que no todas las acciones que se ocupan de la base de datos se realizan de forma sincrónica y utilizan inmediatamente una conexión.
Las operaciones de modelo afectan a las entidades del sistema, en lugar de a sus datos. Entre algunos ejemplos se incluyen los siguientes:
Cambios de definición de propiedades: adición, eliminación, cambio de tipo base, etc.
Cambios de configuración
Algunas operaciones de base de datos se realizan de forma asíncrona y se organizan en grupos para mejorar la eficacia. Normalmente, entre ellas se incluyen operaciones de datos:
Actualización de un valor de propiedad, incluso si es persistente.
Adición de una entrada a una tabla de datos, un flujo o un flujo de valores.
¿Fue esto útil?