# Data kept strategy --- # 1. Introduction 在Data Archiving章節, 我們介紹了Data process strategy, 裡面提到EdgeHub在資料庫中保存了下列幾種不同類型的資料 - Realtime(RT) Data - RAW Data - Recording Rate - Hour - Day 在這篇文章中我們會介紹更詳細的資料保存規則與時機 # 2. Data kept strategy EdgeHub的數據服務包含 - Data Worker - 處理地端設備上傳到Message broker (RabbitMQ / Azure IoT Hub)的原始數據 - 保存即時數據(Realtime(RT) data) - 保存原始歷史數據 (RAW Data) - 通知Data Archiver做歷史數據運算 - 通知Data Restore過期數據(如果有的話), 以進行數據重算 - Data Archiver - 處理Parameter的歷史數據運算, 並保留不同時間精度的運算結果 - 保存Recording Rate data (Rate在parameter設定) - 保存Hour data - 保存Day data - Data Restore - 收到過期數據通知, 進行歷史數據重新運算 - 計算Recording Rata data - 計算Hour data - 計算Data data - Data Packer - 每天定期將MongoDB中時間較早的冷數據, 備份到Blob中 - 備份完畢, 通知Data Cleaner刪除備份後的數據 - 每天定期刪除Blob中超過保留上限的冷數據 - Data Cleaner - 接收到Data Packer的刪除命令, 去MongoDB刪除備份過的數據 ![](https://hackmd.io/_uploads/HyqN4kN-6.png) 由上面敘述可知, - 當數據在MongoDB保留一段時間後, 會被判定成為冷數據, 並且啟動備份機制, 將數據搬移至Blob - 當數據搬移完畢後會進行MongoDB的數據刪除 - 當數據在Blob中超過設定的最大保留日期後 (請參考Data Archiving章節), 會從blob中被移除 ### 2.1 Hot data kept in MongoDB 依據不同的數據類型, 下列是EdgeHub目前設定的熱數據保留時間(保留在MongoDB) - RAWData: 保留5天 - Recording Rate Data: 保留7天 - Hour Data: 保留45天 - Day Data: 保留45天 只要在上述時間內, 資料是會被保留在MongoDB collection中的 ### 2.2 Time to backup Hot data into blob 為了確保Hot data保留時間到了的同時, 資料已經完成備份至Blob, EdgeHub的Data Packer服務會提早開始進行數據備份, 下列是目前設定的備份時間 - RAWData: 大於3天 - Recording Rate Data: 大於5天 - Hour Data: 大於43天 - Day Data: 大於43天 #### 特別注意!:因為大於3天的RAWData資料就會被備份至Blob, 目前並無機制去修改Blob中的冷數據, 因此若設備需要執行斷點續傳(參考4. Restore rule的說明), 需要在3天內執行完畢 ### 2.3 Data kept days 當數據被搬移至Blob之後, 就成為冷數據, 直到使用者設定的資料保留日期到期時, 才會被刪除, 詳細的資料保留日期設定, 請參考Data archiving文件中的說明 ### 2.4 Example - 假設 A object的 days to keep object data設定為100天 - RAWData in MongoDB : - day 0 ~ day -5 - RAWData in blob: - day -4 ~ day -31 (day -4因為大於3天, 所以提早備份至blob) - Recording Rate data in MongoDB: - day 0 ~ day -7 - Recording Rate data in blob: - day -6 ~ day -100 (day -6因為大於5天, 所以提早備份至blob) - Hour / Day data in MongoDB: - day 0 ~ day -45 - Hour / Day data in blob: - day -44 ~ day -731 (day -44因為大於3天, 所以提早備份至blob) - 假設 B object的 days to keep object data設定為7天 - RAWData in MongoDB : - day 0 ~ day -5 - RAWData in blob: - day -4 ~ day -7 (day -4因為大於3天, 所以提早備份至blob) - Recording Rate data in MongoDB: - day 0 ~ day -7 - Recording Rate data in blob: - 無 - Hour / Day data in MongoDB: - day 0 ~ day -7 - Hour / Day data in blob: - 無 - 假設 C object的 days to keep object data設定為100天, 且該tenant有設定External blob - RAWData in MongoDB : - day 0 ~ day -5 - RAWData in blob: - day -4 ~ **day -100** (day -4因為大於3天, 所以提早備份至blob) - Recording Rate data in MongoDB: - day 0 ~ day -7 - Recording Rate data in blob: - day -6 ~ day -100 (day -6因為大於5天, 所以提早備份至blob) - Hour / Day data in MongoDB: - day 0 ~ day -45 - Hour / Day data in blob: - day -44 ~ day -731 (day -44因為大於3天, 所以提早備份至blob) --- ###### tags: `Edge365`