因爲工做上的關係,最近看了一些關於時序列數據庫的東西,固然,我所看的也都是以開源方案爲主。數據庫
趁着這股熱勁還沒退,但願能整理一些資料出來。若是正好你也有這方面的需求,那麼但願這一系列的介紹可以幫助到你。緩存
一聽到時序列數據庫,若是隻是稍有耳聞的人,可能馬上會聯想到運維和監控系統。服務器
沒錯,確實是不少運維、監控系統都採用了TSDB做爲數據庫系統來存儲海量的、嚴格按時間遞增的、在必定程度來講結構很是簡單的各類指標(英文可能爲metric、measurement或者相似的其餘單詞)數據。數據結構
這是維基百科上的解釋:運維
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).分佈式
翻譯過來就是「時序列數據庫用來存儲時序列(time-series)數據並以時間(點或區間)創建索引的軟件。」函數
其中,時序列數據能夠定義以下:性能
通常時序列數據都具有以下兩個特色:大數據
所謂的結構簡單,能夠理解爲某一度量指標在某一時間點只會有一個值,沒有複雜的結構(嵌套、層次等)和關係(關聯、主外鍵等)。優化
數據量大則是另外一個重要特色,這是因爲時序列數據由所監控的大量數據源來產生、收集和發送,好比主機、IoT設備、終端或App等。
TSDB做爲一種專爲時序列數據優化而設計的數據庫,在不少方面都和傳統的RDBMS和NoSQL數據庫不太同樣,好比它不關心範式和事務。
其餘方面TSDB的特色主要有如下幾點,這裏簡單羅列了一下。
TSDB在數據寫入方面,具備以下特色:
95%-99%的操做都是寫操做
因爲是時間序列數據,所以數據多爲追加式寫入,並且幾乎都是實時寫入,不多會寫入幾天前的數據。
數據寫入以後,不會更新
基本沒有隨機刪除,多數是從一個時間點開始到某一時間點結束的整段數據刪除。好比刪除上個月,或者7天前的數據。不多出現刪除單獨某個指標的數據,或者跳躍時間段的數據。
區塊刪除很容易進行優化,好比能夠按區塊來分開存儲到不一樣的文件,這樣刪除一個區塊只須要刪除一個文件就能夠了,成本會比較低。
相對於寫入操做,TSDB的讀取操做特色以下:
基本都是按照時間順序讀取一段時間內的數據。
基本數據大,超過內存大小,要選取的只是其一小部分,且沒有規律,緩存幾乎不起任何做用。
TSDB應該天生就要考慮到分佈式和分區等特性,將存儲和查詢分發到不一樣的服務器,以支撐大規模的數據採集和查詢請求。
TSDB的數據是用來分析的,因此TSDB還會提供作數據分析所必須的各類運算、變換函數。好比能夠方便的對時序列數據進行求和、求平均值等操做,就像傳統的RDBMS同樣。
雖然每一個人的場景不太同樣,不過我以爲如下的大部分因素,都值得你們好好考量一下。除了功能上能知足、性能上撐得住,運(售)維(後)等也是咱們準備長期使用所必須面臨的問題。
我本身總結的評價因素主要有以下幾點:
主要就是讀和寫的性能,在前面TSDB的特色中咱們已經講過了。
經過前面的說明,咱們也知道TSDB 99.9%都是讀少寫多,所以寫入性能必須能跟得上、無延時,而且不能阻塞讀操做,且讀操做能快速返回最新的數據。
還有一點必須注意的是,如今不少用戶的數據都跑在雲主機上,那麼IOPS則是一個你必需要注意的因素,超了Plan限制的話很難找出問題緣由。
存儲方案主要會影響到讀寫性能、集羣擴展容易程度、以及運維的複雜度。典型的存儲方案有HDFS、HBase、Cassandra、LevelDB等。
通常來講,集羣主要集中爲存儲和查詢的集羣功能,也表明其可擴展性,由於時序列數據庫的數據量極可能很大,而且增加趨勢不可預測,尤爲是隨着大數據和物聯網的興起,GB已經算入門,TB也是剛起步。
若是你須要定製,或者只是使用TSDB作存儲,本身寫入數據並經過查詢接口進行數據展現,那麼API的完善程度將是一個很重要的評判因素。
還好大部分TSDB都提供了HTTP API,除了簡單的文本格式,有不少還支持JSON格式的輸入、輸出。
Client Library也是一個加分項,有一個好用的、你熟悉的語言的SDK包的話應該會更方便你作開發。
若是能經過相似傳統SQL的select mean(value) from metric where role='user' and time >= xxx and time <= yyy group by dc
來查詢metric的話,是否是剛接觸到TSDB的人更容易上手和理解呢?
可能這看起來比較酷,不過對我來講這隻能算是個加分項而已。由於咱們只會經過API來讀寫數據,並且查詢模式很是固定、數量很少。
可是不少常常出報表的人,可能更喜歡這一特色了,由於老闆、運營可能會按期或者隨時找他們出統計數據。
咱們先來看一下DB-Engines中關於時序列數據庫的排名
這是當前(2016年2月的)排名狀況:
摘自:http://liubin.org/blog/2016/02/18/tsdb-intro/