2019独角兽企业重金招聘Python工程师标准>>>

简介

Whisper是一个固定大小的数据库,在设计上类似于RRD(round-robin-database)。它可以为随时间不断变化的数值型数据提供快速,可靠的存储。Whisper还可以把高精度的指标数据转换成低精度的指标数据以满足存储长期的历史数据的需求。比如说把按秒采集的指标转换成按分钟采集的指标,以减少数据量,进行长期存储。

数据点

Whisper使用大端双精度浮点类型来存储数据。每个数据点包含一个时间戳和一个值。

采集和存储策略

每个whisper数据库可以包含一个或者多个针对不同数据的采集和存储策略的定义。这些定义保存在graphite安装路径下的conf/ storage-schemas.conf配置文件里面,如下图所示:

上图就定义了四个数据采集和存储的策略,策略的定义语法如下:

[name]

pattern = regex

retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...

name策略名称,可随意指定

pattern用来匹配具体指标名的正则表达式。如果配置文件里面定义了多个策略,那么收到一个指标数据的时候,会从上到下使用每个策略里面的pattern对指标名称进行正则表达式匹配,最先匹配到的策略将会被使用。

retentions定义了数据采集精度和存储时长。timePerPoint就是多长时间采集一个数据点,timeToStore就是采集的数据最长存储多长时间。每个retentions后面可以定义多个timePerPoint:timeToStore对。每个timePerPoint:timeToStore对按高精度短时长到低精度长时长进行排序。比如:

retentions = 15s:7d,1m:21d,15m:5y

上面的retentions包含了三个timePerPoint:timeToStore对,分别是15秒采集一个数据点,保存7天的数据,1分钟采集一个数据点,保存21天的数据和15分钟采集一个数据点,保存5年的数据。

为了能准确地从高精度数据转换到低精度数据,两个相邻的timePerPoint:timeToStore对定义必须满足低精度定义能被高精度定义整除这个条件。比如上面的1m:21d就能被15s:7d整除,因为1分钟能被15秒整除,而21天可以被7天整除。相反,每180秒采集一次数据的定义就不能被每300秒采集一次数据的定义整除,因为300不能被180整除。

Whisper数据库的最长存储时间由最长的时长定义来决定。比如上面的例子,数据库的最长存储时长就是5年。

数据聚合

当retentions里面包含多个timePerPoint:timeToStore对的时候,那么whisper必须使用一个策略来进行高精度数据到低精度数据的聚合操作。默认的策略是取平均值。可以使用的策略有一下几种:

1:average 取平均值

2:sum    求和

3:last     取最后一个值

4:max    取最大值

5:min     取最小值

数据聚合的规则定义在graphite的安装目录下的conf/ storage-aggregation.conf配置文件里面,如下图所示:

上图就定义了四个数据聚合规则,聚合规则定义的语法如下:

[name]

pattern = <regex>

xFilesFactor = <float between 0 and 1>

aggregationMethod = <average|sum|last|max|min>

name规则的名称,可随意指定,但在这个配置文件里面必须唯一

pattern用来匹配具体指标名的正则表达式。如果配置文件里面定义了多个聚合规则,那么收到一个指标数据的时候,会从上到下使用每个规则里面的pattern对指标名称进行正则表达式匹配,最先匹配到的规则将会被使用。

aggregationMethod数据聚合策略(方法)

xFilesFactor必须是一个0到1之间的浮点型数值。这个值规定了要把高精度的数据转换成一个低精度的数据,高精度的数据必须有几个。

以15s:7d,1m:21d这个定义为例子,高精度的定义是15秒采集一个数据,而低精度的定义是1分钟采集一个数据。那么在高低精度数据转换的时候,正常情况下就是把4个数据点转换成一个数据点。

但是实际可能存在这样的情况,就是1分钟内的数据点没有4个,只有一个,两个,或者三个,就是有的时间点他没有采集到数据。那么xFilesFactor的意思就是在这种数据缺少的情况下,数据点数必须满足多少百分比,才能做数据聚合操作。如果定义成0.5,那么就是说,至少要有2个点才能做数据聚合操作,如果定义成0.1,那就是说只要有1个点就可以做数据聚合操作。

这个值定义成多少,还跟具体的数据聚合策略有关系。如果数据聚合策略是sum(求和),这种策略下就算没有数据点,也是可以做求和操作的,那么xFilesFactor就可以定义成0。如果数据聚合策略是min(求最小值),这种策略下,没有数据点肯定就没法取最小值,那么xFilesFactor就可以定义成0.1,就是说至少要有一个数据点,才能做聚合操作,等等。

存储和检索行为

以retentions = 15s:7d,1m:21d,15m:5y这个多精度定义为例子,当数据写入这个数据库时,数据会被同时写多份。数据会首先被写入到最高精度的数据点中,然后当满足数据聚合条件后,再把多个高精度的数据聚合,写到低精度的数据点中。

获取数据的时候,会使用最符合当前时间段的精度的数据。

硬盘空间效率

在磁盘使用率上,whiper可以说是低效率的。表现在以下几个方面:

1:每个数据点不仅存储了值,还存储了时间戳

