PHP中高级工程师面试重点讲解视频课程
Go快速入门浅显易懂视频教程-基础篇
Go快速入门浅显易懂视频教程-中级篇
针对于统计的数据库选型,以及mysql,mongodb,influxdb,prometheus,elasticsearch,druid相关数据库调研的总结
原创杂文 / 时间:2015-11-22 15:41:28 / 阅读:3324 / 分享:2

 

 数据统计是我们生活中经常需要碰到并且需要做的事情,对于数据统计的实现方式可能有很多种。今天我想和大家说的是关于数据库的数据统计。

 现在我们就几个sql语句来说以下几个数据库的优缺点

 1:select count(1),time from table group by time where time > time1 and time < time2; //按秒钟统计

 2: select count(1),date_format(time,'%Y-%m-%d %H:%i') from table group by date_format(time,'%Y-%m-%d %H:%i') time > time1 and time < time2;//按分钟统计

 3:select count(1),date_format(time,'%Y-%m-%d %H') from table group by date_format(time,'%Y-%m-%d %H') where time > time1 and time < time2; //按小时统计

 4: select count(1),date_format(time,'%Y-%m-%d') from table group by date_format(time,'%Y-%m-%d') time > time1 and time < time2;//按天统计

 如何我想按照每5分钟或者10分钟或者15分钟统计一次该怎么写sql?用mysql的方式我还真不知道!!!有谁知道的可以私信我微博(http://weibo.com/lizhi10000)或者直接加qq群讨论也行。

mysql数据库是大家经常用的,mysql实现1.2.3.4等好像也很轻松。但是如果是数据量一大,数据进行分库或者分表,然后在做数据统计,显然需要写其他程序来实现了,而且数据存储是一个问题。

mongodb相对来说确实比mysql优势是查询数据相对来说同样的数据查询速度明显要快。而且mongodb实现了分布式。查询条件根本就不需要进行任何的修改和处理。对于大量数据来说,存储之后mongodb占用的磁盘空间比mysql至少两倍以上。当然了这个数据得基于同样的结构数据和同样的索引。还是会有很大差异的。

influxdb是很新的时序数据库,我看官网平均每两周到一个月更新一次版本,更新太快表现出来的问题也很多。但是总的来说他的这个思路和实现的方式还是非常不错的。写入性能比较差,查询效率基本在数据量大或者小的情况下,时间差距不会很大。我有测试过1亿左右的数据,统计每天的。influxdb还能实现每5分钟每10分钟,每2天之类的进行查询,influxdb的存储方式是2进制文件,很少占用磁盘。比如:SELECT MEAN(water_level) FROM h2o_feet WHERE time > now() - 2w GROUP BY location,time(6h),SELECT MEAN(water_level) FROM h2o_feet WHERE time >= '2015-08-18' AND time < '2015-09-24' GROUP BY time(10d)这一类的统计信息,当然有兴趣可以好好研究这个数据库,但是目前来看是不怎么成熟的。官网地址是:http://influxdb.com。

prometheus是一个开源的服务监控系统和时间序列数据库,他这个数据库优点,查询和统计的方式和influxdb很类似。但是差异是每次要统计的数据只能有一个值,然后这个值需要加需要的条件。如:<metric name>{<label name>=<label value>, ...}所有的都是这种形式然后往一个数据库扔就行。它有个写入端叫pushgateway,数据库会定时到pushgateway消费数据到数据库,存放在localStrage里面。它的这个消费是需要按照时间进行消费的。如果时间过了数据库抓取的窗口期就不会再进行抓取,而且还有一个致命的问题。数据库服务端抓取数据如果里面有timestamp这个字段,如果先消费了时间大的。之后pushgateway数据都进不了数据库服务端。整体来说prometheus的实现思路是很好的。但是实现效果非常差。

elasticsearch是一个基于Lucene的搜索服务和存储。但是它也能实现类似的统计功能。优点查询效率高,功能抢到。缺点就是要求的机器性能要高。

druid是大数据实时查询和分析的高容错、高性能开源分布式系统,旨在快速处理大规模的数据,并能够实现快速查询和分析的数据库。要实现查询,效率和性能都非常高,而且存储也不怎么占资源,唯一难的就是环境配置和系统高可用非常麻烦。

下面对做统计方面的数据库进行简单的表格总结:

数据库查询功能查询性能统计功能写入性能软件配置磁盘占用量硬件要求
mysql支持简单的统计查询一般一般
简单
mongodb支持简单统计条件查询一般
一般简单
influxdb支持强大的时间各种维度统计中等简单
prometheus支持强大的时间各种维度统计一般强大中等比较复杂中等中等
elasticsearch支持强大的时间各种维度统计强大简单
druid支持强大的多查询条件多维度,时间各种维度统计强大复杂


在我的调研结果中,我个人认为druid以后的发展绝对是光明的,大数据的统计和分析唯druid莫属。当然其他软件也会各有各的用处。我只是从一个维度来分析的。




关于作者
按时间分类