時序數據庫 (TSDB) 是(shi)一(yi)種數據(ju)(ju)庫管理系統,用于存儲、處(chu)理和分(fen)析時間(jian)序(xu)列數據(ju)(ju)(以下簡稱時序(xu)數據(ju)(ju))。
時(shi)序(xu)(xu)數(shu)據是按時(shi)間維度順序(xu)(xu)記錄且(qie)索引的數(shu)據。像(xiang)智慧城市、物(wu)聯(lian)網(wang)(wang)、車聯(lian)網(wang)(wang)、工業互聯(lian)網(wang)(wang)等領域各種類型的設備和傳感器都會(hui)產(chan)生海量的時(shi)序(xu)(xu)數(shu)據,證券市場(chang)的行情數(shu)據也(ye)是時(shi)序(xu)(xu)數(shu)據,這些數(shu)據將占世(shi)界數(shu)據總量的 90% 以(yi)上(shang)。
雖(sui)然(ran)你也可(ke)以使(shi)用關系數(shu)(shu)(shu)據(ju)(ju)庫(ku)或 NoSQL 數(shu)(shu)(shu)據(ju)(ju)庫(ku)來(lai)處(chu)理時(shi)(shi)(shi)序(xu)數(shu)(shu)(shu)據(ju)(ju),但這類數(shu)(shu)(shu)據(ju)(ju)庫(ku)并沒(mei)有充分(fen)利(li)用時(shi)(shi)(shi)序(xu)數(shu)(shu)(shu)據(ju)(ju)的特點,性能提(ti)升極為有限,只能依(yi)靠集群技術,投入更多的計(ji)算資源(yuan)(yuan)和存儲資源(yuan)(yuan)來(lai)處(chu)理,系統(tong)的運(yun)營維護成本急劇上升。而專門構建的時(shi)(shi)(shi)序(xu)數(shu)(shu)(shu)據(ju)(ju)庫(ku)充分(fen)利(li)用了(le)時(shi)(shi)(shi)序(xu)數(shu)(shu)(shu)據(ju)(ju)庫(ku)的特點,大(da)幅提(ti)升了(le)數(shu)(shu)(shu)據(ju)(ju)的寫入和查詢速度(du),同(tong)時(shi)(shi)(shi)也大(da)幅提(ti)高了(le)數(shu)(shu)(shu)據(ju)(ju)壓縮率。此外,時(shi)(shi)(shi)序(xu)數(shu)(shu)(shu)據(ju)(ju)庫(ku)包含專有的時(shi)(shi)(shi)序(xu)數(shu)(shu)(shu)據(ju)(ju)分(fen)析功(gong)能和數(shu)(shu)(shu)據(ju)(ju)管(guan)理功(gong)能,使(shi)用戶(hu)可(ke)以很輕松(song)地開發(fa)應用程序(xu)。
時序數據的特點是什么?
- 時間戳:每個數據點都帶有時間戳,這個時間戳對于數據的計算和分析十分重要。
- 結構化:與來自網絡爬蟲、微博、微信的海量數據不同,聯網設備或監控系統生成的數據都是結構化的。這些數據都具有預定義的數據類型或固定長度,比如智能電表采集的電流、電壓就可以用 4 字節的標準的浮點數來表示。
- 流式:數據源以近似恒定速率生成數據,如音頻或視頻流。這些數據流彼此獨立。
- 流量平穩可預測:與電商平臺或社交媒體網站的數據不同,時序數據的流量在一段時間內是穩定的,并且可以根據數據源的數量和采樣周期來進行計算和預測。
- 不變性:時序數據一般都是 append-only,類似于日志數據,一般不容許而且也沒有修改的必要。很少有場景,需要對采集的原始數據進行修改。
時序數據處理的挑戰
時(shi)(shi)(shi)序(xu)數據通常用于比較當前數據與歷(li)史(shi)數據、檢測異常、生成實時(shi)(shi)(shi)警(jing)報以(yi)及預測未來趨勢。時(shi)(shi)(shi)序(xu)數據解決方案一般考慮以(yi)下問題:
- 時序數據量通常很大,因此在執行存儲、索引、查詢、分析等操作時變得更加困難。
- 時序數據需要實時計算和分析,以便于實時檢測異常并告警。 延遲可能會導致故障和業務影響。
- 通常需要關聯來自不同傳感器和其他源的數據,這使情況變得更復雜。
- 不管是原始數據查詢、還是聚合數據查詢,時序數據的查詢一般都會帶上查詢時間范圍,一方面是根據時間范圍計算聚合時間窗口,另一方面是為了更高效的檢索數據,提高查詢效率,避免大量無效數據的掃描。
- 數據在一段時間內的變化趨勢比單個數據點重要得多。例如,考慮到網絡不可靠性或傳感器讀數異常,我們可能會在一段時間內的某個平均值超過閾值時設置警報,而不是在單個數據點上這樣做。
TDengine 這(zhe)類時(shi)序(xu)數(shu)據(ju)庫,是基于(yu)時(shi)序(xu)數(shu)據(ju)的(de)特點以及應用的(de)特點進行優(you)化和設(she)計(ji)的(de),專為解(jie)決上述問題而生。這(zhe)類專業(ye)的(de)數(shu)據(ju)庫使時(shi)序(xu)數(shu)據(ju)的(de)處理變得更加高效,性(xing)能也比(bi)通用數(shu)據(ju)庫更好。
為什么需要時序數據庫
隨著物聯網IoT平臺和(he)云的(de)出現,時序數(shu)據(ju)的(de)量開始(shi)以前所未有(you)的(de)方(fang)式(shi)呈指(zhi)數(shu)級增長:1. 連接設備和(he)物聯(lian)網(wang)的(de)興起,儀表、汽車(che)、電(dian)梯(ti)、甚至自行車(che)等(deng)設備都在源(yuan)源(yuan)不斷地(di)生(sheng)成(cheng)數(shu)據(ju);2. IT 基礎設施在高(gao)速增長,物理服(fu)務器(qi)(qi)、虛擬機、容(rong)器(qi)(qi)、微(wei)服(fu)務等(deng)等(deng)都會生(sheng)成(cheng)海(hai)量時序數(shu)據(ju)。龐(pang)大的(de)時序數(shu)據(ju)集是關系數(shu)據(ju)庫和(he) NoSQL 數(shu)據(ju)庫面臨的(de)主(zhu)要挑戰,大體分為以下(xia)幾個方(fang)面:
- 時序數據積累得非常快,每秒產生數百萬條數據,通用數據庫并不是為處理這種規模的數據而設計的。關系數據庫在非常大的數據集上表現很差,NoSQL 數據庫雖然解決了擴展能力,但是其通用的數據組織方式并不完全適用于對時序數據存儲和查詢需求,用戶必須根據實際應用場景,進行特殊設計甚至大量數據冗余存儲才能較好的利用資源處理請求。
- 隨著數據量的增加,訪問速度越來越慢。同時,大多數通用數據庫為了提升查詢性能,針對大量數據建立索引,由此消耗大量的系統資源。對于海量的時序數據,通用數據庫無法高速加載并滿足實時處理需求。
- 設備和應用在 7*24 小時不間斷地生成數據——有時一天的數據量就超過 1 TB。關系數據庫和 NoSQL 數據庫沒有針對時序數據的特點來壓縮這些數據,因此,存儲成本會變得很高。
上述問題主要是處理大數據集的效率問題,但通用實時數據庫往往連時序數據應用(yong)的(de)一(yi)些基本需求都無法支持:
- 數據生命周期管理:時序數據具有時效性,超過一定時長的數據通常不再具有價值,時序數據一旦老化,就需要對超過保存時長的數據進行批量刪除處理,而不是針對單條數據的刪除。
- Roll-up:用戶定時聚合歷史數據保存至新的數據表。原始數據和 rolled-up 的數據可能具有不同的生命周期和保留策略。
- 特殊的分析功能:除了一般數據庫提供的功能外,數據庫還要針對時序數據的處理進行擴展,提供累計求和、時間加權平均、移動平均、變化率等眾多時序數據分析功能。
- 插值:時間序列分布會在一些時間線上,且序列會隨著時間的增長往后發展。本質上是在一個固定的時間點記錄數據,但如果要檢查某個具體時間的設備采集的某個量,而傳感器實際采集的時間不是這個時間點,這就要求數據庫能夠根據相鄰的數據點和規則對數據進行插值。
- 連續查詢:在時序應用的場景下,對于依照時間推進順序寫入的實時數據,用戶有時會希望每隔一段固定時間,就能夠按照一定的查詢條件對該時間范圍內的時序數據做一次計算(例如:對該時間范圍內的數據求一次聚合計算),并將計算結果另行保存下來。因此,數據庫需要提供連續查詢(即一種簡化的流計算能力),能夠在時間窗口結束后對窗口內的數據進行計算。
- 窗口查詢:時序數據常常需要根據采集時間對數據進行查詢,本質上是在時間軸上劃分出時間窗口,并對窗口內的數據進行聚合和查詢計算。在實際生產應用中,業務場景要求的查詢條件往往比這個更復雜,需要數據庫能夠按照不同規則、沿時間軸進行窗口劃分,并對各個窗口內的時序數據分別進行聚合、選擇計算等操作。
對于通用數據庫,研發人員需要投入精力通過編寫代碼來實現這些功能。不同場景,不同數據量都需要不同的解決方案,極大增加了研發成本。因此,無論數據集的大小如何,使用專門構建的時序數據庫都是最好的選擇。
為什么時序數據庫(TSDB)變得流行?
時(shi)(shi)序(xu)(xu)數(shu)據(ju)(ju)庫(Time Series Database)并不是一個新興的(de)概念。追溯其歷(li)史,1999 年(nian)問世的(de) RRDtool 應該是最(zui)(zui)早的(de)專用時(shi)(shi)序(xu)(xu)數(shu)據(ju)(ju)庫了。在著名(ming)的(de)數(shu)據(ju)(ju)庫排行網站 DB-engines 上面,時(shi)(shi)序(xu)(xu)數(shu)據(ju)(ju)庫的(de)逐步流行起始于 2015 年(nian),而在過去(qu)的(de)兩年(nian),隨(sui)著物聯網的(de)快速(su)增長,時(shi)(shi)序(xu)(xu)數(shu)據(ju)(ju)庫成(cheng)為(wei)流行度最(zui)(zui)高的(de)數(shu)據(ju)(ju)庫。

