什么是時序數(shù)據(jù)庫
簡單來說時序數(shù)據(jù)庫就是用來存儲時序數(shù)據(jù)的數(shù)據(jù)庫氨肌,而時序數(shù)據(jù)是基于時間一系列數(shù)據(jù)谁榜,一般來說時序數(shù)據(jù)是按照時間順序記錄的一序列數(shù)據(jù)应役,例如:對某個服務(wù)器的性能采集數(shù)據(jù)荒给,就是一系列時序數(shù)據(jù)秋柄,某個時間點收集服務(wù)器的cpu庸队、內(nèi)存积蜻、io等,時間點+性能數(shù)據(jù)形成一個數(shù)據(jù)點彻消,一序列的數(shù)據(jù)點就是時序數(shù)據(jù)竿拆。時序數(shù)據(jù)庫就是專門用來存儲這種時序數(shù)據(jù)的數(shù)據(jù)庫,因為時序數(shù)據(jù)的特殊性宾尚,需要時序數(shù)據(jù)庫能夠支持快速的大批量寫入丙笋、高性能搜索、聚合等
時序數(shù)據(jù)庫的基本概念
metric: 度量煌贴,可以類比為關(guān)系數(shù)據(jù)庫的table御板,或是ES中的索引
data point: 數(shù)據(jù)點,可以類比關(guān)系數(shù)據(jù)庫的一行數(shù)據(jù)
time: 一個數(shù)據(jù)點產(chǎn)生的時間牛郑,在時序數(shù)據(jù)中是必須字段
fields: (指標列)度量里的數(shù)據(jù)字段怠肋,可以由多個字段組成,存儲一個數(shù)據(jù)點里的數(shù)據(jù)淹朋,隨時間變化的數(shù)據(jù)字段笙各,就放在這里面钉答;比如上述例子:cpu/memory等存在這里
tags: (維度列)度量的附加信息,存放不隨時間變化的字段杈抢,一般用于存儲描述這個數(shù)據(jù)點的字段数尿,比如上述例子: 服務(wù)器ip mac等標識這個數(shù)據(jù)點的信息字段
一個數(shù)據(jù)點可以理解為由:time+fields+tags組成,好比關(guān)系型數(shù)據(jù)庫一行數(shù)據(jù)有多個列值組成
時序數(shù)據(jù)庫排名
DB-Engines上2021年1月前15名排名如上圖惶楼,InfluxDB依然位居榜首
1.InfluxDB
InfluxDB 由 Golang 語言編寫右蹦,也是由 Golang 編寫的軟件中比較著名的一個,在很多 Golang 的沙龍或者文章中可能都會把 InfluxDB 當(dāng)標桿來介紹鲫懒,這也間接幫助 InfluxDB 提高了知名度嫩实。
InfluxDB的主要特點包括下面這些:
1、schemaless(無結(jié)構(gòu))窥岩,可以是任意數(shù)量的列
2甲献、可擴展(集群)
3、方便颂翼、強大的查詢語言
4晃洒、Native HTTP API
5、集成了數(shù)據(jù)采集朦乏、存儲球及、可視化功能
6、實時數(shù)據(jù) Downsampling
7呻疹、高效存儲吃引,使用高壓縮比算法,支持retention polices
8刽锤、InfluxDB 是 TSDB 中為數(shù)不多的進行了用戶和角色方面實現(xiàn)的镊尺,提供了 Cluster Admin、Database Admin 和 Database User 三種角色并思。
InfluxDB 的數(shù)據(jù)采集系統(tǒng)也支持多種協(xié)議和插件: - 行文本 - UDP - Graphite - CollectD - OpenTSDB
不過 InfluxDB 每次變動都較大庐氮,尤其是在存儲和集群方面,追求平平安過日子宋彼,不想瞎折騰的可以考慮下弄砍。
注意:由于InfluxDB開發(fā)太活躍了,很可能你在網(wǎng)上搜到的資料都是老的输涕,會害到你音婶,所以你需要以官方文檔為主。
2.Kbd+
所有 TSDB 中占贫,估計就數(shù)這個最酷了桃熄,我說的是域名,只有兩個字母,猥瑣地想一下瞳收,域名就值很多錢 :-)碉京。
kdb+是一個面向列的時序列數(shù)據(jù)庫,以及專門為其設(shè)計的查詢語言q(和他們的域名一樣簡短)螟深。Kdb+ 混合使用了流谐宙、內(nèi)存和實時分析,速度很快界弧,支持分析 10 億級別的記錄以及快速訪問TB級別的歷史數(shù)據(jù)凡蜻。
不過這是一個商業(yè)產(chǎn)品,但是也提供了免費版本(貌似還限制在32位)垢箕。
3.Prometheus
Prometheus 是一個開源的服務(wù)監(jiān)控系統(tǒng)和時序列數(shù)據(jù)庫划栓,由社交音樂平臺 SoundCloud 在2012年開發(fā),最近也變得很流行条获。
Prometheus 從各種輸入源采集 metric忠荞,進行計算后顯示結(jié)果,或者根據(jù)指定條件出發(fā)報警帅掘。
和其他監(jiān)控系統(tǒng)相比委煤,Prometheus 的特點包括:
多維數(shù)據(jù)模型(時序列數(shù)據(jù)由metric名和一組key/value組成)
靈活的查詢語言
不依賴分布式存儲,單臺服務(wù)器即可工作
通過基于HTTP的pull方式采集是序列數(shù)據(jù)
可以通過中間網(wǎng)關(guān)進行時序列數(shù)據(jù)推送
多種可視化和儀表盤支持
由于 Prometheus 采用了類似 OpenTSDB 和 InfluxDB 的 key/value 維度機制修档,所以如果你對任一種 TSDB 有了解的話碧绞,學(xué)習(xí)起來會簡單些。
4.Graphite
Graphite 由 Orbitz, LLC 的 Chris Davis 創(chuàng)立于 2006 年吱窝,它主要有兩個功能:
存儲數(shù)值型時序列數(shù)據(jù)
根據(jù)請求對數(shù)據(jù)進行可視化(畫圖)
相應(yīng)的讥邻,它的特點為:
分布式時序列數(shù)據(jù)存儲,容易擴展
功能強大的畫圖Web API院峡,提供了大量的函數(shù)和輸出方式
Graphite本身不帶數(shù)據(jù)采集功能计维,但是你可以選擇很多第三方插件,比如適用于* collectd撕予、Ganglia或Sensu的插件等。同時蜈首,Graphite也支持Plaintext实抡、Pickle和AMQP這些數(shù)據(jù)輸入方式。
Graphite主要由三個模塊組成:
whisper:創(chuàng)建欢策、更新RRD文件
carbon:以守護進程的形式運行吆寨,接收數(shù)據(jù)寫入請求
carbon-cache:數(shù)據(jù)存儲
carbon-relay:分區(qū)和復(fù)制,位于carbon-cache之前踩寇,類似carbon-cache的負載均衡
carbon-aggregator:數(shù)據(jù)集計啄清,用于減輕carbon-cache的負載
graphite-web:用于讀取、展示數(shù)據(jù)的Web應(yīng)用
whisper 使用了類似 RRDtool 的 RRD 文件格式俺孙,它也不像 C/S 結(jié)構(gòu)的軟件一樣辣卒,沒有服務(wù)進程掷贾,只是作為 Python library 使用,提供對數(shù)據(jù)的 create/update/fetch 操作荣茫。
如果你對它的性能比較在意想帅,這里有一份老的數(shù)據(jù)可供參考。
Google啡莉、Etsy港准、GitHub、豆瓣咧欣、Instagram浅缸、Evernote 和 Uber 等很多知名公司都是 Graphite 的用戶。有此背景魄咕,其可信度又加一層衩椒,而且網(wǎng)上的資料也相當(dāng)?shù)亩啵档迷u估一下蚕礼。
5.RPDtool
RRDtool是用于時序數(shù)據(jù)的OpenSource行業(yè)標準烟具,高性能數(shù)據(jù)記錄和圖形系統(tǒng)。RRDtool可以輕松集成到shell scripts, perl, python, ruby, lua ,tcl 應(yīng)用程序中奠蹬。