# 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刪除備份過的數據

由上面敘述可知,
- 當數據在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`