About Time | 淺談時序資料庫那些事
- 2019 年 11 月 21 日
- 筆記
導讀
正如《銀翼殺手》中那句在影史流傳經典的台詞:「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倍.並且設計了針對壓縮演算法的記憶體數據結構.在保持對單個時間序列進行時間段查找的同時也能快速和高效的進行全數據掃描。通過將時間序列數據寫到不同地域的主機中,容忍單節點故障,網路切換,甚至是整個數據中心故障。
業界典型時序資料庫解析
近2年來時序資料庫正處於高速發展的階段。中國外雲市場各大主流廠商已經從整個時序生態的不同角度切入,形成各自特色的解決方案完成布局,開始搶佔流量。
而以Facebook Gorilla為代表的優秀的時序資料庫則是脫胎於滿足自身業務發展的需要。學術上,在時序領域裡面更是湧現了一大批黑科技,把時序數據的技術深度推向更高的台階。
阿里巴巴的TSDB團隊自2016年第一版時序資料庫落地後,逐步服務於DBPaaS,Sunfire等等集團業務,在2017年中旬公測後,於2018年3月底正式商業化。
在此過程中,阿里雲TSDB在技術方面不斷吸納時序領域各家之長,開啟了自研的時序資料庫發展之路。
相關閱讀:重磅發布 | 阿里雲時序時空資料庫TSDB 數據寫入效率提升百倍
後續我們將推出時序資料庫連載文章,帶領讀者一起欣賞當前時序領域的技術風景,敬請期待!
關於社區:
DataFun定位於最實用的數據智慧社區,主要形式為線下的深度沙龍、線上的內容整理。希望將工業界專家在各自場景下的實踐經驗,通過DataFun的平台傳播和擴散,對即將或已經開始相關嘗試的同學有啟發和借鑒。
DataFun的願景是:為大數據、人工智慧從業者和愛好者打造一個分享、交流、學習、成長的平台,讓數據科學領域的知識和經驗更好的傳播和落地產生價值。
DataFun社區成立至今,已經成功在全國範圍內舉辦數十場線下技術沙龍,有近倆百位的業內專家參與分享,聚集了萬餘大數據、演算法相關領域從業者。
看官點下「好看」再走唄!?