時序數據簡介時序資料庫最近正在爆發,各搜索引擎的搜索指數也都是呈上升趨勢的。DB-Engine 上的排名:這份排行榜,都是時序資料庫.時序資料庫的興起是有原因的。就拿無人駕駛來說,無人車在運行時需要監控各種狀態,包括坐標,速度,方向,溫度,濕度等等,並且需要把每時每刻監控的數據記錄下來,用來做大數據... ...
時序數據簡介
時序資料庫最近正在爆發,各搜索引擎的搜索指數也都是呈上升趨勢的。
DB-Engine 上的排名:
這份排行榜,都是時序資料庫.
時序資料庫的興起是有原因的。就拿無人駕駛來說,無人車在運行時需要監控各種狀態,包括坐標,速度,方向,溫度,濕度等等,並且需要把每時每刻監控的數據記錄下來,用來做大數據分析。每輛車每天就會採集將近8T的數據。如果只是存儲下來不查詢也還好(雖然已經是不小的成本),但如果需要快速查詢“今天下午兩點在北京路,速度超過60km/h的無人車有哪些”這樣的多緯度分組聚合查詢,那麼時序資料庫會是一個很好的選擇。
比如,證券交易,智能傢具,城市大腦等這些應用程式均依賴一種衡量事物隨時間的變化的數據形式,這裡的時間不只是一個度量標準,而是一個坐標的主坐標軸。
這就是時間序列數據,它漸漸在我們的世界中發揮更大的作用。目前,時間序列資料庫(TSDB)已經成為增長最快的資料庫類別。未來隨著 5G 的到來,時序資料庫將更加流行。
時序數據的基本概念和意義
對時序數據進行建模的話,會包含三個重要部分,分別是:主體,時間點和測量值。套用這套模型,你會發現你在日常工作生活中,無時無刻不在接觸著這類數據。
如果你是一個股民,某隻股票的股價就是一類時序數據,其記錄著每個時間點該股票的股價。
如果你是一個運維人員,監控數據是一類時序數據,例如對於機器的CPU的監控數據,就是記錄著每個時間點機器上CPU的實際消耗值。
時序數據從時間維度上將孤立的觀測值連成一條線,從而揭示軟硬體系統的狀態變化。孤立的觀測值不能叫時序數據,但如果把大量的觀測值用時間線串起來,我們就可以研究和分析觀測值的趨勢及規律。
時序數據的數學模型
數據的存儲要考慮其數學模型和特點,時序數據當然也不例外。
下圖為一段時序數據,記錄了一段時間內的某個集群里各機器上各埠的出入流量,每半小時記錄一個觀測值。這裡以圖中的數據為例,介紹下時序數據的數學模型(不同的時序資料庫中,基本概念的稱謂有可能不同,這裡以騰訊CTSDB為準):
-
measurement: 度量的數據集,類似於關係型資料庫中的 table;
-
point: 一個數據點,類似於關係型資料庫中的 row;
-
timestamp: 時間戳,表徵採集到數據的時間點;
-
tag: 維度列,代表數據的歸屬、屬性,表明是哪個設備/模塊產生的,一般不隨著時間變化,供查詢使用;
-
field: 指標列,代表數據的測量值,隨時間平滑波動,不需要查詢。
這組數據的measurement為Network,每個point由以下部分組成:
-
timestamp:時間戳
-
兩個tag:host、port,代表每個point歸屬於哪台機器的哪個埠
-
兩個field:bytes_in、bytes_out,代表piont的測量值,半小時內出入流量的平均值
同一個host、同一個port,每半小時產生一個point,隨著時間的增長,field(bytes_in、bytes_out)不斷變化
時序數據特點
-
數據模式:時序數據隨時間增長,相同維度重覆取值,指標平滑變化:這點從上面的Network表的數據變化可以看出。
-
寫入:持續高併發寫入,無更新操作:時序資料庫面對的往往是百萬甚至千萬數量級終端設備的實時數據寫入(如摩拜單車2017年全國車輛數為千萬級),但數據大多表徵設備狀態,寫入後不會更新。
-
查詢:按不同維度對指標進行統計分析,且存在明顯的冷熱數據,一般只會頻繁查詢近期數據。
傳統資料庫在時序數據場景下存在的問題
當數據量少的時候在傳統關係型資料庫上加上時間戳一列就能作為時序資料庫。但時序數據往往是由百萬級甚至千萬級終端設備產生的,寫入併發量比較高,屬於海量數據場景。
MySQL在海量的時序數據場景下存在如下問題:
- 存儲成本大:對於時序數據壓縮不佳,需占用大量機器資源;
- 維護成本高:單機系統,需要在上層人工的分庫分表,維護成本高;
- 寫入吞吐低:單機寫入吞吐低,很難滿足時序數據千萬級的寫入壓力;
- 查詢性能差:適用於交易處理,海量數據的聚合分析性能差。
Hadoop生態(Hadoop、Spark等)存儲時序數據會有以下問題:
- 數據延遲高:離線批處理系統,數據從產生到可分析,耗時數小時、甚至天級;
- 查詢性能差:不能很好的利用索引,依賴MapReduce任務,查詢耗時一般在分鐘級。
時序資料庫需要解決以下幾個問題:
- 時序數據的寫入:如何支持每秒鐘上千萬上億數據點的寫入。
- 時序數據的讀取:如何支持在秒級對上億數據的分組聚合運算。
- 成本敏感:由海量數據存儲帶來的是成本問題。如何更低成本的存儲這些數據,將成為時序資料庫需要解決的重中之重。
所以,時序資料庫的誕生就是為瞭解決傳統關係型資料庫在時序數據存儲和分析上的不足和缺陷的。
開源時序資料庫對比
目前行業內比較流行的開源時序資料庫產品有 InfluxDB、OpenTSDB、Prometheus、Graphite等,其產品特性對比如下圖所示:
InfluxDB 是一個開源的時序資料庫,使用 GO 語言開發,特別適合用於處理和分析資源監控數據這種時序相關數據,它目前是時序資料庫中的佼佼者。
隨著時間的推移,各大雲廠商也都推出了自己的時序資料庫。阿裡巴巴的TSDB 團隊自 2016 年第一版時序資料庫落地後,逐步服務於 DBPaaS,Sunfire 等等集團業務,在 2017 年中旬公測後,於 2018 年 3 月底正式商業化。TSDB 在技術方面不斷吸納時序領域各家之長,開啟了自研的時序資料庫發展之路。