statpot:使用mongo+bootstrap+highcharts作统计报表

最近作了一个统计项目,这个统计项目大体的需求是统计接口的访问速度。客户端会调用一个接口来记录接口的访问状况,个人需求就须要分析这些数据,而后作出个统计报表。php

需求实现

最初的时候想着天天把这些接口访问状况的信息存储到mysql中,而后根据这些访问状况作个分析再作报表。而后第一个问题就来了,信息包含太多字段了,若是我将每一个信息解析成mysql表的一个字段,那么这个字段很长,并且还有一个致命缺陷,不容易扩展。若是将全部字段都存储为一个json,而后存储到text字段呢,又无法创建索引了。因此这种状况,最适合搬出mongo来了。css

相比于mysql,mongo的好处就是扩展性好,灵活。像统计数据这样很容易需求不肯定的数据确实是个很好的选择。我另外想一想还有个好处就是不用的数据我能够很方便地将数据json化,而后存为文件。而后在须要的时候,也很容易读取直接放入到mongo中去。好比我能够将一个月的数据作一个持久备份之类的操做。html

接着是生成统计报表的部分。各类图是很须要的,因为是给内部作统计报表,不须要兼顾各类浏览器。因此我选择了强大的highCharts。highCharts是一个JS图表库。很方便的就能够生成图表了。亲身体会是这个比flash作图表开发时间缩短多了。你能够从http://www.highcharts.com/上下载3.0版本。mysql

后续呢,因为后面有不少统计变化的需求。每次都写一个过程来生成js代码从而渲染统计报表也是个很繁琐的事情。因而我就打算写一个工具,大体的思路就是依靠修改配置文件就能够直接生成统计报表,报表的页面为了美观我引入了bootstrap 3.0。因而发现这种数据存储mongo,加上配置文件生成报表的模式是很容易实现,也确实很好使用。甚至于你在mongo中增长了一种统计结构,我能够什么都不用修改,只须要增长一个配置项就能够生成新统计结构的图表了,这大都是归功于mongo的json结构化。git

statpot工具

这个工具statpot开源在github上了:github

https://github.com/jianfengye/statpotweb

能够下载result/stat_20130925.html来看生成的报表。sql

生成的报表以下:mongodb

Image(12)

如今是实现了两种:饼图和柱状图。后续有可能的话还会继续加上一些其余统计图表。json

还能想到的一个问题是这个页面若是是动态的,那么必然实时分析须要的时间比较多,而统计报表通常不须要动态的,因此彻底能够作成生成静态文件的方式,因而web/目录下就有动态和静态的入口。这种生成静态报表而后存储的方式也是很好的,好比天天我生成一次动态报表,而后就把mongo中的数据清空或这静态文件化。

固然后来想一想,这种惟配置至上的工具惟一的弊端是配置自己就是一种学习成本,你须要花时间来掌握这个配置。可是这个问题在我看来,和代码同样,应该由配置的语义来解决。

问题记录

记录下开发过程当中特别是使用mongo中遇到的问题:

如何获取一个字段的全部可能的值

使用distinct

Image(11)

如何获取一个字段的全部可能的值,而且计算出每一个值有多少个条目

须要使用group命令

group的命令文档在:http://docs.mongodb.org/manual/reference/method/db.collection.group/

> db.feedbacks.group({

     "key" : {"keys.properties.network_type": true},

     "initial":{"count":0},
     "$reduce":function(cur,prev){

            prev.count=prev.count+1;

     }

})

对应的PHP mongo的API是:http://www.php.net/manual/zh/mongocollection.group.php

参考文章

http://www.cnblogs.com/huangxincheng/archive/2012/02/21/2361205.html

http://api.highcharts.com/highcharts

http://docs.mongodb.org/ecosystem/drivers/php/

http://v3.bootcss.com/

相关文章
相关标签/搜索