越(yue)來(lai)越(yue)多(duo)的設備(bei)連接到(dao)互(hu)聯網(wang)并不(bu)斷將時序數(shu)據發送(song)到(dao)云端,越(yue)來(lai)越(yue)多(duo)的行業開(kai)始對專門構建的時序數(shu)據庫感興趣。
從(cong)技術上講,較舊的(de)時序數據(ju)(ju)解決方案通常(chang)是使用(yong)過(guo)時架構(gou)的(de)封閉系(xi)統(tong),擴展能力不(bu)(bu)足,無法(fa)支持(chi)不(bu)(bu)斷增(zeng)長的(de)數據(ju)(ju)量(liang)。在(zai)過(guo)去,一百(bai)萬個數據(ju)(ju)點似乎是一個巨大的(de)數字,但現在(zai)數百(bai)萬甚至數十億個數據(ju)(ju)點已經(jing)不(bu)(bu)足為奇(qi)了。
此外(wai),運(yun)營(ying)數據(ju)往(wang)往(wang)被(bei)鎖在封閉的傳(chuan)統(tong)系統(tong)中,這阻礙(ai)了業務的創新和(he)(he)發展,與現代(dai)的數據(ju)分(fen)析工具(如人工智(zhi)能和(he)(he)機器學習(xi)框架(jia))相結(jie)合非(fei)常困難(nan),數據(ju)的價(jia)值難(nan)以被(bei)進一步挖掘。并(bing)且,將傳(chuan)統(tong)系統(tong)遷移到(dao)云(yun)端(duan)或其他現代(dai)技術棧中,需要付出巨大成本。
不斷增(zeng)長的市場需(xu)求和舊時(shi)序(xu)數據(ju)解決方案的局限性為新一(yi)代時(shi)序(xu)數據(ju)庫留出了空間。在過去的 10 年里,至少有(you) 20 個新的時(shi)序(xu)數據(ju)庫發布(bu),其中開(kai)源時(shi)序(xu)數據(ju)庫尤其受(shou)歡(huan)迎。


























