開發應用程式的最佳作法 > 為資產建模 > 在 ThingWorx 中儲存資料
在 ThingWorx 中儲存資料
ThingWorx 提供可用來儲存資料的實體與方法。您可將資料儲存在「資料表」、「物件內容」、「串流」、「值串流」及組態表中。
開發應用程式時,您需要考量 ThingWorx 處理資料儲存的方式。選擇正確的資料儲存非常重要,因為這會影響到專案結果、其可擴充性與可靠性,以及使用者體驗。
接下來一部份內容說明 ThingWorx 模型中的儲存選項:
資料表
適用於 100,000 列以下的資料。
適用於靜態資料集與靜態查詢表格。對於高度動態以及較大的資料集,請使用透過 Database 物範本連線的關聯式資料庫。
* 
針對複雜查詢與連接,請使用關聯式資料庫。
適用於索引鍵式查詢與儲存,以及根據主索引鍵輕鬆啟用更新與刪除。
例如:您可以儲存智慧型已連線販賣機的庫存相關資訊,這種情況下,庫存的每個位置都是一個主索引鍵。您也可以使用「資料表」來儲存適用於收割管理裝置之灌溉程式的相關資訊,在此情況下,每個灌溉程式都是包含主索引鍵的一列。
欲按列操作或查詢資料,請使用「資料表」。
處理「資料表」時,請使用索引。
* 
「資料表」不支援高速寫入,因為其並不具備例如「串流」與「值串流」這類的佇列機制。
物件內容
使用物件內容可將物件相關資料儲存在 ThingWorx 中。內容具有下列資料儲存選項:
唯讀 - 針對不應在執行時間變更的靜態值使用唯讀選項。不過如有需要,您可以變更預設值。
持續 - 如果您想要即使在 ThingWorx 伺服器重新啟動之後仍儲存內容值,而且如果內容的值可以在執行時間變更,請使用持續選項。
已記錄 - 針對其值連續更新的內容使用已記錄選項。這是可儲存在「值串流」中的時間序列資料。
* 
請勿使用明確內容來儲存歷史資料。請改用「串流」或「值串流」。
串流
用於記錄與您裝置的時間驅動流程事件或活動。
例如,建立串流以記錄有關您裝置活動的問題,或記錄您裝置從 ThingWorx 平台中斷連線及重新連線至該平台的時間。串流最適合高速寫入,它們具有可供配置的快取系統。
值串流
用於儲存從物件內容取得的時間序列資料。
若使用串流,會建立「資料表」。若使用「值串流」,可不必建立疏鬆填入的「資料表」。
在值串流中以物件為導向的資料存取方法具有內建的多租戶支援。
如果您使用 RDMS (PostgreSQL、MSSQL、H2),所有記錄 (即使是來自不同物件的不同值串流) 都會寫入至資料庫中的相同表格。
如果您使用 PostgreSQL,在 PostgreSQL 資料庫的 ValueStream 表中,每一列會只保留一個內容的記錄。這表示「值串流」會獨立追蹤每個內容的值變更。使用 QueryPropertyHistory 服務後,它會檢查「物件」中每個內容的資料流,並將所有最新更新 (每個更新的更新時間都不同) 收集到一個資料負載結果中。
下表提供有關「串流」與「值串流」間主要差異的資訊。可使用此資訊來決定要用於儲存應用程式中時間序列資料的實體類型:
串流
值串流
串流可以儲存任何類型的時間序列資料。
值串流可以儲存來自物件內容的時間序列資料。
值串流會繫結至物件內容。
您可以使用串流自己的服務,直接查詢串流中的資料。查詢結果是整列資料。
您無法直接查詢值串流中的資料。請改用對物件定義的服務,來查詢值串流中的資料。例如:QueryPropertyHistory
欲新增一列資料到串流,請使用 WritePropertiesToStream 服務。
欲新增資料到值串流,請針對內容選取「已記錄」核取方塊。
串流可以儲存前後關聯資料。例如,當觸發特定事件時,您可以新增其他內容的值。這有助於分析資料。
值串流無法儲存前後關聯資料。
何時使用「串流」或「值串流」?
儲存及擷取時間序列資料時,請使用「值串流」與「串流」。可根據您需要儲存的資料量,選擇正確的資料儲存選項。
若您只想要查詢一小段期間的資料,請使用「串流」。
可將物件分割成多個「值串流」,以改善索引效能。
組態表
用於建構可在 ThingWorx 平台安全升級的可自訂應用程式。
您可根據預先定義的資料形式在「混搭」實體上新增組態表。這樣可簡化建構可自訂延伸功能混搭的流程,同時依舊支援就地升級,這是因為在延伸功能升級期間會延用組態表值。
處理以資料為中心之建模的最佳作法
ThingWorx 中處理以資料為中心的建模時,請遵循下列一般最佳作法:
如果您的資料不會變更,或會在下次變更/載入資料時遭到覆寫,而且與某物件相關聯,請為該物件建立資料負載內容,並為其指派適當的資料形式。如此一來,您便可透過物件存取資料。您也可以使用組態表,或針對大量資料使用資料表。
請盡量使用資料快取。
例如,請實行以設定間隔重新整理的快取作為資料負載,而不要在每次 DataChange 事件時查詢資料庫。
請封存您不再需要的資料。
設計應用程式時,您必須決定經常使用的資料。您可將此資料儲存在應用程式資料庫中。請盡快將舊資料移至外部伺服器,例如 ThingWorx 聯合實例或資料庫伺服器。
請提供查詢方法的開始與結束日期參數,來限制查詢擷取的資料量。這會減少處理時間並改善效能。
對於大量資料擷取的情況 (超出 ThingWorx Platform 規模估算指南中概述的擷取率),請考慮建立連線至單獨資料庫實例的多個「持續提供者」。如此可確保資料移至資料庫中的不同表格。如果您新增多個資料庫,「持續供應商」還可以指向特定資料庫。在此情況下,您需要移轉資料。
請確保您的資料表少於 100,000 列。
查詢「資料表」與「串流」中的資料應該只需要幾秒鐘。如果這些資料表與串流的列數超過 100,000,查詢執行速度就會比較慢。
請務必計劃好要如何清除舊資料。清除資料很重要,因為這有助於提升應用程式的效能。