前言

      这两天看了百度的张俊在研究基于metric的监控系统,很是感兴趣,也打算在爬虫系统里面组织一套。 那么以前metric的收集用过graphite,看到他有推荐Influxdb数据库,不能简单的说它是数据库,他集成了各种的api和web,还有个很强大的web展现 grafana平台。  

     那么咱们开发之前,需要对新事物调研一下。前天抽个时间写了个测试程序,是用python写的,启动的时候开启了100个线程。每隔5s中进行插入数据,并读数据。



读数据设计到的SQL语句是group by 聚合,where time > now()-1h 时间间隔的查询,limit 1000的查询。

当然我服务器的性能不行也有关系,没有多余的服务器让我做测试,我找了个openstack的vm主机,4核心,ssd硬盘。 如果单纯的写入,InfluxDB是毫无压力的,不管是cpu好是io,看了文档据说有用 mmap + b tree 。 关于读就有些恶心了,当然也有可能是我读的太过频繁。 
5 秒钟做100次的高压力计算的聚合的计算。 官方说 可以用集群的方案来扩展InfluxDB的性能。

数据量其实也就两天的数据,不知道随着天数的增长,速度会不会有所下降。   我昨天测试的时候,查询消耗的时间还在1.5s左右, 现在基本是10s以上。 

根据这两天的测试,InfluDB在应用上还比较的合理,API也好用,服务端是采用的GOlang开发的,可以说不会太慢。 但是毕竟Influxdb是一个独立的数据库和服务端的接口,这就意味着  你要单独的维护这些东西。  看需求了,你觉得好就可以了。 我个人还是很推荐使用的。


在并发的情况,开一个终端,去用curl来调用Influxdb的http api,进行针对时间的查询。   

这次是针对时间聚合,每10分钟进行一次聚合。

然后再来一个一定时间段的平均时间计算。 在InfluxDB里面叫做mean计算。 这里也是在100个线程的影响力下,测试的结果。 

那么我们已经得知了,其实最消耗时间的是 做Aggregate 和 group by time(num m)相关的统计 ,那我们把测试的背景换一下,不用100个线程了,改成20个线程在每隔5秒卡卡嘚读写一次。 

结果出来了,0.2s就出来了。有人说INfluxDB在集群的情况下能更好的运算,但是我看到github有人说,他已经把集群的数量加到了5台(我想说,尼玛,来真的呀) ,但是单个任务的速度没有提升,也就是说,他的分布式任务类型 不像hadoop mapreduce那样,会在集群中每个节点设立map池和reduce池,进行同时运算。   InfluxDB更像是mongodb的副本集,在程序逻辑里面做运算 。   详细的集群性能,我还没有时间测试,我估计老外说的 是这么回事。  毕竟像任务分解一致化不好做的,因为InfluxDB还年轻。

 

为了怕被别人勿喷,我这里申明下,下面图的结果是   比较大的压力下造成的,换个说法  适合像graphite那样的小型metrics手机场景,再大的场景就有些欠妥了。  我已经把结果发给了官方,让他们给出更好的优化的方法。 看官方的一些说明,貌似就只能是集群了。 

这个是批量写入的速度,大家会看到写入还是很理想的。 




对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!

关于监控数据库influxdb的配置调整及性能优化

     这两天针对Influxdb有些不爽,主要还是体现在的他性能方面。下面的内容是我这两天总结,应该对大家有些帮助,那么需要说明的是,我用i...

阅读全文

时序数据库InfluxDB的sql聚合及搜索语法

      那么话说,InfluxDB的查询语法是很给力的,很像SQL语句。下面我会一一介绍下,常用的InfluxDB里面常用的SQL语句。 话说 InfluxDB给与...

阅读全文

  1. 请教楼主,知道怎么从influxdb中删除某些记录吗,我开始测试的时候用collectd插入了大量value为0的记录,现在想把他们都删掉