1. 程式人生 > >時序資料庫連載系列:時序資料庫那些事

時序資料庫連載系列:時序資料庫那些事

時序資料庫連載系列:時序資料庫那些事

正如《銀翼殺手》中那句在影史流傳經典的臺詞:“I've seen things you people wouldn't believe... All those ... moments will be lost in time, like tears...in rain.” 時間浩瀚的人類歷史長河中總是一個耀眼的詞彙,當科技的年輪劃到資料時代,時間與資料庫碰到一起,把資料庫內建時間屬性後,產生了時序資料庫。時序資料庫是一種帶有時間戳業務屬性的垂直型資料庫。自從2014年開始,資料庫熱度排名網站DB-Engines就把時間序列資料庫作為了獨立的目錄來分類統計,而且最近幾年的增長率在全部資料庫分類裡排名第一(見下圖)。

 

 

時序資料庫

A time series database (TSDB) is a software system that is optimized for handling time series data, arrays of numbers indexed by time (a datetime or a datetime range)

以上是維基百科對於時序資料庫的定義。可以把它拆解成3個方面來看:時序特性,資料特性,資料庫特性。

  • 時序特性:
    • 時間戳:通用的業務場景內以秒和毫秒精度為主,在一些遙感等高頻採集領域,時間戳可以達到納秒級別。
      時間戳種類包括unix系統時間戳和Calendar, 並且支援時區的自動適配。
    • 取樣頻率:採集頻率一般有2種,一種是週期性的時間取樣頻率,比如伺服器效能相關的定期彙總指標。另外一種是離散型的取樣,比如網站的訪問等等

 

  • 資料特性:
    • 資料順序追加
    • 資料可多維關聯
    • 通常高頻訪問熱資料
    • 冷資料需要降維歸檔
    • 資料主要覆蓋數值,狀態,事件

 

  • 資料庫特性(CRUD)
    • 寫入速率穩定並且遠遠大於讀取
    • 按照時間視窗訪問資料
    • 極少更新,存在一定視窗期的覆蓋寫
    • 批量刪除
    • 具備通用資料庫要求的高可用,高可靠,可伸縮特性
    • 通常不需要具備事務的能力

 

時序資料庫發展簡史

 

 

第一代時序資料儲存系統

雖然通用關係資料庫可以儲存時序資料,但是由於缺乏針對時間的特殊優化,比如按時間間隔儲存和檢索資料等等,因此在處理這些資料時效率相對不高。

第一代時序資料典型來源於監控領域,直接基於平板檔案的簡單儲存工具成為這類資料的首先儲存方式。

以RRDTool,Wishper為代表,通常這類系統處理的資料模型比較單一,單機容量受限,並且內嵌於監控告警方案。

基於通用儲存的時序資料庫

伴隨著大資料和Hadoop的發展,時序資料量開始迅速增長,系統業務對於處理時序資料的擴充套件性等方面提出更多的要求。

基於通用儲存而專門構建的時間序列資料庫開始出現,它可以按時間間隔高效地儲存和處理這些資料。像OpenTSDB,KairosDB等等。

這類時序資料庫在繼承通用儲存優勢的基礎上,利用時序的特性規避部分通用儲存的劣勢,並且在資料模型,聚合分析方面做了貼合時序的大量創新。

比如OpenTSDB繼承了HBase的寬表屬性結合時序設計了偏移量的儲存模型,利用salt緩解熱點問題等等。

然而它也有諸多不足之處,比如低效的全域性UID機制,聚合資料的載入不可控,無法處理高基數標籤查詢等等。

垂直型時序資料庫的出現

隨著docker,kubernetes, 微服務等技術的發展,以及對於IoT的發展預期越來越強烈。

在資料隨著時間而增長的過程中,時間序列資料成為增長最快的資料型別之一。

高效能,低成本的垂直型時序資料庫開始誕生,以InfluxDB為代表的具有時序特徵的資料儲存引擎逐步引領市場。

它們通常具備更加高階的資料處理能力,高效的壓縮演算法和符合時序特徵的儲存引擎。

比如InfluxDB的基於時間的TSMT儲存,Gorilla壓縮,面向時序的視窗計算函式p99,rate,自動rollup等等。

同時由於索引分離的架構,在膨脹型時間線,亂序等場景下依然面臨著很大的挑戰。

時序資料庫發展現狀

