DB-Engines 中时序列数据库排名
我们先来看一下DB-Engines中关于时序列数据库的排名,这是当前(2016年2月的)排名情况:
下面,我们就按照这个排名的顺序,简单介绍一下这些时序列数据库中的一些。下面要介绍的 TSDB 以开源的为主,如果是商业或者 SaaS 服务,也简单介绍一下其特点,让大家能对其他领域的事物也有所了解。
这里有一个例外,就是 Pinot 并不在这个排名里,但是我也把它列在了这里。
1. InfluxDB
InfluxDB 由 Golang 语言编写,也是由 Golang 编写的软件中比较著名的一个,在很多 Golang 的沙龙或者文章中可能都会把 InfluxDB 当标杆来介绍,这也间接帮助 InfluxDB 提高了知名度。
InfluxDB的主要特点包括下面这些:
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 提供的主要工具如下:
这其中,画图功能是最复杂也是最强大的,甚至支持下面这些图形,这是其他 TSDB 中少见的:
一句话总结:老牌经典、艺多不压身。
3. Graphite
Graphite 由 Orbitz, LLC 的 Chris Davis 创立于 2006 年,它主要有两个功能:
相应的,它的特点为:
Graphite主要由三个模块组成:
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 也提供了插件机制,你可以使用插件完成如下工作:
7.Druid
Druid 是一个快速、近实时的海量数据 OLAP 系统,并且是开源的。Druid 诞生于 Metamarkets,后来一些核心人员创立了 IMPLY 公司,进行 Druid 相关的产品开发。
Druid 会按时间来进行分区(segment),并且是面向列存储的。它的主要特性如下:
根据去年底 druid.io 的白皮书,现在生产环境下最大的集群规模如下:
Druid 企业用户比较多,比如 Netflix、Paypal 等。具体可以参考http://druid.io/druid-powered.html。
Druid 架构比较复杂,因此对部署和运维也有一定的负担,比如需要的机器多、机器配置要高(尤其是内存)。
一句话总结:好用,我们在用。
8.Prometheus
Prometheus 是一个开源的服务监控系统和时序列数据库,由社交音乐平台 SoundCloud 在2012年开发,最近也变得很流行,最新版本为 0.17.0rc2。
Prometheus 从各种输入源采集 metric,进行计算后显示结果,或者根据指定条件出发报警。
和其他监控系统相比,Prometheus 的特点包括:
由于 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 主要特点:
Pinot 的特点和 Druid 很像,两者可互为参考。
一句话总结:背靠大树好乘凉。