一. retention policy(pr)
數據保留策略提供了一個簡單高效的方法用來清除InfluxDB數據庫中的過期數據,一旦數據超過過期時間,數據會自動從InfluxDB中清除,而過期數據清除的時間單位以shard group的duration為單位
Influx中每個新建的數據庫都會有一個對應的數據保留策略(retention policy),該策略用來管理該數據庫中的數據過期時間,如果沒有指定策略,那么該數據庫會有一個默認的策略,如下所示
> create database db01 > show retention policies on db01 name duration shardGroupDuration replicaN default ---- -------- ------------------ -------- ------- autogen 0s 168h0m0s 1 true
新建一個數據庫時,也會自動創建一個默認的策略“autogen”,duration表示該數據的過期時間,0s表示永不過期。
創建retention policy的語句如下:
CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> [SHARD DURATION <duration>] [DEFAULT]
該參數依次為
<retention_policy_name>:保留策略名稱
<database_name>:為哪個數據庫創建保留策略
<duration>:該保留策略對應的數據過期時間
<REPLICATION>:復制因子,開源的InfluxDB單機環境永遠為1
<SHARD DURATION>:分片組的默認時長
DEFAULT:是否為默認策略,如果是,就代替數據庫的默認策略“autogen”
例如,我們創建一個過期時間為24h的保留策略
> create retention policy store_24h on db01 duration 24h replication 1
此時db01數據庫除了一個默認的保留策略“autogen”外,還有一個我們新建的保留策略,這里需要注意的是,一個數據庫的保留策略可以有多個,但是只能有一個是默認的。
> show retention policies on db01 name duration shardGroupDuration replicaN default ---- -------- ------------------ -------- ------- autogen 0s 168h0m0s 1 true store_24h 24h0m0s 1h0m0s 1 false
修改一個數據庫的默認保留策略,語法格式為:
> ALTER RETENTION POLICY "what_is_time" ON "NOAA_water_database" DURATION 3w SHARD DURATION 2h DEFAULT
將剛才新建的保留策略設置為db01的默認策略
> alter retention policy "store_24h" on "db01" default > show retention policies on db01 name duration shardGroupDuration replicaN default ---- -------- ------------------ -------- ------- autogen 0s 168h0m0s 1 false store_24h 24h0m0s 1h0m0s 1 true
以后存入db01數據庫的數據僅僅保留一天,即24個小時。
二. shard
shard是InfluxDB存儲引擎的實現,負責數據的編碼存儲、讀寫服務等。將InfluxDB中時間序列化的數據按照時間的先后順序存入到shard中,每個shard中都負責InfluxDB中一部分的數據存儲工作,並以tsm文件的表現形式存儲在物理磁盤上,每個存放了數據的shard都屬於一個shard group。
三. shard group
shard group可以理解為存放shard的容器,所有的shard在邏輯上都屬於這個shard group,每個shard group中的shard都有一個對應的時間跨度和過期時間,每一個shard group都有一個默認的時間跨度,叫做shard group duration
Retention Policy’s DURATION | Shard Group Duration |
---|---|
< 2 days | 1 hour |
>= 2 days and <= 6 months | 1 day |
> 6 months | 7 days |
三. 三者之間的關系
在一個RP中,如果指定的保留時間為24小時,那么每個shard的duration為1小時,即每個shard的時間跨度為1小時,那么總共會有24個跨度為1小時的shard,在觸發數據的RP后,刪除最早時間跨度的shard。
例如,我們在mydb數據庫中指定保留策略為24小時
> show retention policies on mydb name duration shardGroupDuration replicaN default ---- -------- ------------------ -------- ------- autogen 0s 168h0m0s 1 false keep_24_hours 24h0m0s 1h0m0s 1 true
那么此時shard group中對應就會存在24個shard,每次到達過期時間時,刪除最早的shard,並生成一個新的shard
> show shard groups name: shard groups id database retention_policy start_time end_time expiry_time -- -------- ---------------- ---------- -------- ----------- 1 mydb keep_24_hours 2020-04-24T19:00:00Z 2020-04-24T20:00:00Z 2020-04-25T20:00:00Z 2 mydb keep_24_hours 2020-04-24T20:00:00Z 2020-04-24T21:00:00Z 2020-04-25T21:00:00Z 3 mydb keep_24_hours 2020-04-24T21:00:00Z 2020-04-24T22:00:00Z 2020-04-25T22:00:00Z 4 mydb keep_24_hours 2020-04-24T22:00:00Z 2020-04-24T23:00:00Z 2020-04-25T23:00:00Z 5 mydb keep_24_hours 2020-04-24T23:00:00Z 2020-04-25T00:00:00Z 2020-04-26T00:00:00Z 6 mydb keep_24_hours 2020-04-25T00:00:00Z 2020-04-25T01:00:00Z 2020-04-26T01:00:00Z 7 mydb keep_24_hours 2020-04-25T01:00:00Z 2020-04-25T02:00:00Z 2020-04-26T02:00:00Z 8 mydb keep_24_hours 2020-04-25T02:00:00Z 2020-04-25T03:00:00Z 2020-04-26T03:00:00Z 9 mydb keep_24_hours 2020-04-25T03:00:00Z 2020-04-25T04:00:00Z 2020-04-26T04:00:00Z 10 mydb keep_24_hours 2020-04-25T04:00:00Z 2020-04-25T05:00:00Z 2020-04-26T05:00:00Z 11 mydb keep_24_hours 2020-04-25T05:00:00Z 2020-04-25T06:00:00Z 2020-04-26T06:00:00Z 12 mydb keep_24_hours 2020-04-25T06:00:00Z 2020-04-25T07:00:00Z 2020-04-26T07:00:00Z 13 mydb keep_24_hours 2020-04-25T07:00:00Z 2020-04-25T08:00:00Z 2020-04-26T08:00:00Z 14 mydb keep_24_hours 2020-04-25T08:00:00Z 2020-04-25T09:00:00Z 2020-04-26T09:00:00Z 15 mydb keep_24_hours 2020-04-25T09:00:00Z 2020-04-25T10:00:00Z 2020-04-26T10:00:00Z 16 mydb keep_24_hours 2020-04-25T10:00:00Z 2020-04-25T11:00:00Z 2020-04-26T11:00:00Z 17 mydb keep_24_hours 2020-04-25T11:00:00Z 2020-04-25T12:00:00Z 2020-04-26T12:00:00Z 18 mydb keep_24_hours 2020-04-25T12:00:00Z 2020-04-25T13:00:00Z 2020-04-26T13:00:00Z 29 mydb keep_24_hours 2020-04-25T13:00:00Z 2020-04-25T14:00:00Z 2020-04-26T14:00:00Z 20 mydb keep_24_hours 2020-04-25T14:00:00Z 2020-04-25T15:00:00Z 2020-04-26T15:00:00Z 21 mydb keep_24_hours 2020-04-25T15:00:00Z 2020-04-25T16:00:00Z 2020-04-26T16:00:00Z 22 mydb keep_24_hours 2020-04-25T16:00:00Z 2020-04-25T17:00:00Z 2020-04-26T17:00:00Z 23 mydb keep_24_hours 2020-04-25T17:00:00Z 2020-04-25T18:00:00Z 2020-04-26T17:00:00Z 24 mydb keep_24_hours 2020-04-25T18:00:00Z 2020-04-25T19:00:00Z 2020-04-26T17:00:00Z