時間序列資料庫TSDB排名
DB-Engines 中時序列資料庫排名
我們先來看一下DB-Engines中關於時序列資料庫的排名,這是當前(2016年2月的)排名情況:
下面,我們就按照這個排名的順序,簡單介紹一下這些時序列資料庫中的一些。下面要介紹的 TSDB 以開源的為主,如果是商業或者 SaaS 服務,也簡單介紹一下其特點,讓大家能對其他領域的事物也有所瞭解。
這裡有一個例外,就是 Pinot 並不在這個排名裡,但是我也把它列在了這裡。
1. InfluxDB
InfluxDB 由 Golang 語言編寫,也是由 Golang 編寫的軟體中比較著名的一個,在很多 Golang 的沙龍或者文章中可能都會把 InfluxDB 當標杆來介紹,這也間接幫助 InfluxDB 提高了知名度。
InfluxDB的主要特點包括下面這些:
- schemaless(無結構),可以是任意數量的列
- 可擴充套件(叢集)
- 方便、強大的查詢語言
- Native HTTP API
- 集成了資料採集、儲存、視覺化功能
- 實時資料 Downsampling
- 高效儲存,使用高壓縮比演算法,支援retention polices
InfluxDB 是 TSDB 中為數不多的進行了使用者和角色方面實現的,提供了 Cluster Admin、Database Admin 和 Database User 三種角色。
InfluxDB 的資料採集系統也支援多種協議和外掛: - 行文字 - UDP - Graphite - CollectD - OpenTSDB
不過 InfluxDB 每次變動都較大,尤其是在儲存和叢集方面,追求平平安過日子,不想瞎折騰的可以考慮下。
注意:由於InfluxDB開發太活躍了,很可能你在網上搜到的資料都是老的,會害到你,所以你需要以官方文件為主。
一句話總結:欣欣向榮、值得一試。
2. RRDtool
RRDtool 全稱為 Round Robin Database Tool,也就是用於操作 RRD 的工具,簡單明瞭的軟體名。
什麼是 RRD 呢?簡單來說它就是一個迴圈使用的固定大小的資料庫檔案(其實也不太像典型的資料庫)。
大體來說,RRDtool 提供的主要工具如下:
- 建立RRD(rrdtool create)
- 更新RRD(rrdtool update)
- 畫圖(rrdtool graph)
這其中,畫圖功能是最複雜也是最強大的,甚至支援下面這些圖形,這是其他 TSDB 中少見的:
- 指標比較,對兩個指標值進行計算,描畫出滿足條件的區域
- 移動平均線
- 和歷史資料進行對比
- 基於最小二乘法的線性預測
- 曲線預測
- 總之,它的畫圖功能太豐富了。
一句話總結:老牌經典、藝多不壓身。
3. Graphite
Graphite 由 Orbitz, LLC 的 Chris Davis 創立於 2006 年,它主要有兩個功能:
- 儲存數值型時序列資料
- 根據請求對資料進行視覺化(畫圖)
相應的,它的特點為:
- 分散式時序列資料儲存,容易擴充套件
- 功能強大的畫圖Web API,提供了大量的函式和輸出方式
- Graphite本身不帶資料採集功能,但是你可以選擇很多第三方外掛,比如適用於* collectd、Ganglia或Sensu的外掛等。同時,Graphite也支援Plaintext、Pickle和AMQP這些資料輸入方式。
Graphite主要由三個模組組成:
- whisper:建立、更新RRD檔案
- carbon:以守護程序的形式執行,接收資料寫入請求
- carbon-cache:資料儲存
- carbon-relay:分割槽和複製,位於carbon-cache之前,類似carbon-cache的負載均衡
- carbon-aggregator:資料集計,用於減輕carbon-cache的負載
- graphite-web:用於讀取、展示資料的Web應用
whisper 使用了類似 RRDtool 的 RRD 檔案格式,它也不像 C/S 結構的軟體一樣,沒有服務程序,只是作為 Python library 使用,提供對資料的 create/update/fetch 操作。
如果你對它的效能比較在意,這裡有一份老的資料可供參考。
Google、Etsy、GitHub、豆瓣、Instagram、Evernote 和 Uber 等很多知名公司都是 Graphite 的使用者。有此背景,其可信度又加一層,而且網上的資料也相當的多,值得評估一下。
一句話總結:群眾基礎好、可以參考。
4. OpenTSDB
OpenTSDB 是一個分散式、可伸縮的時間序列資料庫。它支援豪秒級資料採集所有 metrics,支援永久儲存(不需要 downsampling),和 InfluxDB 類似,它也是無模式,以 tag 來實現維度的概念。
比如,這就是它的一個metric例子:
mysql.bytes_received 1287333217 66666666 schema=foo host=db1 |
OpenTSDB 的節點稱為 TSD(Time Series Daemon (TSD)),它沒有主、從之分,消除了單點隱患,非常容易擴充套件。它主要以HBase作為儲存系統,現在也增加了對 Cassandra 和 Bigtable(非雲端)。
OpenTSDB 以資料儲存和查詢為主,附帶了一個簡單地圖形介面(依賴Gnuplot),共開發、除錯使用。
一句話總結:好用,Cloud Insight也在用這項技術來實現對效能指標進行聚合、分組、過濾。
5.KDB+
所有 TSDB 中,估計就數這個最酷了,我說的是域名,只有兩個字母,猥瑣地想一下,域名就值很多錢 :-)。
kdb+是一個面向列的時序列資料庫,以及專門為其設計的查詢語言q(和他們的域名一樣簡短)。Kdb+ 混合使用了流、記憶體和實時分析,速度很快,支援分析 10 億級別的記錄以及快速訪問TB級別的歷史資料。
不過這是一個商業產品,但是也提供了免費版本(貌似還限制在32位)。
6.KairosDB
KairosDB 是一個 OpenTSDB 的 fork,不過是基於 Cassandra 儲存的。由於 Cassandra 的行比 HBase 寬,所以 KairosDB 的 Cassandra 的預設行大小為 3 星期,而 OpenTSDB 的 HBase 則為 1 小時。
KairosDB 支援通過 Telnet、Rest、Graphite 等協議寫入資料,你也可以通過編寫外掛自己實現資料寫入。
KairosDB 也提供了基於 Web API 的查詢介面,支援資料聚合、持過濾和分組等功能。
同時 KairosDB 提供了一個供開發用的 Web UI,圖形繪製引擎使用了 Flot。
和 OpenTSDB 類似,KairosDB 也提供了外掛機制,你可以使用外掛完成如下工作:
- 新增資料點(data point)監聽器
- 新增新的資料儲存服務
- 新增新的協議處理程式
- 新增自定義系統監視服務
7.Druid
Druid 是一個快速、近實時的海量資料 OLAP 系統,並且是開源的。Druid 誕生於 Metamarkets,後來一些核心人員創立了 IMPLY 公司,進行 Druid 相關的產品開發。
Druid 會按時間來進行分割槽(segment),並且是面向列儲存的。它的主要特性如下:
- 支援巢狀資料的列式儲存
- 層級查詢
- 二級索引
- 實時資料攝取
- 分散式容錯架構
根據去年底 druid.io 的白皮書,現在生產環境下最大的叢集規模如下:
- >3M EVENTS / SECOND SUSTAINED (200B+ EVENTS/DAY)
- 10 – 100K EVENTS / SECOND / CORE
- >500TB OF SEGMENTS (>50 TRILLION RAW EVENTS)
- >5000 CORES (>400 NODES, >100TB RAM)
- QUERY LATENCY (500MS AVERAGE)
- 90% < 1S 95% < 2S 99% < 10S
- 3+ trillion events/month
- 3M+ events/sec through Druid’s real-time ingestion
- 100+ PB of raw data
- 50+ trillion events
Druid 企業使用者比較多,比如 Netflix、Paypal 等。具體可以參考http://druid.io/druid-powered.html。
Druid 架構比較複雜,因此對部署和運維也有一定的負擔,比如需要的機器多、機器配置要高(尤其是記憶體)。
一句話總結:好用,我們在用。
8.Prometheus
Prometheus 是一個開源的服務監控系統和時序列資料庫,由社交音樂平臺 SoundCloud 在2012年開發,最近也變得很流行,最新版本為 0.17.0rc2。
Prometheus 從各種輸入源採集 metric,進行計算後顯示結果,或者根據指定條件出發報警。
和其他監控系統相比,Prometheus 的特點包括:
- 多維資料模型(時序列資料由metric名和一組key/value組成)
- 靈活的查詢語言
- 不依賴分散式儲存,單臺伺服器即可工作
- 通過基於HTTP的pull方式採集是序列資料
- 可以通過中間閘道器進行時序列資料推送
- 多種視覺化和儀表盤支援
由於 Prometheus 採用了類似 OpenTSDB 和 InfluxDB 的 key/value 維度機制,所以如果你對任一種 TSDB 有了解的話,學習起來會簡單些。
一句話總結:貌似比較火,何不試一試?
9.Pinot
Pinot 是一個開源的實時、分散式 OLAP 資料儲存方案。它來自 Linkedin,雖然 Linkedin 最近估價表現很差,但是他們建立的各種軟體、中介軟體實在太多了。這一點我們做軟體的都應該向 Linkedin 表示感謝。
Pinot 就像是一個 Druid 的 copy,不過兩者的靈感都來源於SenseiDB(Sensei 在日語裡為老師的意思,寫成漢字為“先生”)。
Pinot 也像 Druid 一樣,能載入 offline 資料(Hadoop 檔案)和實時資料(Kafka)。Pinot 從設計上就面向水平擴充套件。
Pinot 主要特點:
- 面向列
- 插拔式索引引擎:排序索引、點陣圖索引和反向索引
- 根據查詢語句和segment資訊對查詢/執行計劃進行優化
- 從 Kafka 實時資料攝取(ingestion)
- 從 Hadoop 進行批量攝取
- 類似 SQL 的查詢語言,支援聚合、過濾、分組、排序和唯一處理。
- 支援多值欄位
- 水平擴充套件和容錯
Pinot 的特點和 Druid 很像,兩者可互為參考。
一句話總結:背靠大樹好乘涼。