TairTS是基於Redis Module開發的時序資料結構,提供低時延、高並發的記憶體讀寫訪問,及快速地過濾、彙總查詢功能,集儲存與計算為一體,在簡化了處理時序資料流程的同時,大幅度提高了效能。
TairTS簡介
相比RedisTimeSeries,TairTS提供了更豐富的功能:
通過Pkey(額外一層Hash結構)結構,輕鬆實現Pkey層級(多時間軸)彙總查詢。
例如您可以在foo(Pkey)中建立以各項指標名稱與裝置ID命名的Skey,例如temperature:1、pressure:1、distance:1等,可通過TairTS內建的EXTS.S.MRANGE命令輕鬆擷取裝置ID為1的自訂監控資訊,而使用RedisTimeSeries則需要在商務邏輯代碼中嵌入大量資料彙總運算才能實現該功能。
TairTS資料結構解析:
Pkey(一組時間軸):TairTS資料結構,可包含多個Skey。
Skey(一條時間軸):可包含多個固定容量的Chunk,每個Skey可設定不同的Label(標籤),可通過Label在海量資料中快速過濾目標Skey。
Chunk(資料區塊):可儲存多個DataPoint。
Chunk的容量支援自訂,最多包含256個DataPoint。
Chunk為最小的到期單元,即單個Chunk中所有Datapoint都到期後才會刪除該Chunk。
DataPoint(時序資料):包含一個時間戳記和一個value資料(double類型)。
支援降採樣、屬性過濾、分批查詢、多種數值函數等條件下的彙總操作,將批量查詢與彙總計算整合到單條命令中,減少網路互動,實現毫秒級響應。
支援對歷史時序資料的更新或累加。
支援時間軸層級的TTL設定,保證每條時間軸都可以按時間視窗自動滾動。
採用高效的Gorilla壓縮演算法與特定儲存,極大降低儲存成本。
典型情境
監控資料的儲存與計算
APM秒級監控
IoT(物聯網)資料分析與處理
限流風控
熱點訊息的緩衝
時間視窗函數
最佳實務
前提條件
注意事項
操作對象為Tair執行個體中的TairTS資料。
TairTS的優勢為即時、高並發的寫入與查詢效能,缺陷為儲存容量有限,請合理設定TTL,及時淘汰到期資料。
為節省記憶體空間,關於設定
CHUNK_SIZE
的建議如下:若Skey(時間軸)的平均資料點大於5,000個,設定
CHUNK_SIZE
為256(預設值)。若Skey(時間軸)的平均資料點小於5,000個,設定
CHUNK_SIZE
為平均資料點個數 / 20。例如某Skey的平均資料點為1,000,可以設定CHUNK_SIZE
為50。
Breaking Change公告:
2024年07月22日發布Tair記憶體型(相容Redis 6.0)24.7.0.0版本,該版本中新增了ts-auto-del-empty-skey-enable參數,預設為yes,表示當Skey中的所有資料點都到期時,會自動刪除Skey。但在Tair記憶體型(相容Redis 6.0)24.7.0.0之前的版本中,預設不會刪除資料點已到期的Skey。
在Tair記憶體型(相容Redis 6.0)執行個體使用TairTS前,建議將執行個體升級至24.7.0.0及以上版本,並確認、手動調整ts-auto-del-empty-skey-enable參數的策略,避免因預設行為的改變對業務產生影響。
命令列表
表 1. TairTS命令
類型 | 命令 | 文法 | 說明 |
基礎寫操作 |
| 建立一個新的Pkey(TairTS資料結構),若Pkey已存在則建立失敗。 | |
| 在指定的Pkey中建立一個Skey,若Pkey不存在則會自動建立,若Skey已經存在則建立失敗。 說明 您可以在建立Skey時設定其相關屬性,例如到期時間、是否開啟壓縮等。 | ||
| 修改指定Skey的中繼資料資訊,當前僅支援修改到期時間(DATA_ET)。 | ||
| 向Skey中插入一條Datapoint資料。若Pkey或Skey不存在則會自動建立,屬性(到期時間、是否開啟壓縮等)僅在Skey不存在並自動建立的情況下生效。 | ||
| 在指定Pkey的多個Skey分中別插入一條Datapoint資料。若Pkey或Skey不存在則會自動建立,屬性(到期時間、是否開啟壓縮等)僅在Skey不存在並自動建立的情況下生效。 | ||
| 向Skey中插入一條Datapoint資料,該命令中的value將與Skey中最近Datapoint的value值相加實現遞增,也可以指定該命令中的value為負數實現遞減。若Pkey或Skey不存在則會自動建立,預設初始值為0,屬性(到期時間、是否開啟壓縮等)僅在Skey不存在並自動建立的情況下生效。 | ||
| 在指定Pkey的多個Skey分別插入一條Datapoint資料,該命令中的value將分別與各個Skey中最近Datapoint的value值相加實現遞增,也可以指定該命令中的value為負數實現相減。若Pkey或Skey不存在則會自動建立,預設初始值為0,屬性(到期時間、是否開啟壓縮等)僅在Skey不存在並自動建立的情況下生效。 | ||
| 刪除指定Pkey中的單個Skey,並刪除目標Skey中所有的Datapoint資料。 | ||
基礎讀操作 |
| 查詢指定Skey中最新的Datapoint資料。 | |
| 查詢指定Skey的中繼資料資訊,包含Datapoint數量、最近Datapoint的時間戳記與value值、Skey的標籤資訊等資訊。 | ||
| 在Pkey中自訂過濾條件(filter),查詢目標Skey。 | ||
彙總操作 |
| 在Skey中查詢指定時間內(包含指定時間點)的Datapoint資料。 | |
| 在Skey中自訂過濾條件(filter)與查詢時間點(包含指定時間點),查詢目標Datapoint資料。 | ||
| 在Pkey層級對符合過濾條件(filter)的Datapoint資料進行彙總,若您指定了Skey層級的彙總,則會優先進行Skey層級彙總(效果與EXTS.S.MRANGE命令相同),再從Pkey層級對第一次彙總結果進行二次彙總。 | ||
並發寫操作 |
| 修改指定Skey中Datapoint資料的value值。若Pkey或Skey不存在則會自動建立,屬性(到期時間、是否開啟壓縮等)僅在Skey不存在並自動建立的情況下生效。 | |
| 批量修改多個指定Skey中Datapoint資料的value值。若Pkey或Skey不存在則會自動建立,屬性(到期時間、是否開啟壓縮等)僅在Skey不存在並自動建立的情況下生效。 | ||
| 該命令中的value值會與指定Skey中Datapoint資料的value相加實現遞增,也可以指定該命令中的value為負數實現遞減。若Pkey或Skey不存在則會自動建立,預設初始值為0,屬性(到期時間、是否開啟壓縮等)僅在Skey不存在並自動建立的情況下生效。 | ||
| 批量修改多個指定Skey中Datapoint資料的value值,該命令中的value值會與指定Skey中Datapoint資料的value相加實現遞增,也可以指定該命令中的value為負數實現遞減。若Pkey或Skey不存在則會自動建立,屬性(到期時間、是否開啟壓縮等)僅在Skey不存在並自動建立的情況下生效。 | ||
通用 |
| 使用原生Redis的DEL命令可以刪除一條或多條TairTS資料。 |
本文的命令文法定義如下:
大寫關鍵字
:命令關鍵字。斜體
:變數。[options]
:選擇性參數,不在括弧中的參數為必選。A|B
:該組參數互斥,請進行二選一或多選一。...
:前面的內容可重複。
EXTS.P.CREATE
類別 | 說明 |
文法 |
|
時間複雜度 | O(1) |
命令描述 | 建立一個新的Pkey(TairTS資料結構),若Pkey已存在則建立失敗。 |
選項 |
|
傳回值 |
|
樣本 | 命令樣本:
返回樣本:
|
EXTS.S.CREATE
類別 | 說明 |
文法 |
|
時間複雜度 | O(1) |
命令描述 | 在指定的Pkey中建立一個Skey,若Pkey不存在則會自動建立,若Skey已經存在則建立失敗。 說明 您可以在建立Skey時設定其相關屬性,例如到期時間、是否開啟壓縮等。 |
選項 |
|
傳回值 |
|
樣本 | 命令樣本:
返回樣本:
|
EXTS.S.ALTER
類別 | 說明 |
文法 |
|
時間複雜度 | O(1) |
命令描述 | 修改指定Skey的中繼資料資訊,當前僅支援修改到期時間(DATA_ET)。 |
選項 |
|
傳回值 |
|
樣本 | 命令樣本:
返回樣本:
|
EXTS.S.ADD
類別 | 說明 |
文法 |
|
時間複雜度 | O(1) |
命令描述 | 向Skey中插入一條Datapoint資料。若Pkey或Skey不存在則會自動建立,屬性(到期時間、是否開啟壓縮等)僅在Skey不存在並自動建立的情況下生效。 |
選項 |
|
傳回值 |
|
樣本 | 命令樣本:
返回樣本:
|
EXTS.S.MADD
類別 | 說明 |
文法 |
|
時間複雜度 | O(n),其中n為keynumber。 |
命令描述 | 在指定Pkey的多個Skey分中別插入一條Datapoint資料。若Pkey或Skey不存在則會自動建立,屬性(到期時間、是否開啟壓縮等)僅在Skey不存在並自動建立的情況下生效。 |
選項 |
|
傳回值 |
|
樣本 | 命令樣本:
返回樣本:
|
EXTS.S.INCRBY
類別 | 說明 |
文法 |
|
時間複雜度 | O(1) |
命令描述 | 向Skey中插入一條Datapoint資料,該命令中的value將與Skey中最近Datapoint的value值相加實現遞增,也可以指定該命令中的value為負數實現遞減。若Pkey或Skey不存在則會自動建立,預設初始值為0,屬性(到期時間、是否開啟壓縮等)僅在Skey不存在並自動建立的情況下生效。 |
選項 |
|
傳回值 |
|
樣本 | 提前執行 命令樣本:
返回樣本:
若此時執行
|
EXTS.S.MINCRBY
類別 | 說明 |
文法 |
|
時間複雜度 | O(n),其中n為keynumber。 |
命令描述 | 在指定Pkey的多個Skey分別插入一條Datapoint資料,該命令中的value將分別與各個Skey中最近Datapoint的value值相加實現遞增,也可以指定該命令中的value為負數實現相減。若Pkey或Skey不存在則會自動建立,預設初始值為0,屬性(到期時間、是否開啟壓縮等)僅在Skey不存在並自動建立的情況下生效。 |
選項 |
|
傳回值 |
|
樣本 | 命令樣本:
返回樣本:
|
EXTS.S.DEL
類別 | 說明 |
文法 |
|
時間複雜度 | O(1) |
命令描述 | 刪除指定Pkey中的單個Skey,並刪除目標Skey中所有的Datapoint資料。 |
選項 |
|
傳回值 |
|
樣本 | 命令樣本:
返回樣本:
|
EXTS.S.GET
類別 | 說明 |
文法 |
|
時間複雜度 | O(1) |
命令描述 | 查詢指定Skey中最新的Datapoint資料。 |
選項 |
|
傳回值 |
|
樣本 | 命令樣本:
返回樣本:
|
EXTS.S.INFO
類別 | 說明 |
文法 |
|
時間複雜度 | O(1) |
命令描述 | 查詢指定Skey的中繼資料資訊,包含Datapoint數量、最近Datapoint的時間戳記與value值、Skey的標籤資訊等資訊。 |
選項 |
|
傳回值 |
|
樣本 | 命令樣本:
返回樣本:
|
EXTS.S.QUERYINDEX
類別 | 說明 |
文法 |
|
時間複雜度 | O(n),其中n為過濾條件中的最大集合數。 |
命令描述 | 在Pkey中自訂過濾條件(filter),查詢目標Skey。 |
選項 |
|
傳回值 |
|
樣本 | 命令樣本:
返回樣本:
|
EXTS.S.RANGE
類別 | 說明 |
文法 |
|
時間複雜度 | O(n),其中n為目標Datapoint的資料區塊個數。 |
命令描述 | 在Skey中查詢指定時間內(包含指定時間點)的Datapoint資料。 |
選項 |
|
傳回值 |
|
樣本 | 命令樣本:
返回樣本:
|
EXTS.S.MRANGE
類別 | 說明 |
文法 |
|
時間複雜度 | O(n),其中n為目標Datapoint的資料區塊個數。 |
命令描述 | 在Skey中自訂過濾條件(filter)與查詢時間點(包含指定時間點),查詢目標Datapoint資料。 |
選項 |
|
傳回值 |
|
樣本 | 命令樣本:
返回樣本:
|
EXTS.P.RANGE
類別 | 說明 |
文法 |
|
時間複雜度 | O(n),其中n為目標Datapoint的資料區塊個數。 |
命令描述 | 在Pkey層級對符合過濾條件(filter)的Datapoint資料進行彙總,若您指定了Skey層級的彙總,則會優先進行Skey層級彙總(效果與EXTS.S.MRANGE命令相同),再從Pkey層級對第一次彙總結果進行二次彙總。 |
選項 |
|
傳回值 |
|
樣本 | 命令樣本:
返回樣本:
|
EXTS.S.RAW_MODIFY
類別 | 說明 |
文法 |
|
時間複雜度 | O(1) |
命令描述 | 修改指定Skey中Datapoint資料的value值。若Pkey或Skey不存在則會自動建立,屬性(到期時間、是否開啟壓縮等)僅在Skey不存在並自動建立的情況下生效。 |
選項 |
|
傳回值 |
|
樣本 | 命令樣本:
返回樣本:
|
EXTS.S.RAW_MMODIFY
類別 | 說明 |
文法 |
|
時間複雜度 | O(n),其中n為keynumber。 |
命令描述 | 批量修改多個指定Skey中Datapoint資料的value值。若Pkey或Skey不存在則會自動建立,屬性(到期時間、是否開啟壓縮等)僅在Skey不存在並自動建立的情況下生效。 |
選項 |
|
傳回值 |
|
樣本 | 命令樣本:
返回樣本:
|
EXTS.S.RAW_INCRBY
類別 | 說明 |
文法 |
|
時間複雜度 | O(1) |
命令描述 | 該命令中的value值會與指定Skey中Datapoint資料的value相加實現遞增,也可以指定該命令中的value為負數實現遞減。若Pkey或Skey不存在則會自動建立,預設初始值為0,屬性(到期時間、是否開啟壓縮等)僅在Skey不存在並自動建立的情況下生效。 |
選項 |
|
傳回值 |
|
樣本 | 提前執行 命令樣本:
返回樣本:
若此時執行
|
EXTS.S.RAW_MINCRBY
類別 | 說明 |
文法 |
|
時間複雜度 | O(n),其中n為keynumber。 |
命令描述 | 批量修改多個指定Skey中Datapoint資料的value值,該命令中的value值會與指定Skey中Datapoint資料的value相加實現遞增,也可以指定該命令中的value為負數實現遞減。若Pkey或Skey不存在則會自動建立,屬性(到期時間、是否開啟壓縮等)僅在Skey不存在並自動建立的情況下生效。 |
選項 |
|
傳回值 |
|
樣本 | 命令樣本:
返回樣本:
|
索引過濾文法
您可以根據Skey的標籤(LABELS)過濾目標Skey。過濾條件(filter)的文法如下:
構造filter時,支援如下所有命令及組合使用,但必須存在EQ、CONTAINS、LIST_MATCH邏輯中的任意一個。
filter命令 | 說明 | 邏輯 |
| 標籤L等於V。 | EQ(equals) |
| 標籤L不為NULL, 即目標Skey包含標籤L。 | CONTAINS |
| 標籤L為v1或v2等。 | LIST_TMATCH |
| 標籤L不等於V。 | NOEQ(equals) |
| 標籤L為NULL, 即目標Skey不包含標籤L。 | NOCONTAINS |
| 標籤L不為v1和v2等。 | LIST_NOTMATCH |
彙總功能文法
彙總操作會對採集間隔(timeBucket)範圍內的資料進行彙總,支援如下彙總類型:
MAX
:最大值MIN
:最小值AVG
:平均值SUM
:求和FIRST
:第一個值LAST
:最後一個值RANGE
:範圍(最大值 - 最小值)COUNT
:value數量STD.P
:總體方差STD.S
:樣本方差VAR.P
:總體標準差VAR.S
:樣本標準差