瞭解 ThingWorx 交易
自 ThingWorx 9.3.2 起,針對服務編寫引入了下列變更。
資料庫操作類別
在 ThingWorx Platform 中,資料庫操作分為以下三類:
資料寫入操作,例如始終予以批次處理的內容寫入。
在 ThingWorx 9.3.2 中更新以同步發行其交易的資料讀取操作。
擷取并保留交易直至完成頂層服務的模型操作。
慣用操作為模型操作而非資料庫操作,因為所有處理資料庫的動作並非同步執行,因此會立即使用連線。
模型操作的對象為系統實體。例如:
內容定義變更:新增、移除、變更基礎類型等。
組態變更。
資料操作為非同步執行的資料庫操作,為提高效率可能會對此類操作予以批次處理。例如:
更新內容值 (即使該值為持續值)
將項目新增至 DataTable、Stream 或 ValueStream。
使用立即交易的平台服務
本節列出了同步發行其交易的 ThingWorx Platform 服務。
DataTableThing
GetDataTableEntries
GetDataTableEntryByKey
GetDataTableEntryCount
FindDataTableEntries
QueryDataTableEntries
SearchDataTableEntries
使用「串流」物範本的物件
GetStreamEntryCount
QueryStreamData
QueryStreamEntries
QueryStreamEntriesWithData
GetStreamEntry
使用 ValueStream 或 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
透過延伸功能,將其內容記錄至 ValueStream 的物件可使用這些 API 查詢串流。
服務編寫最佳作法
此部份內容為您建議在某些情況下使資料庫保持連線的最佳作法,但只有在服務遵循一些一般指導原則時才可行。這些最佳作法包括:
在模型變更前執行查詢操作
將模型變更之後所做的長時間執行工作縮到最短
未連線時長時間執行
在針對執行模型操作擷取連線之後,除非服務終止,否則無法將其釋放。在模型操作之前執行查詢操作,允許針對查詢擷取連線,然後在完成其他工作時釋放。如果有長時間執行且對模型存在影響的工作,請先嘗試執行該工作,然後再使用連線。
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);
使用非同步服務
如果在變更模型後無法執行長時間執行的任務,使用非同步服務可以減輕連線競爭,因為它不會等待回應,就會繼續下一個指令。雖然其使用的處理資源並未減少,但可提高服務的回應速度。請注意,在某些情況下,非同步服務可能不可行,因為它們無法直接傳回值,但它們對於高效的資源使用很有幫助。
varthing = Things["SomeThing"];
thing.AddPropertyDefinition();// connection acquired
asyncDoHttpRequestAndUpdateProperty(property);// request handled in another thread
// connection released (before async call completes)
何謂模型操作?
本文件集所指的是模型操作,而不是資料庫操作,因為並非處理資料庫的所有動作都會同步執行,並因此立即使用連線。
相對於系統實體資料而言,模型操作會對系統實體本身產生影響。範例包括:
內容定義變更:新增、移除、變更基礎類型等
組態變更
一些資料庫操作會以非同步方式執行,而且可能會以群組方式排列以提高效率。其通常包含以下資料操作:
更新內容值 (即使該值為持續值)
將項目新增至 DataTable、Stream 或 ValueStream。
這是否有幫助?