InfluxDB學習(四):InfluxDB數據庫retention、shard、shardgroup


一. 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM