Transazioni ThingWorx
Con ThingWorx 9.3.2 sono state introdotte le seguenti modifiche per la creazione di servizi.
Categorie di operazioni di database
In ThingWorx Platform le operazioni di database sono classificate in tre categorie:
Operazioni di scrittura dati, ad esempio scritture di proprietà che vengono sempre eseguite in batch.
Operazioni di lettura dati che sono state aggiornate in ThingWorx 9.3.2 per il rilascio sincrono delle relative transazioni.
Operazioni di modello che acquisiscono una transazione e la tengono in attesa fino al termine del servizio di livello superiore.
Le operazioni di modello sono preferibili rispetto alle operazioni di database, perché non tutte le azioni che riguardano il database vengono eseguite in modo sincrono e usano quindi immediatamente una connessione.
Le operazioni di modello sono quelle che interessano le entità di sistema. Ad esempio:
Modifiche alla definizione delle proprietà: aggiunta, rimozione, modifica del tipo di base e così via.
Modifiche alla configurazione.
Le operazioni di dati sono operazioni di database eseguite in modo asincrono e potrebbero essere eseguite in batch per maggiore efficienza. Ad esempio:
Aggiornamento di un valore di proprietà, anche se persistente.
Aggiunta di una voce a DataTable, Stream o ValueStream.
Servizi di ThingWorx Platform che utilizzano transazioni sincrone
In questa sezione vengono elencati i servizi di ThingWorx Platform con rilascio sincrono della relativa transazione.
DataTableThing
GetDataTableEntries
GetDataTableEntryByKey
GetDataTableEntryCount
FindDataTableEntries
QueryDataTableEntries
SearchDataTableEntries
Oggetti che utilizzano il modello di oggetto Stream
GetStreamEntryCount
QueryStreamData
QueryStreamEntries
QueryStreamEntriesWithData
GetStreamEntry
Oggetti che utilizzano il modello di oggetto ValueStream o RemoteValueStream
Get<Type>StreamEntry
Integer, Long, Number, Boolean, Location, String, Vec2, Vec3, Vec4, ThingCode, InfoTable, Image, DateTime
Query<Type>StreamEntries
Integer, Long, Number, Boolean, Location, String, Vec2, Vec3, Vec4, ThingCode, InfoTable, Image, DateTime
QueryMultiPropertyStreamEntries
Di conseguenza, gli oggetti che registrano le proprietà in ValueStream possono interrogare gli stream utilizzando queste API.
Best practice per la creazione di servizi
In questa sezione vengono consigliate le best practice da adottare per garantire che in determinate circostanze le connessioni al database rimangano disponibili, a condizione che i servizi seguano alcune linee guida generali. Le best practice includono:
Esecuzione di operazioni di interrogazione prima che un modello venga modificato
Riduzione al minimo di un lavoro di lunga durata che viene eseguito dopo che un modello è stato modificato
Esecuzione di un lavoro di lunga durata quando non è in uso alcuna connessione
Quando viene recuperata una connessione per eseguire operazioni su un modello, non è possibile rilasciarla se non al termine del servizio. Eseguire le operazioni di interrogazione prima delle operazioni del modello permette di recuperare una connessione per l'interrogazione e di rilasciarla successivamente, durante il completamento di altri lavori. Se è presente un lavoro a esecuzione prolungata che influisce sul modello, provare a eseguirlo prima, quando la connessione non è in uso.
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);
Utilizzo dei servizi asincroni
Se non è possibile eseguire un task di lunga durata dopo che il modello è stato modificato, si possono utilizzare i servizi asincroni per semplificare il problema delle connessioni concorrenti perché non attende una risposta prima di passare al comando successivo. Sebbene non utilizzi un numero inferiore di risorse di elaborazione, consente al servizio di essere più dinamico. Si noti che in alcuni casi questa soluzione potrebbe non essere fattibile, in quanto i servizi asincroni non possono restituire direttamente un valore, tuttavia possono essere utili per un utilizzo efficiente delle risorse.
varthing = Things["SomeThing"];
thing.AddPropertyDefinition();// connection acquired
asyncDoHttpRequestAndUpdateProperty(property);// request handled in another thread
// connection released (before async call completes)
Quali sono le operazioni di modello?
La documentazione fa riferimento alle operazioni di modello anziché alle operazioni di database, perché non tutte le azioni che riguardano il database vengono eseguite in modo sincrono e usano quindi immediatamente una connessione.
Le operazioni di modello interessano le entità di sistema, anziché i rispettivi dati. Ad esempio:
Modifiche alla definizione delle proprietà: aggiunta, rimozione, modifica del tipo di base e così via
Modifiche alla configurazione
Alcune operazioni di database vengono eseguite in modo asincrono e potrebbero essere organizzate in gruppi per maggiore efficienza. Queste operazioni includono in genere le operazioni di dati.
Aggiornamento di un valore di proprietà, anche se persistente.
Aggiunta di una voce a DataTable, Stream o ValueStream.
È stato utile?