先從查詢需求切分,不要從儲存產品開始
IoT 平台常同時承受兩種方向相反的需求:設備資料持續寫入,而使用者又要查詢即時狀態、近期趨勢與多年歷史。若所有原始遙測都留在同一套資料庫,初期最簡單,但隨著資料累積,索引、備份、壓縮、資料清理與節點擴充會互相牽制。真正要設計的不是一個容量很大的資料庫,而是一條能管理資料生命週期的管線。
我們通常先盤點查詢,而不是先選時序資料庫或物件儲存。維運看板可能要求低延遲的近期資料;異常調查需要逐筆事件與品質旗標;管理報表多半只需要小時、日或月彙總;模型訓練則偏好可批次掃描、欄位穩定的長期資料。這些負載對延遲、粒度、成本與一致性的要求不同,不應被迫使用同一條查詢路徑。
熱層與冷層的邊界由服務目標決定
熱層適合保存近期、常查且需要快速回應的資料,通常採用時序資料庫、分析型資料庫,或具分區能力的關聯式資料庫。冷層則保存較久、查詢頻率較低,但仍須保留的歷史資料,常以 Parquet 等欄式格式存放於物件儲存,再由查詢引擎、批次工作或資料湖平台讀取。冷層不是備份;它仍是正式資料服務的一部分,必須具備目錄、結構定義、權限與可驗證的讀取流程。
- 查詢時間範圍:日常畫面通常會看多早以前的資料?異常調查最常回溯到哪個期間?
- 回應時間:哪些操作必須互動式完成,哪些可以接受非同步查詢或產出下載檔?
- 資料粒度:長期需求要逐筆原始值,還是平均、最大、最小、計數與品質狀態即可?
- 補送行為:設備離線後補傳的資料,是否可能落入已封存的時間分區?
- 法規與治理:保存、刪除、匿名化及稽核要求是否會因設備、租戶或資料類型而不同?
熱層保存期限不應只依磁碟價格決定,而要涵蓋常用互動查詢、事件處理重跑及設備延遲補送的合理窗口。冷層則應同時保存不可變的原始事件與經治理的彙總資料。原始事件提供追查與重新運算能力;彙總資料降低長期報表的掃描成本。兩者角色不同,不能只留下彙總後就假設未來不會需要原始值。
讓寫入、封存與跨層查詢各自可控
資料進入平台時,先保留裝置時間、平台接收時間、裝置識別、資料來源、結構版本與品質旗標。裝置時間用於業務分析,接收時間則協助判斷延遲與補送。寫入熱層後,封存工作依事件時間建立冷層分區,完成壓縮與檔案合併,再寫入目錄或清單。只有在筆數、時間範圍、雜湊或其他完整性檢查通過後,才能刪除熱層中的對應資料。
冷層檔案應避免過小,也不要建立過度細碎的目錄。實務上通常以日期搭配租戶、站點或資料類型分區,但分區欄位必須符合主要查詢條件。裝置識別若基數很高,直接以每台裝置建立目錄往往造成大量小檔與目錄壓力。較穩健的方式是以較粗的時間與業務維度分區,檔案內再利用排序、統計資訊或索引縮小掃描範圍。
對應用程式而言,最好提供單一歷史查詢介面,由查詢路由器判斷範圍。完全位於熱層的請求直接查熱資料;完全位於冷層的請求交給冷查詢引擎;跨越邊界時則拆成兩段並合併結果。合併時必須以穩定事件鍵去重,處理邊界重疊、晚到資料、排序與分頁。若冷查詢可能耗時,介面應回傳工作識別並支援狀態查詢與取消,而不是讓 HTTP 連線長時間等待。
把封存可靠度當成正式服務指標
熱冷分層最危險的失敗不是查詢稍慢,而是系統以為資料已封存,實際上冷層檔案缺漏或無法讀取。因此,封存流程必須可重跑且具冪等性,並監控待封存延遲、失敗分區、檔案大小、結構不相容、熱冷筆數差異與冷查詢錯誤。結構演進也要明確:新增欄位通常可向後相容,型別改變、單位轉換與欄位改名則需要版本化及讀取端轉換。
- 定期抽樣比對熱層、冷層與彙總結果,確認邊界資料沒有遺失或重複。
- 先驗證冷層可查、權限正確且目錄已更新,再執行熱層資料淘汰。
- 演練從冷層重建熱資料、重算彙總與回放事件,不把首次復原留到事故發生時。
- 分別觀察寫入成本、熱查詢延遲、冷掃描量與封存積壓,避免只看總儲存容量。
- 將租戶隔離、加密金鑰、刪除政策與稽核紀錄延伸到冷層及其衍生檔案。
一套可長期運作的設計,通常會把資料接收、熱查詢、不可變封存、彙總產生與跨層查詢拆成清楚的責任邊界。產品選型可以更換,但事件識別、時間語意、資料契約、完整性驗證與復原流程必須先定義。若系統還要整合 ERP、CRM、LINE 通知或雲端分析服務,整合團隊的價值也正在於把這些邊界與責任落實,而不只是增加另一套儲存元件。