---
# System prepended metadata

title: Data kept strategy / archive rules/ restore rules

---

# 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`