目前,DB-Engines把時間序列資料庫作為獨立的目錄來分類統計,下圖就是2018年業內流行的時序資料庫的關注度排名和最近5年的變化趨勢。

 

 

  • 公有云
    • AWS Timestream
      • 2018.11 Amazon在AWS re Invent大會發布Timestream預覽版。適用於 IoT 和運營應用程式等場景。
        提供自適應查詢處理引擎快速地分析資料,自動對資料進行彙總、保留、分層和壓縮處理。按照寫入流量,儲存空間,查詢資料量的方式計費,以serverless的形式做到最低成本管理。

 

    • Azure Series Insights
      • 2017.4 Microsoft釋出時序見解預覽版,提供的完全託管、端到端的儲存和查詢高度情景化loT時序資料解決方案。強大的視覺化效果用於基於資產的資料見解和豐富的互動式臨時資料分析。
        此外,針對資料型別分為暖資料分析和原始資料分析,按照儲存空間和查詢量分別計費。

 

 

  • 開源
    • OpenTSDB
      OpenTSDB是一個分散式的、可伸縮的時間序列資料庫. 引入metric,tags等概念設計了一套針對時序場景的資料模型,底層採用HBase作為儲存,利用時序場景的特性,採用特殊的rowkey方式,來提高時序的聚合和查詢能力。
    • Prometheus
      Prometheus會將所有采集到的樣本資料以時間序列(time-series)的方式儲存在記憶體資料庫中,並且定時儲存到硬碟上。需要遠端儲存來保證可靠和擴充套件性。
    • InfluxDB
      InfluxDB是單機開源的時序資料庫,由Go語言編寫,無需特殊的環境依賴,簡單方便。採用獨有的TSMT結構實現高效能的讀寫。分散式需要商業化支援。
    • Timescale
      面向SQL生態的時序資料庫,固定Schema,底層基於PG,按時間管理chunk table。

 

  • 學術
    • BTrDB
      BtrDB面向高精度時序資料的儲存應用,設計並提出了 "time-partitioning version-annotated copy-on-write tree" 的資料結構,為每一條時間線構建了一棵樹,並且引入版本的概念處理資料的亂序場景
    • Confluo
      Confluo設計了新型的資料結構”Atomic MultiLog“,採用現代CPU硬體支援的原子指令集,支援百萬級資料點高併發寫入,毫秒級線上查詢,佔用很少的的CPU資源實現即席查詢
    • Chronixdb
      ChronixDB基於Solr提供了時序儲存,並且實現了特有的無失真壓縮演算法,可以與Spark整合,提供豐富的時序分析能力。

 

  • 商業&工業
    • PI
      PI是OSI軟體公司開發的大型實時資料庫,廣泛應用於電力,化工等行業,採用了旋轉門壓縮專利技術和獨到的二次過濾技術,使進入到PI資料庫的資料經過了最有效的壓縮,極大地節省了硬碟空間
    • KDB
      KDB是Kx System開發的時間序列資料庫,通常用於處理交易行情相關資料。支援流、記憶體計算和實時分析Billion級別的記錄以及快速訪問TB級別的歷史資料。
    • Gorilla
      Gorilla是Facebook的一個基於記憶體的時序資料庫,採用了一種新的時間序列壓縮演算法.

可以將資料從16位元組壓縮到平均1.37位元組,縮小12倍.並且設計了針對壓縮演算法的記憶體資料結構.在保持對單個時間序列進行時間段查詢的同時也能快速和高效的進行全資料掃描。
通過將時間序列資料寫到不同地域的主機中,容忍單節點故障,網路切換,甚至是整個資料中心故障。

  • 投資市場
    • 2018年時序資料庫創業公司在投資市場有2筆著名的投資。
      Timescale獲得了來自Benchmark Capital的\$12.4M Series A輪融資。 InfluxDB獲得了來自Sapphire Ventures的\$35M C輪融資。

 

業界典型時序資料庫解析

近2年來時序資料庫正處於高速發展的階段。國內外雲市場各大主流廠商已經從整個時序生態的不同角度切入,形成各自特色的解決方案完成佈局,開始搶佔流量。
而以Facebook Gorilla為代表的優秀的時序資料庫則是脫胎於滿足自身業務發展的需要。學術上,在時序領域裡面更是湧現了一大批黑科技,把時序資料的技術深度推向更高的臺階。
阿里巴巴的TSDB團隊自2016年第一版時序資料庫落地後,逐步服務於DBPaaS,Sunfire等等集團業務,在2017年中旬公測後,於2018年3月底正式商業化。
在此過程中,TSDB在技術方面不斷吸納時序領域各家之長,開啟了自研的時序資料庫發展之路。
這個系列文章帶領讀者一起欣賞下當前時序領域的技術風景。

 

原文連結

本文為雲棲社群原創內容,未經