時序數據庫連載系列:時序數據庫那些事

時序數據庫連載系列:時序數據庫那些事

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

040

時序數據庫

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)docker

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

  • 時序特性:api

    • 時間戳:通用的業務場景內以秒和毫秒精度爲主,在一些遙感等高頻採集領域,時間戳能夠達到納秒級別。服務器

      時間戳種類包括unix系統時間戳和Calendar, 而且支持時區的自動適配。
    • 採樣頻率:採集頻率通常有2種,一種是週期性的時間採樣頻率,好比服務器性能相關的按期彙總指標。另一種是離散型的採樣,好比網站的訪問等等
  • 數據特性:微信

    • 數據順序追加
    • 數據可多維關聯
    • 一般高頻訪問熱數據
    • 冷數據須要降維歸檔
    • 數據主要覆蓋數值,狀態,事件
  • 數據庫特性(CRUD)網絡

    • 寫入速率穩定而且遠遠大於讀取
    • 按照時間窗口訪問數據
    • 極少更新,存在必定窗口期的覆蓋寫
    • 批量刪除
    • 具有通用數據庫要求的高可用,高可靠,可伸縮特性
    • 一般不須要具有事務的能力

時序數據庫發展簡史

041

第一代時序數據存儲系統

雖然通用關係數據庫能夠存儲時序數據,可是因爲缺少針對時間的特殊優化,好比按時間間隔存儲和檢索數據等等,所以在處理這些數據時效率相對不高。數據結構

第一代時序數據典型來源於監控領域,直接基於平板文件的簡單存儲工具成爲這類數據的首先存儲方式。架構

以RRDTool,Wishper爲表明,一般這類系統處理的數據模型比較單一,單機容量受限,而且內嵌於監控告警方案。併發

基於通用存儲的時序數據庫

伴隨着大數據和Hadoop的發展,時序數據量開始迅速增加,系統業務對於處理時序數據的擴展性等方面提出更多的要求。

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

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

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

然而它也有諸多不足之處,好比低效的全局UID機制,聚合數據的加載不可控,沒法處理高基數標籤查詢等等。

垂直型時序數據庫的出現

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

在數據隨着時間而增加的過程當中,時間序列數據成爲增加最快的數據類型之一。

高性能,低成本的垂直型時序數據庫開始誕生,以InfluxDB爲表明的具備時序特徵的數據存儲引擎逐步引領市場。

它們一般具有更加高級的數據處理能力,高效的壓縮算法和符合時序特徵的存儲引擎。

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

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

時序數據庫發展示狀

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

042

  • 公有云

    • 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在技術方面不斷吸納時序領域各家之長,開啓了自研的時序數據庫發展之路。
這個系列文章帶領讀者一塊兒欣賞下當前時序領域的技術風景。

 

原文連接 更多技術乾貨 請關注阿里云云棲社區微信號 :yunqiinsight  

相關文章
相關標籤/搜索