2:数据库文件生成时,就把所有的数据点都创建出来了。比如说1m:1d这个定义,在收到第一个数据点的时候,这个数据库文件就被创建了,数据库文件里面总共1440个数据点。不管这些数据点有没有收集到值,数据点都会提前创建好,如果没有值,就是None。

但是这样的数据文件是很小的,比如1m:1d这个定义生成的数据文件大小,才17K,如下所示:

可以使用whisper-info.py +数据库文件名,查看这个文件的一些信息,如下所示:

还可以使用whisper-dump.py + 数据库文件名查看里面的数据点,如下所示:

表现

对于很多应用来说,whiper已经够快了。它比RRD慢的主要原因是whisper是用python写的,而RRD是用C写的。但随着对whisper的不断地优化,实际上他们两者之间的速度差别已经很小了。

-----------------------------------------------------

欢迎关注我的微信公众号 ^_^

转载于:https://my.oschina.net/u/1263964/blog/703259

whisper数据库相关推荐

  1. 数据库的1000+篇文章总结

    数据库的1000+篇文章总结 本文收集和总结了有关数据库的1000+篇文章,由于篇幅有限只能总结近期的内容,想了解更多内容可以访问:http://www.ai2news.com/, 其分享了有关AI的 ...

  2. Graphite的安装与部署

    一.概述 Graphite 是一个基于Django的企业级监控工具,能实时可视化和按时间序列存储数据.严格的说,Graphite只是一个根据数据实时绘图的工具,数据收集通常通过第三方工具(如Gangl ...

  3. Graphite安装

    1. 安装cairo和pycairo yum -y install cairo pycairo 2. pip安装方式 pip是python的一个组件,安装pip的方法可以参考pip安装和使用教程. p ...

  4. Graphite系统监控

    转载至 : http://my.oschina.net/fufangchun/blog/232895?p=1 目录[-] 一.简介: 二.Graphite的安装及配置 0.Graphite目录 1.安 ...

  5. Graphite简介

    2019独角兽企业重金招聘Python工程师标准>>> Graphite引入的前提 之前公司的监控系统使用mysql做过物理设备cpu,内存,磁盘和网卡等资源的数据统计功能,但是效果 ...

  6. Graphite 简介

    2019独角兽企业重金招聘Python工程师标准>>> 一. Graphite 项目简介 Graphite是一个企业级的监控工具,可以在廉价机硬件上运行.最初由Chris Davis ...

  7. graphite安装笔记

    0.Graphite目录 Graphite安装之后,在安装位置(默认为/opt/graphite)的文件布局如下: 目录 介绍 /opt/graphite/bin 二进制文件目录 /opt/graph ...

  8. Graphite监控上手指南

    主要讨论内容 在本文中我们将会谈及如下用于创建Graphite监控系统的主题: Carbon和Whisper简介 Whisper存储模式和聚合 Graphite Web应用 前提条件 首先,我们需要能 ...

  9. 4个开源监控工具介绍

    围绕监控的术语近年来引起了很多混乱,导致一些糟糕的工具宣称能够以一种格式完成所有事情.可观测性的支持者认识到观察一个系统有许多层次.度量标准聚合中最主要的是时间序列数据,这里有许多工具可用,包括开源和 ...

  10. 服务器数据监控、业务数据监控调研

    1.Grafana[数据可视化] grafana 是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时 ...

最新文章

  1. GitHub超3万星:Transformer 3发布,BERT被一分为二
  2. Python中字符串使用方法总结(学习笔记)
  3. php导出excel失败原因,PHPExcel导出Excel文件报找不到该文件错误
  4. 网站如何进行渠道跟踪_网站如何进行搜索引擎优化?
  5. [Ajax] 如何使用Ajax传递多个复选框的值
  6. 如何为Linux系统中的SSH添加双重认证
  7. 奥维地图数据格式_奥维地图导入文件显示 奥维地图支持什么格式文件
  8. 电子证件照尺寸怎样裁剪?怎么把照片裁剪成2寸?
  9. Cloudcompare2.12.2使用vs2022带插件编译以及在WSL中编译cloudCompare【最新实践】
  10. CORS Filter
  11. 微博、微信朋友圈、QQ空间功能对比
  12. web前端牛人博客整理
  13. SAP 财务月结之 外币评估(TCODE:FAGL_FC_VAL,S4版本用 FAGL_FCV)<转载>
  14. 你为什么总是爱拖延?这个我知道
  15. 新手教学,如何快速地画一个PCB板子
  16. 记一次线上微信公众号迁移遇到的坑
  17. css 实现对话气泡
  18. 【Python魔术方法】py复习
  19. PHP将淘宝客链接转换提取成普通淘宝链接
  20. 冰达ROS机器人使用-实现slam建模、自主导航、避障

热门文章

  1. 绕过iframe busting
  2. gst 测试摄像头命令
  3. 格力悄悄上架“大松5G手机”董明珠又杀回手机圈了?
  4. 5G消息标准版——富媒体消息,打造场景信息沉浸式体验
  5. systemverilog随机函数
  6. 实验三mysql查询_实验三 数据库的查询实验
  7. 从日志统计到大数据分析
  8. 看你知道多少种水凝胶的改性及其分类
  9. python模块中函数的用法_怎么使用help函数查看python模块中函数的用法
  10. C++20新特性—概述