什么是时序数据库
简单来说时序数据库就是用来存储时序数据的数据库,而时序数据是基于时间一系列数据,一般来说时序数据是按照时间顺序记录的一序列数据,例如:对某个服务器的性能采集数据,就是一系列时序数据,某个时间点收集服务器的cpu、内存、io等,时间点+性能数据形成一个数据点,一序列的数据点就是时序数据。时序数据库就是专门用来存储这种时序数据的数据库,因为时序数据的特殊性,需要时序数据库能够支持快速的大批量写入、高性能搜索、聚合等
时序数据库的基本概念
metric: 度量,可以类比为关系数据库的table,或是ES中的索引
data point: 数据点,可以类比关系数据库的一行数据
time: 一个数据点产生的时间,在时序数据中是必须字段
fields: (指标列)度量里的数据字段,可以由多个字段组成,存储一个数据点里的数据,随时间变化的数据字段,就放在这里面;比如上述例子:cpu/memory等存在这里
tags: (维度列)度量的附加信息,存放不随时间变化的字段,一般用于存储描述这个数据点的字段,比如上述例子: 服务器ip mac等标识这个数据点的信息字段
一个数据点可以理解为由:time+fields+tags组成,好比关系型数据库一行数据有多个列值组成
时序数据库排名
DB-Engines上2021年1月前15名排名如上图,InfluxDB依然位居榜首
1.InfluxDB
InfluxDB 由 Golang 语言编写,也是由 Golang 编写的软件中比较著名的一个,在很多 Golang 的沙龙或者文章中可能都会把 InfluxDB 当标杆来介绍,这也间接帮助 InfluxDB 提高了知名度。
InfluxDB的主要特点包括下面这些:
1、schemaless(无结构),可以是任意数量的列
2、可扩展(集群)
3、方便、强大的查询语言
4、Native HTTP API
5、集成了数据采集、存储、可视化功能
6、实时数据 Downsampling
7、高效存储,使用高压缩比算法,支持retention polices
8、InfluxDB 是 TSDB 中为数不多的进行了用户和角色方面实现的,提供了 Cluster Admin、Database Admin 和 Database User 三种角色。
InfluxDB 的数据采集系统也支持多种协议和插件: - 行文本 - UDP - Graphite - CollectD - OpenTSDB
不过 InfluxDB 每次变动都较大,尤其是在存储和集群方面,追求平平安过日子,不想瞎折腾的可以考虑下。
注意:由于InfluxDB开发太活跃了,很可能你在网上搜到的资料都是老的,会害到你,所以你需要以官方文档为主。
2.Kbd+
所有 TSDB 中,估计就数这个最酷了,我说的是域名,只有两个字母,猥琐地想一下,域名就值很多钱 :-)。
kdb+是一个面向列的时序列数据库,以及专门为其设计的查询语言q(和他们的域名一样简短)。Kdb+ 混合使用了流、内存和实时分析,速度很快,支持分析 10 亿级别的记录以及快速访问TB级别的历史数据。
不过这是一个商业产品,但是也提供了免费版本(貌似还限制在32位)。
3.Prometheus
Prometheus 是一个开源的服务监控系统和时序列数据库,由社交音乐平台 SoundCloud 在2012年开发,最近也变得很流行。
Prometheus 从各种输入源采集 metric,进行计算后显示结果,或者根据指定条件出发报警。
和其他监控系统相比,Prometheus 的特点包括:
多维数据模型(时序列数据由metric名和一组key/value组成)
灵活的查询语言
不依赖分布式存储,单台服务器即可工作
通过基于HTTP的pull方式采集是序列数据
可以通过中间网关进行时序列数据推送
多种可视化和仪表盘支持
由于 Prometheus 采用了类似 OpenTSDB 和 InfluxDB 的 key/value 维度机制,所以如果你对任一种 TSDB 有了解的话,学习起来会简单些。
4.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 的用户。有此背景,其可信度又加一层,而且网上的资料也相当的多,值得评估一下。
5.RPDtool
RRDtool是用于时序数据的OpenSource行业标准,高性能数据记录和图形系统。RRDtool可以轻松集成到shell scripts, perl, python, ruby, lua ,tcl 应用程序中。
有疑问加站长微信联系(非本文作者)