这两天针对Influxdb有些不爽,主要还是体现在的他性能方面。下面的内容是我这两天总结,应该对大家有些帮助,那么需要说明的是,我用influxdb做时序数据库的应用场景很小,也就是一百多个爬虫节点和数据抽取平台的,加起来不到150个节点的。 当然还没有在线上跑,这段时间一直在做关于metric方面的测试,influxdb已经达到了我的对于业务的各种需求,逻辑存储,各种时间段数据的计算,及前端的展现。 我个人对于grafana的页面不是太关注,因为自己写起来,也就那回事。 只是没有grafana那么绚丽而已。 不扯淡了,开始正题… …

嗯哼,原文的地址是 http://xiaorui.cc/2014/12/15/%E5%85%B3%E4%BA%8Einfluxdb%E7%9A%84%E9%85%8D%E7%BD%AE%E8%B0%83%E6%95%B4%E5%8F%8A%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/

Influxdb已经有了lru缓存,不需要咱们自己在做一个数据缓存了,如果你的内存够大,完全可以把Lru的内存设置大点, 我是16g的内存,默认是200m ,我调节到4G,性能优势相当的明显。  下面是我在函数执行前加了一组timeit统计,第一次没有缓存前是5s左右,第二次访问的时候,直接命中缓存。 


Influxdb是支持udp协议的,有些类似graphite的接受模式。也可以直接把给graphite server的sender指向给Influxdb,collectd也可以这么搞。因为Influxdb为了更大程度的让自己牛逼起来,做了针对别人收集系统的格式解析,他倒是省事呀。 

数据库的引擎默认的rocksdb就行,别在折腾用leveldb了,速度确实和官方的介绍一样,比leveldb要快。一些论坛说hyperleveldb更加的厉害,相比leveldb增加了并行和压缩调整吞吐量,说实话,我切换了引擎测试了下,真的不咋地。 write-buffer-size这是的buffer的值,也可以适当的配置大一点。 

Influxdb在并发的情况,他自己会实现一组batch的批量刷新策略。 

那么我们再来看Influxdb的文件存储的目录结构。 

对于select查询语句的优化,尽量不要一次性的把一段时间的value都取出来,我个人经验是,你自己经过influxdb计算后,再返回前端能更好点。 

下面这个语句是,查询haproxy_33代理的数据,按照10m合并计算,计算的策略是用mean,也就是平均值的函数,后面紧接着时间间隔和limit 500 。 

一句话,尽量找计算,如果有可以,一定要加时间限制或者是limit的限制。 

group by time(30m) 



group by time(10m)

group by time(5m)

 


Q&A:

1.  influxdb是否可以限制内存大小的使用限制. 

据我所知是不行,配置文件没有关于内存限制配置参数,提交过issue,得到的答案也没听懂.  大家可以尝试用docker,cgroup限制内存.    当然在外层进行控制不太合理.  

https://groups.google.com/forum/#!topic/influxdb/jURMcIM5xBs 

2.  有朋友说,他的insert插入数据的速度过慢.

尝试使用他的批量接口,性能提升很是明显,influxdb集群的环境下QPS可以到近1W.



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

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

打造metric监控之Influxdb的各种查询及聚合性能的测试

前言       这两天看了百度的张俊在研究基于metric的监控系统,很是感兴趣,也打算在爬虫系统里面组织一套。 那么以前metric的收集用过g...

阅读全文

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

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

阅读全文