time series database------時序數據庫一些特殊機制

時序數據庫全稱爲時間序列數據庫。時間序列數據庫主要用於指處理帶時間標籤(按照時間的順序變化,即時間序列化)的數據,帶時間標籤的數據也稱爲時間序列數據。

時間序列數據主要由電力行業、化工行業等各類型實時監測、檢查與分析設備所採集、產生的數據,這些工業數據的典型特點是:產生頻率快(每一個監測點一秒鐘內可產生多條數據)、嚴重依賴於採集時間(每一條數據均要求對應唯一的時間)、測點多信息量大(常規的實時監測系統均有成千上萬的監測點,監測點每秒鐘都產生數據,每天產生幾十GB的數據量)。

根據時間序列數據的特點,時間序列數據庫對於時間序列的處理會有以下一些機制:

存入速度快:由於時序數據產生的頻率高數據量大,對於時序數據庫的存入性能有很高的要求,一些型的企業系統對於時序數據庫的數據插入要求每秒百萬級。這對於時序數據庫有很高的要求,差不多全部的時序數據庫爲了實現快速存入,會先將數據大批量的存入內存中,進行數據格式化(包括排序,數據格式轉換,壓縮等),然後再flush到磁盤。這樣會大大提高數據的存入速度,但是也會帶來一個很嚴重的問題,在斷電宕機後,未刷入磁盤的數據會丟失。

數據防丟失:爲了防止數據丟失這個嚴重的問題,有一個比較有效的辦法,這個辦法在關係數據庫也是必不可少的一個機制-WAL(Write Ahead Log,預寫日誌),在時序數據庫中應用,對於存入的數據在內存進行格式化之前,先進行無格式的落盤。進行無格式落盤,是爲了減少對於時序數據庫的性能的影響,儘管如此,WAL對於時序數據庫的影響也是特別大的。保證數據完整和性能方面的取捨,更注重於哪方面,就可以決定是否開啓WAL。

查詢速度快:查詢速度快慢最大的因素在於存儲格式,大多數的時序數據庫採用的數據格式是列存,這是爲了在讀取數據時能減少磁盤IO,從而提升查詢速度。一些優秀的時序數據庫,還會採用一些特殊的數據結構和機制來提升查詢速度。比如,在github上有一個開源的時序庫叫做akumuli,這個數據庫的數據存儲結構採用了一種特殊的樹型數據結構。在樹的處理上還有一些特殊的機制來提升查詢速度。

數據持久化後佔用空間小:由於時序數據的數據量龐大而且規律性特別強。對於時序數據存儲使用壓縮是避不可免的。每個時序數據庫都會根據自己的需要去採用一些壓縮算法,支持一種或多種壓縮算法。對於壓縮算法,我們會有兩種要求,壓縮率高;解壓縮速度快。但是這兩個如果要同時達到是不可能的。這些可以根據應用系統的要求,對於採用的壓縮算法進行中和。技術日異更新,也產生了一些非常優秀的算法。比如LAZ,LZ4等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章